Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

11.3. Записи з варіантами

Синтаксис комбінованого типу містить і варіантну частину, що припускає можливість визначення типу, який містить визначення декількох варіантів структури. Наприклад, запис у комп’ютерному каталозі бібліотеки може мати наступну структуру:

Фіксована частина

Прізвище Ім’я по батькові

{автора}

Назва

{книги}

Видавництво

{його атрибути}

Шифр

{бібліотеки}

Стан

(видана, у фонді, в архіві)

Варіантна частина

Значення признака

видана

у фонді

в архіві

Поля Варіантної

Части

Прізвище ім’я, по батькові

N% {чит.квитка}

Дата {видачі}

адрес {схову}

ім’я {архіву}

адрес {схову}

дата {архівації)

Синтаксис варіантної частини:

<варіантна частина >::= case <поле ознаки > <ім’я типа > of

< варіант >{;<варіант >}

< варіант >::=<список міток варіанта>:(<список полів>)|< пусто >

<список міток варіанта >::=<мітка варіанта >{;<мітка варіанта >}

<мітка варіанта >::=< константа >

<поле ознаки >::=<ім’я >:< пусто >

Відповідні синтаксичні діаграми:

Варіантна

ч астина

поле варіант

о знаки

Описання типу запису в розглянутому прикладі може мати вид:

Приклад 11.4

Book = record

Author : FullName; {фіксована частина}

BookName: String;

BookCode: Code;

Station : (Readed, inFile, inArchive);

case Station of {поле ознаки}

Readed: Reader : FullName; {варіантна частина}

ReadCode : Integer;

ReadDate : Date;

inFile: FilAdress : Adress;

inArc : ArcName : Srting;

ArcAdress: Adress

end

end;

У нашому прикладі на варіанти вказує поле Station. У залежності від значення цього поля запис має ту чи іншу структуру. Це часта ситуація. Звичайно на варіант запису вказує одне з полів фіксованої частини цього запису. Тому синтаксисом допускається скорочення: опис компоненти, що визначає варіант, (яка називається полем ознаки – дискримінантом), включається в заголовок варіанта. У нашому прикладі 11.4 це виглядає так:

Type BookStation = (Readed, inFile, inArc);

Book = record

Author : FullName;

BookName : String;

BookCode : Code;

case Station : BookStation of

Readed : Reader : FullName;

ReadCode : Integer;

ReadDate : Date;

inFile : FilAdress: Adress;

inArc : ArcName : String;

ArcAdress: Adress

end

end;

Всі імена полів повинні бути різними, навіть якщо вони зустрічаються в різних варіантах. (Наприклад, Author, Reader – імена людей, а FilAdress і ArcAdress – адреси, що вказують на місцезнаходження книги на полках сховища). У випадку, коли один з варіантів не містить варіантної частини, він повинен бути оформлений наступним чином:

EmptyVariant :( ) {EmptyVariant - мітка порожнього варіанта}