Самостійне вивчення
Ієрархічні записи
Досі ми розглядали записи, у яких значення окремих полів були величинами простих типів або рядками. Проте в мові Паскаль значення поля може бути довільного типу, в тому числі записом. Наведемо приклад такого використання записів. Нехай треба зберігати анкетні дані за конкретною схемою (рис. 1):
Анкета

Номер
за пор.
Прізвище
Ім’я
По батькові
Дата народження
Стать





Рік
Місяць
День



Рис. 1. Ієрархічна структура даних.
Опис відповідного типу буде такий:
type
Anketa=record
Nomer: integer;
РІВ: record
Pr, Im, Bat: string[15];
end;
Data: record
Rik: 1900..2100;
Mis: string [8];
Den: 1..31;
end;
stat: string [3]
end;
Опишемо змінну
var Dani: Anketa;
Змінна Dani містить відповідно записи РІВ і Data. Це ієрархічна структура запису, у якій одні записи підлягають іншим. Звертання до таких підлеглих типів містять імена відповідних записів, розділених крапкою, та ім'я поля.
Наприклад, занесення в поле Mis має вигляд
Dani. Data. Міs:='лютий' а у поле Рr - прізвища: Dani.РІb.Рr:='Юрків'
Використовуючи оператор приєднання, можна спростити звертання до полів записів так:
with Dani do
with Data do
Міs:='лютий'
чи
with Dani do
with РІВ do
Рr:='Юрків'
або
with Dani, Data do Мis:='лютий'
чи
with Dani,РІВ do Рr:='Юрків'
Якщо фрагмент програми містить операції над різними записами, то в операторі приєднання можна зазначити список потрібних імен змінних - записів, розділених комою:
with V1, V2, V3 do
Це еквівалентне записові
with V1 do with V2 do with V3 do
У цьому випадку треба мати на увазі таке: якщо деякий ідентифікатор F є полем, наприклад V1 і V2, то він буде інтерпретований як V2.F, а не як V1 .F. Тобто ідентифікатор поля пов'язують з останнім іменем запису в списку оператора with.
Треба пам'ятати, що всі ідентифікатори в межах дії оператора приєднання перевіряються, чи можна їх інтерпретувати як поля записів, зазначених у заголовку. Якщо так, то вони завжди будуть визначені саме так, навіть якщо є доступні звичайні змінні з такими самими ідентифікаторами.
Усі імена полів одного запису повинні бути різними, якщо вони є на одному рівні. Якщо ж одне ім'я визначене всередині області дії іншого імені або ці імена визначені в областях дії різних полів одного запису, то вони можуть бути однаковими. Очевидно, що різні записи можуть містити поля з однаковими іменами. Наприклад:
type
<ім'я_запису>=гесоd
<ім'я поля_1>: record
<ім'я_поля_1.1>: <тип>;
....................................
<ім'я_поля_1.n>: <тип>
end;
<ім'я_поля_2>: record
<ім'я_поля_2.1>: <тип>;
……………………….
<ім'я_поля_2.m>: <тип>
end;
<ім'я_поля_3>: <тип>
end;
Однаковими можуть бути <ім'я_поля_1> та <ім'я_поля_1.1> або <ім'я_поля_1.1> та <ім'я_поля_2.1>. Імена <ім'я_поля_1> та <ім'я_поля_2>, а також <ім'я_поля_1.1> та <ім'я_поля_1.2> не можуть збігатися.