Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

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

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

Синтаксис записи с вариантами может быть представлен так:

Туре

<имя - записи >= record

<имя - компонента> : <тип>;

<имя - компонента> : <тип>;

<имя - компонента> : <тип>;

Case <переменная> : <тип> of

С1: (<имя - компонента> : <тип>; ...);

С2: (<имя - компонента> : <тип>; ...);

СМ: (<имя - компонента> : <тип>;...)

end {записи};

Запись с вариантами содержит общую часть и вариантную часть, на­чинающуюся от зарезервированного слова case. После case стоит конст­рукция <переменная> : <тип>, которая носит название селектора записи. Последний принимает значения Cl, C2, ..., СМ, которые называются константами выбора и определяют, какая составляющая вариантной части будет активизирована при обработке. Констант выбора может быть несколько. Они разделяются запятыми, представляют собой объекты пе­речислимого типа и играют роль меток, но не являются ими.

Обращение к компоненту записи осуществляется по составному име­ни, как и в случае записи без вариантов.

Общая часть может отсутствовать, но обязательно, если она есть, должна предшествовать вариантной части. Имена компонентов в данной записи не должны повторяться. Напомним, что запись можно передавать в качестве параметра процедуре или функции, но значением функции за­пись быть не может. Записи с вариантами могут быть вложенными. При обработке полей записи с вариантами можно использовать оператор with.

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

Эта запись имеет вид:

Туре

Coordinats = record

Absciss, Ordinat: real;

end;

Form = (Point, Line, Circle);

Figure = record

Name: string[10];

case Flag: Form of

Point: (Pologenie: Coordinats);

Line: (Coefficient, Sdvig: real);

Circle: (Centre: Coordinats; Radius: real)

end {Figure};

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

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

Пример 9.4 Пусть, например, имеются некоторые данные о заводах города, све­денные в следующий документ:

Завод

Основные сведения

При­меча-

ние

Занимаемая

площадь

Объем выпускаемой продукции

Количество обслуживающего персонала

по плану

факти­чески

с высшим образованием

со средним образованием

АЗЛК ВАЗ ЗИЛ ИЖ

800

396

203

544

484,9 348,5 384,3 667,3

484,9 348,7 399,4 701,3

282

130

448

396

204

669

125

157

Всего

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

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

Summary - массив записей; plant - строка записи; name - наименование завода; information - основные сведения, area - площадь завода; production - объем продукции; plan - по плану; fact - фактически; person - обслуживающий персонал; superior - с высшим образованием; second - со средним образованием; note - примечание; Nmax - максимальное число записей; n - вводимое число записей; i - номер текущей записи; к - параметр цикла; s1, s2, s3, s4, s5 - суммы колонок.

Program Example;

Const

Nmax= 10;

Type

plant = record

name: string[5];