На этом шаге мы рассмотрим фиксированные записи.
Запись, в отличие от массивов, множеств и файлов, является составной структурой данных. Если отдельно взятый массив, множество или файл всегда включают элементы одинакового типа, то записи могут объединять в единое целое любое число структур данных других типов: простых переменных, массивов, множеств, записей и файлов.
В языке Object Pascal различают фиксированные (обычные) и вариантные записи.
Обычная фиксированная запись состоит из одного или нескольких полей, для каждого из которых при объявлении указывается имя (идентификатор) и тип. В качестве примера приведем запись, описывающую личную карточку успеваемости студента.
type String7 = String[7]; String20 = String[20] ; TMarks = record MathAnal : Byte; {Мат.анализ} LinAl : Byte; { Лин.алгебра} Prog : Byte; { Программирование } Phys : Byte; { Физика } end; TStudentCard = record SurName: String20; { Фамилия } Name : String20; { Имя } FatherName: String20;{ Отчество } Year: Integer; { Год рождения } HomeAddress: String; { Домашний адрес } GroupCode: String7; { Шифр группы } Marks: TMarks; { Оценки за последний семестр} end;
Обращение к полям записей выполняется с помощью квалифицируемых (уточненных) идентификаторов, в которых указывается вся цепочка имен от идентификатора переменной типа "запись" до идентификатора требуемого поля. Имена полей квалифицируемого идентификатора разделяются точками. Пусть будут описаны следующие тип и переменные:
tуре TGroup = array [1..25] of TStudentCard; var Group_KB51, Group_KB52: TGroup;
В этом случае корректными будут такие операторы и обращения полям записей:
Group_KB51[1].Name := 'Sergey'; Group_KB51[1].Year := 1978; Group_KB51[1].Marks.Prog := 5; Group_KB51[1].Marks := Group_KB52[1].Marks; Group_KB51[5] := Group_KB52[7]; Group_KB51 := Group_KB52;
Для упрощения работы с записями и придания программе большей наглядности в Object Pascal имеется специальный оператор присоединения with. С использованием этого оператора вышеприведенные операторы будут записаны в таком виде:
with Group_KB51[1] do begin Name := 'Sergey'; Year := 1978; Marks.Prog := 5; Marks := Group_KB52[1].Marks; end; Group_KB51[5] := Group_KB52[7]; Group_KB51 := Group_KB52;
При заполнении информацией структур данных типа "запись" из текстовых файлов необходимо помнить, что файлы типа Text допускают чтение данных только некоторых стандартных типов. Поэтому, в операторах Read и Readln могут располагаться идентификаторы только самых внутренних полей, которые имеют допустимый для ввода из текстового файла тип.
На следующем шаге мы рассмотрим записи с вариантами.