
- •Лекция 9. Записи, множества
- •Назначение
- •Сравнение массива и записи.
- •Синтаксис объявления записи
- •Type
- •Доступ к полям записи.
- •Инициализация полей записи
- •//Ввод для Stud2 (с префиксом With Stud2) with Stud2 do
- •Массивы записей
- •Формирование массива записей с помощью датчика случайных чисел
- •Вид результата
- •Множественный тип.
- •Операции над множествами
- •Наименование операции над множествами А
- •Функция вывода элементов, содержащихся в множестве DenZnak. Результат работы функции типа Boolean особой
- •Примеры операций над множествами
- •Type
- •// Функция формирования исходной колоды Function CardPack(Out Cards : TCards) : Boolean;
- •//Вывод содержимого произвольной колоды
- •//Сдать карту в колоду игрока CardsG
- •//Бесконечный цикл поиска случайной
- •Var Pack, PackG1, PackG2 : TCards;
Type
//Масть карты и ее достоинство определены
//типом перечисление
TMast |
= (pic, trf, bub, che); |
TGrade = (_6, _7, _8, _9, _10, Valet, |
|
|
Dame, King, Tuz); |
TSetGrade = set of TGrade; |
|
TCards |
= array[TMast] of TSetGrade; |
//Массивы соответствия для вывода
Const SMast : array[TMast] of string[3] =
('pic','trf','bub','che'); BGrade : array[TGrade] of byte =
(6, 7, 8, 9, 10, 3, 4, 5, 11);
// Функция формирования исходной колоды Function CardPack(Out Cards : TCards) : Boolean;
Var Mast : TMast; Grade : TGrade;
Begin
for Mast:=pic to che do begin
Cards[Mast]:=[];
for Grade:=_6 to Tuz do
Cards[Mast]:=Cards[Mast] + [Grade];
end;
Result:=true;
End;
//Вывод содержимого произвольной колоды
//по мастям
Function OutPack(Cards : TCards) : Boolean;
Var Mast : TMast; Grade : TGrade;
Begin
for Mast:=pic to che do begin
write(SMast[Mast]:7,' : '); for Grade:=_6 to Tuz do
if Grade in Cards[Mast] then write(BGrade[Grade]:5);
writeln;
end;
writeln;
Result:=True;
End;
//Сдать карту в колоду игрока CardsG
//из колоды сдающего CardsD
//true – карта сдана; false – колода
//сдающего пуста
Function GetCard(Var CardsG, CardsD : TCards) :
Boolean;
Var Mast : TMast; Grade : TGrade;
Begin
//Если колода сдающего пуста - выход
if (CardsD[pic]=[]) and (CardsD[trf]=[]) and (CardsD[bub]=[]) and (CardsD[che]=[]) then
begin Result:=false; exit;
end;
//Бесконечный цикл поиска случайной
//карты или выход, если нашли Randomize;
repeat
Mast:=TMast(Random(4));
Grade:=TGrade(Random(9));
if Grade in CardsD[Mast] then begin
CardsD[Mast]:=CardsD[Mast] - [Grade];
CardsG[Mast]:=CardsG[Mast] + [Grade];
Result:=True;
exit;
end;
until false; End;
Var Pack, PackG1, PackG2 : TCards;
BEGIN
CardPack(Pack);
OutPack(Pack);
//Сдать 2 игрокам по 2 карты и
//вывести содержимое колод
//игроков и дилера
GetCard(PackG1, Pack); GetCard(PackG2, Pack);
GetCard(PackG1, Pack); GetCard(PackG2, Pack); OutPack(PackG1);
OutPack(PackG2);
OutPack(Pack);
readln;
END.