оператор with
Тут поля IM, POL відносяться до змінної Y типу SOTR, так як ця змінна в списку змінних-записів заголовка WITH фігурує після змінної X типу STUD. Крім того, в цьому фрагменті ім'я STIP в тілі оператора WITH є ім'я поля змінної Х.
Записи з варіантами
Записи, описані раніше, - це записи з фіксованими частинами. Вони мають в різних ситуаціях строго певну структуру. Однак бувають ситуації, коли потрібно відмовитися від цієї суворої визначеності. Тому з'являються записи з варіантами.
type ENTRY = record
AUTOR, TITLE, PUBLISHER, SITY. STRING [100];
var REFLIST. array [1..MAXNOMBRE] of ENTRY;
Тут ENTRY - вхід, тобто дані про будь-якої наукової роботи. Якщо ж деякі роботи входять в журнали, то потрібно створювати новий масив даних тільки для журналів і працювати з цими двома масивами, що не дуже зручно. У Паскалі є можливість утворити структуру з варіантами, кожен вхід якої відповідає змісту запису. Це досягається шляхом введення в опис запису спеціального оператора CASE - перемикача, який в чомусь схожий на раніше введений, але має свої синтаксичні та семантичні відмінності.
У нашому прикладі крім описаного вже типу ENTRY вводимо ще один змінний тип:
ENTRYTYPE = (BOOK, MAGAZINE).
Тепер можна скорегувати ранню запис:
type ENTRY = record
AUTOR, TITLE. string [100];
case TAG. ENTRYTYPE of
BOOK. (PUBLISHER, SITY. STRING [100]);
MAGAZINE. (MAGNAME. STRING; VOLUME, ISSUE. Integer)
Це опис ділиться на дві частини: фіксовану і вариантную. Поля AUTOR, TITLE і YEAR - фіксована частина. Інша частина - варіантна, структура якої може змінюватися в межах двох варіантів. Варіантна частина запису починається з рядка CASE, де в якості селектора виступає не вираження, а ідентифікатор деякого перечислимого типу. Елементи (компоненти) цього перечислимого типу (в нашому випадку ENTRYTYPE) використовуються в якості альтернативного визначення записи: BOOK і MAGAZINE. У кожній альтернативі є свій набір полів:
Для того щоб розрізняти, яку з гілок потрібно вибрати для роботи, в такий запис вводиться так зване поле тега (tag fild), або вузлове поле. Це додаткове поле з ім'ям TAG має тип ENTRYTYPE і поміщається в якості селектора в оператор CASE-OF:
AUT, TIT. string [100];
case TAG. ENTRYTYPE of
BOOK. (PUB, CYTY. String [100]);
MAGAZINE. (MAGNAME. String [100]; VOL, ISSU. Integer);
П р и м і р. Процедура друку значень записів типу ENTRY.
procedure PRINTREF (CITATION. ENTRY);
with CITATION do begin
writeln (AUTOR); writeln (TITLE); writeln (YEAR);
if TAG = BOOK then
begin writeln (MAGNAME);
1. Варіантна частина може містити довільне число аргументів, які задіюються або перелічуваних типами, або довільними порядковими типами (інтервалами).
2. Будь-який запис має тільки одну вариантную частина, яка повинна завжди розташовуватися в кінці опису, тому END оператора CASE збігається з END всього опису.
3. Ім'я поля не може зустрічатися в двох варіантах одного запису.
4. У варіантної частини можуть зустрічатися інші нові варіантні частини.
1. Як називаються елементи, що входять до запису?
2. Чому тип RECORD називають комбінованим типом даних?
3. Чому два записи в одній програмі можуть мати поля з однаковими іменами?
type DATE = record
AUG, SEP, OCT, NOV, DEC);
var BD: ARRAY [1..10] of DATE, HB: DATE.
Що означають BD [3] .DAY, BD [5] .YEAR, HB.MONTH?
5. Яке призначення оператора WITH?
6. Чи можуть поля записи бути, в свою чергу, записами?
7. За допомогою якого оператора утворюються записи з варіантами?
8. Скільки варіативних полів може мати запис з варіантами?
9. Як прийнято задавати значення варіативних полів?