- •Программирование на Турбо Паскале
- •Вещественный тип данных
- •Символы и строки.
- •Операции и их приоритет
- •Процедура ввода
- •Процедура вывода
- •Оператор варианта
- •Процедуры и функции
- •Массивы
- •Упакованные массивы
- •Множества
- •Файловые типы данных
- •Операции ввода-вывода
- •Перемещения по файлу
- •Специальные операции
- •Работа с текстовыми файлами
- •Комбинированный тип данных
- •Оператор with
- •Переменная структура записи
Переменная структура записи
Очень часто в пределах одной записи требуется различная информация в зависимости от конкретного значения поля.
Например: при описании данных о гражданине для мужчины необходимо включать данные о том служил, ли он в армии, находится на воинском учете или снят с него; данные о том, курит ли он. Для женщин эти сведения не нужны.
Варианты могут содержать различное количество и типы полей. Необходимо отметить, что:
-
При определении комбинированного типа данных в нем может быть только одна вариантная часть, которая задается в конце записи (т.е. сначала идет общее описание с вариантами и в конце ставится end;).
-
Имя переменной (в нашем примере trud) называют дискриминантом записи и находится в заголовке вариантной части. Ее значение определяется в зависимости от типа, который задается идентификатором, описанным в разделе типов отдельно (eiter). Причем, тип этот должен быть перечисляемым.
-
Идентификаторы полей во всех вариантах должны быть различными и не совпадать ни с одним из идентификаторов фиксированной (постоянной) части.
-
Для некоторых значений поля – дискриминанта вариант может отсутствовать. В этом случае после метки варианта стоит пустой список ().
При использовании записей с вариантами необходимо помнить, что для размещения переменной комбинированного типа всегда отводится фиксированный объем памяти. Причем, для записи с вариантами этот объем определяется по самому большому варианту. Т.о. различные варианты одной записи занимают одну и туже область памяти, как бы «накладываются» друг на друга. Это нужно учитывать при составлении программы.
Пример:
Пусть имеется список литературы, состоящий из 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.