Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_2012-09-18.pdf
Скачиваний:
49
Добавлен:
19.03.2016
Размер:
812.31 Кб
Скачать

Глава 49

Глава 49

Г) Садовая ограда. Вернувшись с курорта, фермер Лефт обнаружил на своем поле чудесно выросший сад. Для сохранения деревьев он обнес его прямоугольной оградой. Пусть ширина и высота поля заданы константами CX и CY, пустые места обозначены точками, а деревья звездочками. Засадите поле случайным образом и распечатайте его.

Затем найдите левый верхний и правый нижний углы ограды и постройте её символом решетки (ограда должна охватывать деревья, но не выходить за пределы поля). Распечатайте сад с оградой.

const CX=60; CY=20; { ширина и высота поля }

type TField = array [1..CX, 1..CY] of Char;

var Field : TField;

{ Посадка деревьев }

procedure MakeGarden(N: integer); var i, x, y: integer;

begin

FillChar(Field, SizeOf(Field),'.'); for i:=1 to N do begin

x:= 1 + Random(CX); y:= 1 + Random(CY); Field[x,y]:= '*';

end; end;

{Показ поля } procedure ExpoGarden; var x, y: integer; begin

for y:=1 to CY do begin

for x:=1 to CX do Write(Field[x,y]); Writeln;

end; end;

{Исследование сада }

procedure ScanGarden(var Xmin, Ymin, Xmax, Ymax : integer); var x, y: integer;

begin

Xmin:=

CX+1;

Ymin:=

CY+1;

Xmax:=

0;

Ymax:=

0;

for x:=1 to CX do for y:=1 to CY do

if Field[x,y]='*' then begin if XMin>x then XMin:=x; if YMin>y then YMin:=y; if XMax<x then XMax:=x; if YMax<y then YMax:=y;

end;

end;

94

Глава 49

{ Постройка ограды }

procedure MakeRail(Xmin, Ymin, Xmax, Ymax : integer); const CRail='#';

var x, y: integer; begin

if YMin>1 then for x:=XMin to XMax do Field[x,Ymin-1]:= CRail; if YMax<CY then for x:=XMin to XMax do Field[x,Ymax+1]:= CRail; if XMin>1 then for y:=YMin to YMax do Field[XMin-1,y]:= CRail; if XMax<CX then for y:=YMin to YMax do Field[XMax+1,y]:= CRail;

end;

var Xmin, Ymin, Xmax, Ymax : integer; { координаты углов ограды }

begin

Randomize; MakeGarden(10);

ScanGarden(Xmin, Ymin, Xmax, Ymax); Writeln('Xmin, Ymin = ', Xmin:4, Ymin:4); Writeln('Xmax, Ymax = ', Xmax:4, Ymax:4); ExpoGarden;

Readln;

MakeRail(Xmin, Ymin, Xmax, Ymax); ExpoGarden;

Readln; end.

95

Глава 50

Глава 50

Д) Домино. В этой игре используют 28 костяшек, каждая из которых содержит пару чисел от 0 до 6. Например: 0:0, 1:5, 6:6. Представьте костяшку записью, а игральный набор массивом этих записей. Заполните массив костяшек и распечатайте его. «Смешайте» костяшки случайным образом и вновь распечатайте массив. Для удобства направьте распечатку в текстовый файл.

const CSize= 7*4;

type TDomino = record N1, N2 : integer end; TPack = array [1..CSize] of TDomino;

var Pack : TPack;

procedure Generate; { Заполнение массива костяшек } var i, j, k: integer;

begin k:=0;

for i:=0 to 6 do

for j:=i to 6 do begin

Inc(k);

Pack[k].N1:=i;

Pack[k].N2:=j; end;

end;

procedure Expo; { распечатка костяшек } var k: integer;

begin

for k:=1 to CSize do Writeln(Pack[k].N1:2,' :', Pack[k].N2:2); Readln;

end;

procedure Shuffle; { перемешивание массива костяшек } var i, j, k: integer;

temp: TDomino; begin

for k:=1 to 100 do begin i:= Random(CSize)+1;

repeat j:= Random(CSize)+1 until j<>i; temp:= Pack[i];

Pack[i]:= Pack[j]; Pack[j]:= temp;

end; end;

begin

Generate; { Заполнение массива костяшек } Expo;

Shuffle; { Перемешивание массива костяшек } Expo;

end.

96

Глава 50

Е) Карты. Колода содержит 36 карт четырех мастей: трефы и пики черные, бубны и червы красные. Относительная сила карты определяется числом от 6 до 14. Представьте карту записью, содержащей её масть, цвет и силу. Представьте колоду массивом записей, сформируйте полную колоду и распечатайте в текстовый файл. «Перетасуйте колоду и вновь распечатайте в файл. При распечатке учтите, что сила карт от 11 до 14, печатается названиями: валет, дама, король, туз.

const CSize= 4*9; { 36 карт в колоде } type TCard = record

mLevel : integer; { 6,7,8,9,10,Валет, Дама, Король, Туз } mColor : boolean; { Черная (false) или Красная (true) } mSuit : String; { Трефы, Бубны, Пики, Червы }

end;

TPack = array [1..CSize] of TCard; var Pack : TPack;

procedure Generate; var i, j, k: integer; begin

k:=0;

for i:=0 to 3 do

for j:=6 to 14 do begin

Inc(k); Pack[k].mLevel:= j; if (i mod 2)<>0

then Pack[k].mColor:=true else Pack[k].mColor:=false;

case i of

0: Pack[k].mSuit:=' Трефы (Clubs)';

1: Pack[k].mSuit:=' Бубны (Diamonds)';

2: Pack[k].mSuit:=' Пики (Spades)';

3: Pack[k].mSuit:=' Червы (Hearts)'; end

end;

end;

procedure Expo; var k: integer; begin

for k:=1 to CSize do begin case Pack[k].mLevel of

6..10: Write(Pack[k].mLevel:10); 11: Write('Валет':10);

12: Write('Дама':10);

13: Write('Король':10);

14: Write('Туз':10);

end;

if Pack[k].mColor

then Write('Красная':10) else Write('Черная':10);

Writeln(Pack[k].mSuit); end;

Readln; end;

97

Глава 50

procedure Shuffle; var i, j, k: integer;

temp: TCard; begin

for k:=1 to 100 do begin i:= Random(CSize)+1;

repeat j:= Random(CSize)+1 until j<>i; temp:= Pack[i];

Pack[i]:= Pack[j]; Pack[j]:= temp;

end; end;

begin

Generate;

Expo;

Shuffle;

Expo; end.

98

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]