Записи с вариантами
type anketa=record fam:string[25]; gr:integer end;
Пусть нужно создать каталог для библиотеки. Если бы в каталоге хранилась информация только о книгах, то const max=100; (число
Но в библиотеке могут храниться не только книги, но и журналы, газеты. Если бы существовали только записи с фиксированными
type sel=(book, magazine); info=record nazv:string [30]; фиксированная часть godizd: integer; вариативная часть case tag: sel
В примере в описании имеется общая фиксированная часть списка полей: nazv, godizd и вариантная часть, содержащая 2 варианта
Вариантная часть записи может содержать, в свою очередь, тоже вариантную часть, вложенную в нее. В описании записи может
type sel=(book, magazine); info=record nazv:string [30]; godizd: integer; case tag: sel of book: (avtor: string[25]); magazine:
type sel=(book, magazine); info=record nazv:string [30]; godizd: integer; case tag: sel of book: (avtor: string[25]); magazine:
57.61K
Category: programmingprogramming

5_записи с вариантами

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

1

2. type anketa=record fam:string[25]; gr:integer end;

2

3. Пусть нужно создать каталог для библиотеки. Если бы в каталоге хранилась информация только о книгах, то const max=100; (число

книг)
type
info=record
avtor, nazv: string;
godizd: integer;
end;
var
spbook: array [1..max] of info;
Имея такое описание, мы можем внести в каталог
запись о любой книге.
3

4. Но в библиотеке могут храниться не только книги, но и журналы, газеты. Если бы существовали только записи с фиксированными

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

5. type sel=(book, magazine); info=record nazv:string [30]; фиксированная часть godizd: integer; вариативная часть case tag: sel

of
book: (avtor: string[25]);
magazine: (nomer: integer);
end;
arr=array [1..100] of info;
var
sp: arr;
5

6. В примере в описании имеется общая фиксированная часть списка полей: nazv, godizd и вариантная часть, содержащая 2 варианта

полей, каждый из которых имеет
свою константу выбора (book и magazine). За ней следует :
и список полей в круглых скобках.
В записи может быть только одна вариантная часть и если
она есть, то она должна располагаться за фиксированной
частью.
Слово case of – ключевое слово (а не оператор выбора), хотя
пишется одинаково.
Отличия оператора выбора от ключевого слова:
1. Вариантная часть записи – описательная часть, она
находится в разделе описания, а оператор выбора –
находится в разделе исполняемых операторов (он
выполняет конкретные действия).
2. После описания вариантной части записи нет слова END
(есть end относящийся к record, но не к case).
6

7. Вариантная часть записи может содержать, в свою очередь, тоже вариантную часть, вложенную в нее. В описании записи может

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

8. type sel=(book, magazine); info=record nazv:string [30]; godizd: integer; case tag: sel of book: (avtor: string[25]); magazine:

(nomer: integer);
end;
arr=array [1..100] of info;
var
sp: arr;
begin
……
with sp [27] do begin
nazv:=’Сказки’;
godizd:=2000;
tag:=book;
avtor:=’Пушкин’;
end;
8

9. type sel=(book, magazine); info=record nazv:string [30]; godizd: integer; case tag: sel of book: (avtor: string[25]); magazine:

(nomer: integer);
end;
arr=array [1..100] of info;
var
sp: arr;
begin
……
if sp[i].tag=book then
sp[i]. avtor:=edit1.text
else sp[i].nomer:=strtoint(edit2.text);
9
English     Русский Rules