Similar presentations:
5_записи с вариантами
1. Записи с вариантами
12. type anketa=record fam:string[25]; gr:integer end;
23. Пусть нужно создать каталог для библиотеки. Если бы в каталоге хранилась информация только о книгах, то 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
ofbook: (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
programming