1. Реальные данные об объектах часто описываются величинами разных типов. Например, товар на складе описывается следующими величинами: наименование (String), количество (Integer), цена (Real), наличие сертификата качества (Boolean) и т. д. В этом случае возникает необходимость хранить и обрабатывать совокупности данных различного типа, поэтому приходится использовать отдельные массивы для каждого типа данных, а для установления соответствия между ними вводятся соответствующие индексы. Такой подход не очень удобен и существенно усложняет написание программы. В Pascal существует другой способ решения таких задач – использование комбинированного типа данных, который называется запись. Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов.
2. Определение типа записи начинается идентификатором Record и заканчивается зарезервированным словом End. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов (имен) полей и типа каждого поля (см. ниже). Тип запись можно описывать:
а) в разделе описания типов
Type
<имя_типа_записи> =Record
<имя_поля_1> : <тип_поля_1>;
< имя_поля_2> : < тип_поля_2>;
…
< имя_поля_k> : < тип_поля_k>;
End;
Var
<имя_переменной> : <имя_типа_записи>;
б) явно в разделе описания переменных
Var
<имя_переменной> :Record
<имя_поля_1> : <тип_поля_1>;
< имя_поля_2> : < тип_поля_2>;
…
< имя_поля_k> : < тип_поля_k>;
End;
Пример 1.
Type
Car =Record {объявление записи из 4-х полей}
Number:Integer;{номер}
Marka:String[20];{марка}
FIO:String[40]; {фамилия и инициалы владельца}
Address:String[60];{адрес владельца}
End; {окончание описания записи}
Var
M, V:Car; {объявление переменных типа- запись}
Идентификатор (<имя_поля_...>) поля должен быть уникален только в пределах записи, т. е. в разных записях поля могут иметь одинаковые имена. Однако во избежание ошибок лучше делать его уникальным в пределах всей программы.
<тип_поля_...> -любой стандартный тип языка Pascal, включая тип запись, т. е. поле записи может быть в свою очередь записью. Если в качестве <тип_поля_...> используется тип, определенный пользователем, то он должен быть объявлен до описания записи.
Из записей одного типа можно составлять массивы
Пример 2.
Type
Person = Record
FIO : String[20];
Age : Integer;
Prof : String[30];
End;
Var
List : Array[1..50] of Person;
3. Обращение к значению поля осуществляется с помощью составного имени, которое состоит из имени переменной типа запись и идентификатора поля, разделенных точкой. Например, чтобы получить доступ к полям записи Car (см. пример 1), надо написать:
M.Number, M.marka, M.FIO, M.Address.
Составное имя можно использовать везде, где допустимо применение типа поля (применение данных такого же тира, как и поле записи). Для присваивания полям значений используется оператор присваивания.
Пример.
а) присваивание полям записи значений в программе (см. пример 1):
M.Number :=1678;
M.Marka :=’ГАЗ-24’;
M.FIO :=’Иванов И. И.’;
M.Address :=’Ул. Пушкина 12-31’;
б) присваивание полям одной записи значений полей другой записи (см. пример):
V:=M;
Обращение к полям записи имеет несколько громоздкий вид, что неудобно при использовании длинных идентификаторов. Для решения этой проблемы в Pascal предназначен оператор присоединения With … Do:
With <переменная_типа_запись>
Do <оператор>;
где <переменная_типа_запись>- имя переменной типа запись, с полями которой нужно работать, <оператор> - простой или составной оператор языка Pascal. Один раз указав имя переменной типа запись в операторе With, можно в пределах этого оператора работать с именами полей как с обычными переменными, т. е. без указания перед идентификатором поля имени переменной, определяющей запись.