Руководство по языку B.Pascal 7

       

Типы запись


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

--------- ------ тип запись --->¦ record +--T---------------->¦ end +--> L--------- ¦ --------- ^ L------ L->¦ список +-- ¦ полей ¦ L---------

список ------------- полейT->¦ фиксирован-+-T----------------------------T----------> ¦ ¦ ная часть ¦ ¦ ---- ------------- ^ ¦ ---- ^ ¦ L------------- L->¦ ; +--->¦ вариантная +-- L->¦ ; +-- ¦ L---- ^ ¦ часть ¦ L---- L--------------------------- L-------------

------------------ ---- ------ фиксированная ---->¦ список +-->¦ : +--->¦ тип +--T--> часть ^ ¦ идентификаторов ¦ L---- L------ ¦ ¦ L------------------ ¦ ¦ ¦ ¦ ---- ¦ L------------+ ; ¦<------------------------- L----

Фиксированная часть типа запись содержит список фиксирован- ных полей вместе с идентификатором и типом для каждого поля. Каж- дое поле содержит информацию, которая всегда отыскивается одним и тем же способом.

Приведем пример типа запись:

record year: integer; { год } month: 1..12; { месяц } day: 1..31; { число } end

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

вариантная часть ¦ ----- --------- --- -------- L->¦case+-T------------------->¦тип поля+->¦of+---->¦вариант+-T> L----- ¦ ^ ¦признака¦ L--- ^ L-------- ¦ ¦ -------- ---- ¦ L--------- ¦ ---- ¦ L>¦иденти-+>¦ : +-- L----+ ; ¦<---- ¦фикатор¦ L---- L---- L--------

----------------- тип поля ---->¦ идентификатор +----> признака ¦порядкового типа¦ L-----------------

---------- ---- ---- ---- вариант ---->¦константа+-T->¦ : +->¦ ( +-T------------->¦ ) +--> ^ L---------- ¦ L---- L---- ¦ ^ L---- ¦ ---- ¦ ¦ ¦ L----+ , ¦<----- ¦ ------- ¦ L---- L->¦список+-- ¦полей ¦ L-------


Вы можете видеть на диаграмме, что каждый вариант идентифи- цирован по крайней мере одной константой. Все константы должны быть отличными друг от друга и иметь порядковый тип, совместимый с типом поля признака. Доступ к вариантным и фиксированным полям один и тот же.

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

Ниже приводятся несколько примеров типов запись:

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


Содержание раздела