При решении большого класса задач, связанных с обработкой информационных массивов различного назначения, возникает необходимость хранить и обрабатывать данные разного типа, логически относящиеся к одному объекту. Для этого в языке Object Pascal предназначен комбинированный тип данных, называемый RECORD.
ЗАПИСЬ – структурированный тип данных, состоящий из фиксированного числа компонентов разного типа. Определение типа записи начинается идентификатором RECORD и заканчивается зарезервированным словом END. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля.
Тип данных RECORD предоставляет возможность объединять в одну связную структуру различные по типу и смыслу поля. Причем элементами записи могут быть и структурированные типы данных, например, массивы и другие (подчиненные) записи. Для обработки доступна как вся запись целиком, так и ее отдельные поля.
Формат описания типа данных RECORD
TYPE < имя типа > = RECORD
<идентификатор поля> : <тип компонент>;
…
<идентификатор поля> : <тип компонент>;
END;
VAR
<идентификатор,…> : <имя типа>;
Например,
TYPE
STR = RECORD
FAM: STRING [35];
B1, B2, B3, B4, B5: 2..5;
SB: REAL
END;
VAR
st1, st2, st3, st4: STR;
В данном примере запись STR содержит семь компонент: фамилию студента, оценки по пяти предметам, средний балл. Доступ к полям записи осуществляется через переменные st1, st2,st3 и st4 типа STR (запись).
Существует возможность описывать переменные типа RECORD непосредственно в разделе описания переменных.
Например,
VAR
GRUPPA : ARRAY [1..30] OF RECORD
FAM: STRING [35];
NAME: STRING [15];
GOD_R: INTEGER;
END;
Идентификатор поля должен быть уникальным только в пределах записи, но во избежание ошибок его целесообразно делать уникальным в пределах всей программы.
Значения полей записи могут быть использованы в выражениях. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется СОСТАВНЫМ ИМЕНЕМ. Например, чтобы получить доступ к полям записи STR из приведенного выше примера, надо записать
Для присваивания полям значений используется оператор присваивания.
Например,
ST1.FAM := ‘Сидоров’;
ST2.FAM := ‘Петров’;
Допускается применение оператора присваивания к записям в целом, если они имеют один и тот же тип.
Например,
ST3 : = ST2;
После выполнения этого оператора значения полей записи ST3 станут равны значениям соответствующих полей записи ST2. Следовательно, оператор присваивания ST3 : = ST2 эквивалентен следующей группе операторов:
ST3.FAM : = ST2.FAM; ST3.B4 : = ST2.B4;
ST3.B1 : = ST2.B1; ST3.B5 : = ST2.B5;
ST3.B2 : = ST2.B2; ST3.SB : = ST2.SB;
ST3.B3 : = ST2.B3;
При решении ряда задач удобно оперировать массивамииз записей. Например, приведенную выше запись STR необходимо использовать для хранения информации по всей группе из 30 студентов. Это можно сделать следующим образом:
TYPE
STR = RECORD
FAM: STRING [35];
B1, B2, B3, B4, B5: 2..5;
SB: REAL;
END;
VAR
GRUPPA : ARRAY [1..30] OF STR;
(Еще один возможный вариант описания массива, содержащего данные типа RECORD, был рассмотрен ранее.)
Составное имя в случае работы с массивом записей будет иметь вид