Описание типа «Запись»

Реальные данные об объектах часто описываются величинами разных типов. Например, товар на складе описывается следующими величинами: наименование, количество, цена, наличие сертификата качества и т. д. В этом примере наименование – величина типа string, количество – integer, цена – real, наличие сертификата качества можно описать величиной типа boolean. Для записи комбинации объектов разных типов в Pascal применяется комбинированный тип данных – запись.

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

Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов. Определение типа записи начинается идентификатором record и заканчивается зарезервированным словом end. Между ними располагается список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля.

Формат:

type
<имя типа> = record
<идентификатор поля>:<тип компонента>;
<идентификатор поля>:<тип компонента>
end;
 
var
<идентификатор, …> : <имя типа>;

Пример:

type Саr = record
Number : integer; {Номер}
Marka : string[20]; {Марка автомобиля}
FIO : string[40]; {Фамилия, инициалы владельца}
Address : string[60] {Адрес владельца}
end;
var
М, V : Саr;

В данном примере запись Саr содержит четыре компонента: номер, название марки машины, фамилию владельца и его адрес. Доступ к полям записи осуществляется через переменную типа «запись». В нашем случае это переменные М и V типа Саr.

Идентификатор поля должен быть уникален только в пределах записи, однако во избежание ошибок лучше делать его уникальным в пределах всей программы. Объем памяти, необходимый для записи, складывается из длин полей.

Значения полей записи могут использоваться в выражениях. Имена отдельных полей не применяются по аналогии с идентификаторами переменных, поскольку может быть несколько записей одинакового типа. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Саr, надо записать:

М.Number
M.Marka
M.FIO
M.Address

Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания.

Пример:
М.Number := 1678;
М.Marka := ТАЗ — 24′;
M.FIO := ‘Демьяшкин В.А.1’;
M.Address := ‘ул. Пушкина 12 — ЗГ’;

Составные имена можно использовать, в частности, в операторах ввода-вывода:

Read(M.Number, M.Marka, M.FIO, M.Address);
Write(M.Number:4, M.Marka:7, M.FI0:12, M.Address:25);

Допускается применение оператора присваивания и к записям в целом, если они имеют одинаковый тип. Например,

V := М;

После выполнения этого оператора значения полей записи V станут равны значениям соответствующих полей записи М.

В ряде задач удобно пользоваться массивами из записей. Их можно описать следующим образом:

type
Person = record
FIO : string[20];
Age : 1 .. 99;
Prof : string[30]
end;
var
List : array[1..5O] of Person;

Обращение к полям записи имеет несколько громоздкий вид, что особенно неудобно при использовании мнемонических идентификаторов длиной более пяти символов. Для решения этой проблемы в языке Pascal предназначен оператор with, который имеет следующий формат:

with <переменная типа запись> do <оператор>;

Один раз указав переменную типа запись в операторе with, можно работать с именами полей как с обычными переменными, т.е. без указания перед идентификатором поля имени переменной, определяющей запись.

Добавить комментарий