Тип запись содержит установленное число элементов или полей,
которые могут быть различных типов. Описание типа запись указыва-
ет тип каждого поля и идентификатор, который именует поле.
┌────────┐ ┌─────┐
тип запись ───>│ record ├──┬────────────────>│ end ├──>
└────────┘ │ ┌────────┐ ^ └─────┘
└─>│ список ├─┘
│ полей │
└────────┘
список ┌────────────┐
полей┬─>│ фиксирован-├─┬────────────────────────────┬──────────>
│ │ ная часть │ │ ┌───┐ ┌────────────┐ ^ │ ┌───┐ ^
│ └────────────┘ └─>│ ; ├───>│ вариантная ├─┘ └─>│ ; ├─┘
│ └───┘ ^ │ часть │ └───┘
└──────────────────────────┘ └────────────┘
┌─────────────────┐ ┌───┐ ┌─────┐
фиксированная ────>│ список ├──>│ : ├───>│ тип ├──┬──>
часть ^ │ идентификаторов │ └───┘ └─────┘ │
│ └─────────────────┘ │
│ │
│ ┌───┐ │
└────────────┤ ; │<────────────────────────┘
└───┘
Фиксированная часть типа запись содержит список фиксирован-
ных полей вместе с идентификатором и типом для каждого поля. Каж-
дое поле содержит информацию, которая всегда отыскивается одним и
тем же способом.
Приведем пример типа запись:
record
year: integer; { год }
month: 1..12; { месяц }
day: 1..31; { число }
end
В вариантной части, изображенной на синтаксической диаграмме
описания типа запись, память распределяется более чем для одного
списка полей, поэтому доступ к информации может быть осуществлен
более чем одним способом. Каждый список полей является вариантом.
Варианты налагаются друг на друга в памяти, поэтому в любое время
возможен доступ ко всем полям во всех вариантах.
вариантная часть
│ ┌────┐ ┌────────┐ ┌──┐ ┌───────┐
└─>│case├─┬───────────────────>│тип поля├─>│of├────>│вариант├─┬>
└────┘ │ ^ │признака│ └──┘ ^ └───────┘ │
│ ┌───────┐ ┌───┐ │ └────────┘ │ ┌───┐ │
└>│иденти-├>│ : ├─┘ └────┤ ; │<───┘
│фикатор│ └───┘ └───┘
└───────┘
┌────────────────┐
тип поля ────>│ идентификатор ├────>
признака │порядкового типа│
└────────────────┘
┌─────────┐ ┌───┐ ┌───┐ ┌───┐
вариант ────>│константа├─┬─>│ : ├─>│ ( ├─┬─────────────>│ ) ├──>
^ └─────────┘ │ └───┘ └───┘ │ ^ └───┘
│ ┌───┐ │ │ │
└────┤ , │<────┘ │ ┌──────┐ │
└───┘ └─>│список├─┘
│полей │
└──────┘
Вы можете видеть на диаграмме, что каждый вариант идентифи-
цирован по крайней мере одной константой. Все константы должны
быть отличными друг от друга и иметь порядковый тип, совместимый
с типом поля признака. Доступ к вариантным и фиксированным полям
один и тот же.
В вариантной части можно указать необязательный идентифика-
тор - идентификатор признака поля. При наличии идентификатора
признака поля он становится идентификатором дополнительного фик-
сированного поля записи - поля признака. Программа может исполь-
зовать значение поля признака для указания, какой вариант являет-
ся активным в настоящий момент. Без указания поля признака
программа выбирает вариант по другому критерию.
Ниже приводятся несколько примеров типов запись:
record
firstName,lastName : string[40];
birthDate : Date;
case citizen : boolean of
True : (birthPlace: string[40]);
False : (country : string[20];
entryPort : string[20];
entryDate : Date;
exitDate : Date);
end
record
x,y : real;
case kind : Figure of
rectangle : (height,wigth: real); { прямоугольник }
triangle : (size1,side2,angle: real); { треугольник }
circle : (radius: real); { круг }
end