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

Inc(k); readln(npp);

writeln('ввод '); readln(f);

readln(npp); readln(i);

readln(f); readln(o);

readln(i); readln(nzk);

readln(o); readln(g);

readln(nzk); readln(m);

readln(g); readln(d);

readln(m); until d=99;

readln(d); writeln(k);

until d=99; readkey

writeln(k); end.

readkey

end.

3.5.Запись с вариантами.

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

В общем виде описание записи с вариантами выглядит так:

TYPE <идентификатор типа >= RECORD

<идентификатор поля 1>:<тип 1>;

<идентификатор поля 2>:<тип 2>;

. . .

CASE <селектор>:<тип селектора> OF

<метка варианта 1>:(<поле варианта 11>:<тип 11>

[;<поле варианта 12>:<тип 12>;<поле варианта 13>:<тип 13>;. . .]);

<метка варианта 2>:(<поле варианта 21>:<тип 21>

[;<поле варианта 22>:<тип 22>;<поле варианта 23>:<тип 23>;. . .]);

<метка варианта k>:(<поле варианта k1>:<тип k1>

[;<поле варианта k2>:<тип k2>;<поле варианта k3>:<тип k3>;. . .]);

. . .

<метка варианта m>:( )

END;

В этом описании вариантная часть записывается после постоянной части, к которой относятся поля 1, 2 . . . , и может быть только одна в записи. Метки варианта должны иметь такой же тип, как у селектора. Если какой-либо метке варианта не соответствуют поля, то записываются пустые круглые скобки, как у метки варианта m.

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

  • для студентов поля: номер группы и специальность;

  • для преподавателей: институт, кафедра, стаж работы;

  • для сотрудников дополнительных полей нет.

В виде графа структуру записей можно изобразить:

Z

TN FIO N

S P A

NG SP IN KAF ST

Описание соответствующей записи структуры:

type tz=record

tn:byte;

fio:string;

case n:char of

p’: ( in:byte; kaf:string; st:byte );

s’: ( ng:byte; sp:integer );

a’: ( )

end;

var Z:tz;