Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
типы данных.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
284.78 Кб
Скачать

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

При определении типа записи в нее можно включать вариантную часть. Это означает, что разные переменные, хотя они относятся к одному типу, могут иметь различные структуры.

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

Любая запись может иметь только одну вариантную часть, которая должна размещаться в конце записи (после фиксированной части). Однако, внутри какого-либо варианта, в свою очередь, может присутствовать другая вариантная часть, вложенная в первую.

При записи варианта (списков элементов) обязательно наличие круглых скобок, даже если в них ничего не заключается.

Структурная диаграмма для записи с вариантами

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

Type pol=(m,w);

people=record

fam:string[20];

godro:1900..2007;

case mw:pol of

m: ( voen: boolean; spec: string[15]);

w: ( merry: boolean; child: byte)

end;

var p1, p2: people;

Все имена элементов должны быть различными, даже если они встречаются в разных вариантах.

К элементам вариантной части можно обращаться так же, как к элементам фиксированной части записи.

P1.mw:=m; p1.voen:=true; p2.child:=2;

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

Данное обстоятельство учитывается и при подсчете объема памяти, отводимого под запись с вариантами. Статические поля учитываются обычным образом, а среди вариативной части отыскивается тот случай, где суммарный объем памяти для полей максимальный.

Type pol=(m,w);

people=record

fam:string[20]; {21}

godro:1900..2007; {2}

case mw:pol of {1}

m: ( voen: boolean; spec: string[15]); {1+16=17}

w: ( merry: boolean; child: byte) {1+1=2}

end;

21 + 2 + 1 + max(17, 2) = 41 (байт)

 

Рассмотрим пример работы с записями без вариантов.

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

program ex_zap;

type detal = record a: string[30]; kol, st: integer; end;

var a: array [0..99] of detal; n, i, max: integer;

begin

write('Количество деталей? ');

readln(n);

for i:=0 to n-1 do

With a[i] do

begin write('Информация об ', i, ' детали: ');

readln(a);

readln(kol);

readln(st);

end;

max := 0;

for i:= 1 to n-1 do

if a[max].kol*a[max].st < a[i].kol*a[i].st then max:=i;

writeln('Искомая деталь: ', a[max].a, ' стоимостью ', a[max].st, ' в количестве ', a[max].kol);

end.