Запись - описание комбинированного типа, состоящее из нескольких полей, каждое из которых имеет свой тип. Структура записи аналогична таблице.
Записи состоят из фиксированного числа компонентов, называемых полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа.
Структура данных типа записи
Структура объявления типа "запись" имеет следующий вид:
TYPE <ИмяТипа> = RECORD
<поле1>: <тип поля1>;
<поле2>: <тип поля2>;
. . .
<полеN>: <тип поляN>
end;
Если тип нескольких полей совпадает, то имена полей можно перечислить через запятую. <ИмяТипа> и поля являются правильными идентификаторами.
Список значений полей представляет собой список из последовательностей вида: имя поля, двоеточие и константа. Поля должны указываться в той же последовательности, в какой они перечислены в объявлении типа. Например:
TYPE POINT = record
x, y: real;
end;
CONST
p: POINT = (x:1; y:1);
Объявление переменных производится в разделе VAR:
VAR a, b: DENROGD;
Доступ к каждой компоненте записи производится указанием составного имени: имени переменной и затем через точку имени поля. Например:
a.name := ' MARINA';
a.god := 1991;
a.den := 23;
a.mes := 3;
Таким образом, в типе "запись" определена операция присваивания. Кроме того, как и в массиве, все значения переменных типа "запись" можно присваивать другим переменным того же типа: B := A; .
Над полями можно выполнять действия, разрешенные для базового типа:
b.god := а.god + 1; {на год старше}.
В качестве переменной может быть объявлен массив записей:
VAR s: array[1..20] of STUDENT;
Пример. Разработать программу формирования списка студентов с указанием дат рождения. Распечатать список в алфавитном порядке.
Program zapis;
Type {определение нового типа}
student = record {запись}
name: string[15];
den, mes: byte;
god: word
end;
Var
Z: ARRAY [1..20] OF student;
k, m, i, n: byte;
r: string[15]; {вспомогательная строка для перестановки}
BEGIN
writeln('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ');
READln(n);
for i:=1 to n do
begin
writeLN('ВВЕДИТЕ имя ',i,' студента с прописной буквы');
readLN (z[i].name);
WRITELN('ВВЕДИТЕ день рождения');
readLN(z[i].den);
WRITELN('ВВЕДИТЕ месяц рождения');
readLN(z[i].mes);
WRITELN('ВВЕДИТЕ год рождения');
readLN(z[i].god);
end;
for I := n downto 2 do {********* Упорядочение списка *********]
begin {поиск "наибольшего" значения поля NAME}
m:=1;
for k:=2 to i do if z[k].name > z[m].name then m := k;
r := z[i].name; {перестановка записей}
z[i].name := z[m].name;
z[m].name := r
end; {**************************************}
writeln(' Упорядоченный список ');
for i:=1 to n do
begin
WRITE(z[i].name);
WRITELN(' Дата рождения:', z[i].den, '.' ,z[i].mes, '.', z[i].god);