Записи с вариантами - Записи в Турбо Паскале

Записи, представленные выше, имеют строго определенную структуру. В не которых случаях это серьезно ограничивает возможности их применения. Поэтому в Pascal имеется возможность задать тип записи, содержащий произвольное число вариантов структуры. Такие записи называются записями с вариантами. Записи с вариантами обеспечивают средства объединения записей, которые похожи, но не идентичны по форме. Они состоят из фиксированной и вариантной частей.

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

Type

Rec = record

Case <поле признака>: <имя типа> of

<константа выбора1> : (поле.... :тип):

...

<константа выбораn > : (поле. . . . :тип)

End;

Компоненты каждого варианта (идентификаторы полей и их типы) заключаются в круглые скобки. У части case нет отдельного end, как этого следовало бы ожидать по аналогии с оператором case. Одно слово end заканчивает всю конструкцию записи с вариантами. Необходимо отметить, что количество полей каждого из вариантов не ограничено.

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

Пример:

Type

Rec = record

Number: byte;

Code: integer;

Case Flag: Boolean of

True : (Price1: integer);

False: (Price2: real);

End;

Var PRec: Rec;

Поля Number и Code расположены в фиксированной части записи, они доступны в программе в любой момент независимо от значения поля признака. Поле Price1 может использоваться только в том случае, если значение поля признака Flag равно True. Поле Price2 доступно в противоположном случае, т. е. если значение Flag равно False.

При использовании записей с вариантами необходимо придерживаться следующих правил:

    * все имена полей должны отличаться друг от друга, по крайней мере, одним символом, даже если они встречаются в разных вариантах; * запись может иметь только одну вариантную часть, причем она должна размещаться в конце записи; * если поле, соответствующее какой - либо метке, является пустым, то оно записывается следующим образом: : ().

Пример 2. Напишем программу, позволяющую вычислять площади различных геометрических фигур с применением одной функции.

Программа выглядит следующим образом:

Program SF;

Uses Crt;

Type TF=(rect, circle);

figure=record

case art : TF of

rect :(L1,L2:real);

circle:(R:real);

end;

Var x:figure;

P:string[6];

Pr:char;

Begin

ClrScr;

Repeat

Write('Введите вид фигуры (rect, circle) '); readln(p);

With x do begin

If p='rect' then art:=rect;

If p='circle' then art:=circle;

Case art of

Rect: begin

write('Введите длину прямоугольника= '); readln(L1);

write('Введите ширину прямоугольника= '); readln(L2);

writeln('Площадь равна=', L1*L2:8:3);

end;

Circle: begin

write('Введите радиус окружности= ');readln(R);

writeln('Площадь равна=', Pi*R*R:8:3);

end;

End; {case}

End;

Write('Продолжить расчет? (Y-Да, N - Нет) ');readln(pr);

Until pr='N';

Readln;

End.

Результат работы:

Введите вид фигуры (rect, circle) rect

Введите длину прямоугольника= 4

Введите ширину прямоугольника= 5

Площадь равна= 20.000

Продолжить расчет? (Y-Да, N - Нет) Y

Введите вид фигуры (rect, circle) circle

Введите радиус окружности= 6

Площадь равна= 113.097

Продолжить расчет? (Y-Да, N - Нет) N

Похожие статьи




Записи с вариантами - Записи в Турбо Паскале

Предыдущая | Следующая