
- •Лекция 9. Записи, множества
- •Назначение
- •Сравнение массива и записи.
- •Синтаксис объявления записи
- •Type
- •Доступ к полям записи.
- •Инициализация полей записи
- •//Ввод для Stud2 (с префиксом With Stud2) with Stud2 do
- •Массивы записей
- •Формирование массива записей с помощью датчика случайных чисел
- •Вид результата
- •Множественный тип.
- •Операции над множествами
- •Наименование операции над множествами А
- •Функция вывода элементов, содержащихся в множестве DenZnak. Результат работы функции типа Boolean особой
- •Примеры операций над множествами
- •Type
- •// Функция формирования исходной колоды Function CardPack(Out Cards : TCards) : Boolean;
- •//Вывод содержимого произвольной колоды
- •//Сдать карту в колоду игрока CardsG
- •//Бесконечный цикл поиска случайной
- •Var Pack, PackG1, PackG2 : TCards;
Лекция 9. Записи, множества
1.Назначение записей.
2.Сравнение массива и записи.
3.Синтаксис объявления записи.
4.Доступ к полям записи.
5.Массивы записей.
6.Множественный тип.
7.Операции над множествами.
Назначение
Записи относятся к структурным типам, более того, собственно они и являются структурами в их классическом понимании, поэтому часто вместо термина «запись» используется синоним – «структура».
Основное назначение – создание разного рода баз данных, информационных и справочных систем. Они позволяют хранить информацию о свойствах объекта или процесса под единым именем.
Запись, как и массив, относится к структурным типам (нет предопределенного имени типа), поэтому требуется предварительное объявление типа.
Сопоставление свойств массива и записи приведено ниже.
Сравнение массива и записи.
Массив
•Упорядоченная
совокупность
•Размерность массива произвольная
•Одинаковый тип элементов
•Одинаковые имена элементов, совпадающие с именем массива
•Доступ к элементам– <имя_массива>[<индекс>]
•Над массивом в целом допустима только операция присваивания
Запись
•Порядок безразличен
•Размерность записи фиксирована и изменена быть не может
•Разный тип полей – элементов записи
•Различные имена полей записи
•Доступ к полям- <имя_записи>.<имя_поля>
•Над записью в целом допустима только операция присваивания
Синтаксис объявления записи
// С предварительным объявлением типа
Type <Имя_типа>=record
[<имя_поля1> : <тип_поля1>;] [<имя_поля2> : <тип_поля2>;]
. . . . . . . . . . . . . .
[<имя_поляN> : <тип_поляN>;] [<вариантная_часть>]
end; // Внимание! END не парный
Var <Имя_записи> : <Имя_типа>;
// Допускается без предварительного объявления
Var <Имя_типа> : record
[<имя_поля1> : <тип_поля1>;] // см. пример выше
end;
Type
TDate=record
Day : 1..31;
Mon : 1..12;
Yea : 1900..2099; end;
TMan=record
FIO |
: string; |
BDay |
: TDate; |
Addr |
: record |
case |
byte of // Вариантная часть |
1:(City_Home : string[255];
Tel : 1000000..9999999);
2:(Tel_Mobile : 1000000000..9999999999); end;
//Переменные
Var Stud1, Stud2 : TMan;
Доступ к полям записи.
Доступ к полям – элементам записи может быть осуществлен двумя способами: через точку – разделитель и с помощью оператора
with <имя переменной> do <оператор>.
•Точка – разделитель ставится между именем переменной и именем поля. В том случае, когда поле само является структурой нижнего уровня, снова ставится точка и цепочка продолжается, пока не будет достигнуто нужное поле. Например, чтобы получить доступ к полю Day для переменной Stud1 надо указать цепочку
Stud1.BDay.Day.
•Если поле структуры является операндом в выражении, то проще использовать оператор
with Stud1 do BDay.Day:=31;
Или так
with Stud1, BDay do Day:=31;
Инициализация полей записи
BEGIN
// Ввод для Stud1 (разделитель - точка) write(' FIO 1 = '); readln(Stud1.FIO); write(' Birthday in Format: DD MM YYYY = ');
readln(Stud1.BDay.Day, Stud1.BDay.Mon,
Stud1.BDay.Yea); write(' City Home = ');
readln(Stud1.Addr.Tel, Stud1.Addr.City_Home); // Вывод для Stud1 (разделитель - точка)
writeln(Stud1.FIO);
writeln(' Birthday ', Stud1.BDay.Day,'/',Stud1.BDay.Mon,'/',
Stud1.BDay.Yea);
writeln(' Index City/Home Tel');
writeln(Stud1.Addr.PInd, Stud1.Addr.City_Home, Stud1.Addr.Tel);
//Ввод для Stud2 (с префиксом With Stud2) with Stud2 do
begin
write(' FIO 2 = '); readln(FIO);
write(' Birthday in Format: DD MM YYYY = '); with BDay do readln(Day, Mon, Yea);
write(' City Home = ');
with Addr do readln(Tel, City_Home);
//Вывод для Stud2 (с префиксом With Stud2) writeln(FIO);
with BDay do writeln(' Birthday ',
Day,'/',Mon,'/',Yea); writeln(' City/Home Tel');
with Addr do writeln(City_Home, Tel); end;
readln;
END.

Массивы записей
Задача.
Сформировать массив студентов заданной специальности, содержащий общие сведения и данные об успеваемости
Type TStud=record
man : Tman; gr : string;
bm, bf, bx : 0..5; end;
TAStud=array[1..27] of TStud; Var ZI1 : TAStud;
nstud, i, j : 1..27;