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

3.5 Вариантные записи

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

Структура вариантной части записи не постоянна: она изменяется в зависимости от значения особого поля, называемого полем признака. Фиксированная (общая) часть структуры записи должна предшествовать вариантной части.

Вариантная часть имеет вид:

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

<конст1 или список конст1>: (<список полей1>: <тип поля>);

<конст2 или список конст2>: (<список полей2>: <тип поля>);

. . . . . . . . . . . . . . .

<констN или список констN>: (<список полейN>: <тип поля>);

Замечание. Вариантная часть не завершается словом end. Служебное слово end завершает всю запись и одновременно ее вариантную часть.

Значение селектора, указывающее на тот или иной вариант, записывается перед использованием записи. В зависимости от значения поля признака вариантная часть записи будет иметь различные поля.

Пример 3. Требуется вычислить площади различных геометрических фигур: квадрата, прямоугольника, треугольника, окружности. Квадрат задается длиной стороны, прямоугольник - длинами смежных сторон, треугольник - длинами двух сторон и углом между ними (угол задается в градусах), окружность - радиусом.

program GEOM_FIGURA;

type

figura = (kv, pr, tr, okr);

gm_figura = record

pl: real;

case geomf: figura of

kv: (a: real);

pr: (da, db: real);

tr: (dl1, dl2, alfa: real);

okr: (r: real)

end;

var

gr: gm_figura;

n: 1..4;

begin

Writeln ('Введите тип фигуры:');

Writeln ('1-квадрат, 2-прямоугольник, 3-треугольник, 4-окружность');

Readln(n);

with gr do

begin

case n of

1: geomf:=kv;

2: geomf:=pr;

3: geomf:=tr;

4: geomf:=okr

end;

case geomf of

kv: begin Write('Введите сторону квадрата - ');

Readln(a); pl:=sqr(a)

end;

pr: begin Write('Введите стороны прямоугольника - ');

Readln(da, db); pl:=da*db

end;

tr: begin Write('Введите стороны тр-ка и угол - ');

Readln(dl1, dl2, alfa);

alfa:=alfa*PI/180; pl:=dl1*dl2*sin(alfa)/2

end;

okr: begin Write('Введите радиус окружности - ');

Readln(r); pl:=PI*sqr(r)

end

end;

Writeln('Площадь фигуры равна ', pl:5:2)

end

end.

Вариантная запись может быть вложена в другую, тоже вариантную запись.

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