оператор 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. Як прийнято задавати значення варіативних полів?