Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум10.doc
Скачиваний:
52
Добавлен:
14.02.2016
Размер:
296.96 Кб
Скачать

2.5. Записи с вариантами

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

type <имя_записи>=record

<имя_компонета>:<тип>;

<имя_компонета>:<тип>;

. . .

<имя_компонета>:<тип>;

case <переменная>:<тип> of

C1:(<имя_компонета>:<тип>; …);

C2:(<имя_компонета>:<тип>; …);

. . .

CM:(<имя_компонета>:<тип>; …)

end;

Запись с вариантами содержит общую часть и вариантную часть, начинающуюся от зарезервированного слова case. Послеcaseстоит конструкция <переменная>:<тип>, которая носит названиеселекторазаписи. Последний принимает значенияC1, C2, …, CM, которые называютсяконстантами выбораи определяют, какая составляющая вариантной части будет активизирована при обработке. Констант выбора может быть несколько. Они разделяются запятыми, представляют собой объекты перечислимого типа и играют роль меток, но не являются ими. Обращение к компоненту записи осуществляется по составному имени, как и в случае записи без вариантов.

Общая часть может отсутствовать, но обязательно, если она есть, должна предшествовать вариантной части. Имена компонентов в данной записи не должны повторяться. Следует помнить, что запись можно передавать в качестве параметра процедуре или функции, но значением функции запись быть не может. Записи с вариантами могут быть вложенными. При обработке полей записи с вариантами можно использовать оператор with.

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

type coordinates=record

absciss, ordinat:real

end;

from=(point, line, circle);

figure= record

name:string[10];

case flag: from of

point:(pologenie:coordinates);

line:(coefficient, sdvig:real);

circle:(centre:coordinates; radius:real)

end;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]