Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Турбо Паскаль.doc
Скачиваний:
17
Добавлен:
22.03.2016
Размер:
307.71 Кб
Скачать

Переменная структура записи

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

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

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

  1. При определении комбинированного типа данных в нем может быть только одна вариантная часть, которая задается в конце записи (т.е. сначала идет общее описание с вариантами и в конце ставится end;).

  2. Имя переменной (в нашем примере trud) называют дискриминантом записи и находится в заголовке вариантной части. Ее значение определяется в зависимости от типа, который задается идентификатором, описанным в разделе типов отдельно (eiter). Причем, тип этот должен быть перечисляемым.

  3. Идентификаторы полей во всех вариантах должны быть различными и не совпадать ни с одним из идентификаторов фиксированной (постоянной) части.

  4. Для некоторых значений поля – дискриминанта вариант может отсутствовать. В этом случае после метки варианта стоит пустой список ().

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

Пример:

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

.

.

.

var

spisok: array [1…50]

begin

with spisok [5] do

begin

author:= ‘П. Гроного’;

title:= ‘Программирование на языке Паскаль’;

trud:= monogr;

town:= ‘Москва’;

publish:= ‘Мир’;

year:= 1990;

end;

end.

Пример:

Пусть необходимо выбрать из списка литературы данные о первом наименовании в этом списке и напечатать их:

.

.

.

var

spisok: array [1..50] of istochnic;

i: liter;

Begin

With spisok [1] do

Begin

Writeln (author);

Writeln (title);

Case I of

Monogr: Begin

Writeln (town);

Writeln (publish);

Writeln (year);

End;

Gurnal: Begin

Writeln (titleg);

Writeln (number);

Writeln (yearg);

End;

Tronf: Begin

Writeln (titlek);

Writeln (townk);

Writeln (yeark);

End;

End; {case}

End; {with}

End.