Структурированный тип данных  записи.


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

Формат оператора:
type <имя типа> = record
<имя поля>: <тип>;
<имя поля>: <тип>;

end;

Запись объединяет в одну структуру характеристики, описывающие объект, позволяя рассматривать их как единое целое, принадлежащее одному объекту. Именно поэтому записи имеют большое практическое применение в программировании.
Например,
type carT = record
marka: string[20];
nomer: string[6];
fio: string[40];
dl: real;
custom: boolean;
end;

В примере запись carT содержит 5 компонент: название марки машины, номер машины, фамилию, имя владельца машины, длину автопрбега и признак растаможена ли машина.
Объем памяти, необходимый для записи, складывается из длин полей.
var car: carT;   { переменная car занимает 21+7+41+6+1 (байт)}

Обращение к переменной типа запись производится с помощью составного имени, которое включает имя самой записи и имени поля через точку.
car.marka := 'opel';
car.nomer := 'O761XВ';
car.fio := 'Иванов И.И.';
car.dl := 10000;
car.custom := true;

Составные имена есть переменные соответствующего типа, которые можно использовать в выражениях, где допустимо применение этой переменной.
s := car.dl / 100;

Ввод и вывод записи производится по-компонентно.
readln (car.marka, car.nomer);
readln (car.fio);
read (car.dl);

Заметим, что переменную булевского типа нельзя ввести, зато можно вывести.
writeln (car.marka, ' ',car.nomer,' ', car.fio,' ', car.dl:0:3, car.custom).

Допустимо присваивать одной записи другую, если они принадлежат одному типу:
var temp : carT;
temp := car;
В этом случае все поля переменной temp примут значения соответствующих полей записи car.


Т.к. массив представляет собой совокупность однотипных элементов, то возможно определение массива записей.
var park : array[1..100] of cart;

i-ый элемент массива есть park[i], который по типу есть carT. А это значит, что обращение к нему должно происходить через составные имена.


var park : array[1..100] of cart;
i, n : integer;
ch : char;
begin
read (n);
for i := 1 to n do
begin
readln (park[i].mark);
readln (park[i].nomer);
readln (park[i].fio);
readln (park[i].dl);
write ('растаможена ли машина? Y/N ?');
read (ch);
if ch = 'y' then park[i].custom := true else park[i].custom := false
end;
end.


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

var park : array[1..100] of cart;
i, n : integer;
ch : char;
begin
read (n);
for i := 1 to n do
begin
with park[i] do
begin
readln (mark);
readln (nomer);
readln (fio);
readln (dl);
write ('растаможена ли машина? Y/N ?');
read (ch);
if ch='y' then custom := true else custom := false;
end;
end.
Адрес: 614039, г. Пермь, ул. Комсомольский проспект, 45
Телефон: +7 (342) 212-80-71
E-Mail: school9-perm@ya.ru
Вопрос администратору сайта