Const MaxLen = 25;
type t_range=1.. MaxLen;
t_date=record {Тип для работы с датами}
day: 1..31;
month: 1..12;
year: 0..9999
end; {end записано под соответствующим record}
t_student=record {Тип для хранения информации о студенте}
name: string[20];
birthday: t_date; {Поле-запись}
group: string[5];
marks: array[1..4] of 2..5
end;
t_group= array[t_range] of t_student;
var d1, d2: t_date; {Переменные для хранения дат}
group: t_group;{Переменная для хранения информации о студентах группы}
Над записями, как едиными целыми, не определены никакие операции. Совместимость по присваиванию требует тождественности типов. Для описанных выше переменных допустимы присваивания:
d1:=d2; group[1]: =group[25].
Обращение к полю записи представляет собой составное имя:
Составное имя можно использовать везде, где допустим тип поля. Например, d1.day:=5; read(group[1].name). Имена полей записей могут совпадать с именами других переменных, при этом путаницы не возникает, так как обращение к ним иное. Например, group - массив, group[i] - элемент массива, group[i]. group - поле i-й записи.
Пример 2. Процедура для определения даты следующего дня невисокосного года:
Procedure next_date(d1: t_date; var d2: t_date);
{d1 - данная дата, d2 - результат (дата следующего дня)}
var max: 28..31; {число дней в месяце}
begin d2:=d1;
case d2.month of {Определение числа дней в заданном месяце}
2: max:=28;
4, 6, 9, 11: max:=30
else max:=31
end;
if d2.day<max then d2.day:= d2.day+1
else begin d2.day:= 1;
if d2.month<12 then d2.month:= d2.month+1
else begin d2.month:= 1; d2.year:= d2.year+1
end
end
end;