Шаг 39.
Структурированные типы. Тип "запись". Фиксированные записи

    На этом шаге мы рассмотрим фиксированные записи.

    Запись, в отличие от массивов, множеств и файлов, является составной структурой данных. Если отдельно взятый массив, множество или файл всегда включают элементы одинакового типа, то записи могут объединять в единое целое любое число структур данных других типов: простых переменных, массивов, множеств, записей и файлов.

    В языке 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 могут располагаться идентификаторы только самых внутренних полей, которые имеют допустимый для ввода из текстового файла тип.

    На следующем шаге мы рассмотрим записи с вариантами.




Предыдущий шаг Содержание Следующий шаг