Самостійне вивчення Ієрархічні записи Досі ми розглядали записи, у яких значення окремих полів були величинами простих типів або рядками. Проте в мові Паскаль значення поля може бути довільного типу, в тому числі записом. Наведемо приклад такого використання записів. Нехай треба зберігати анкетні дані за конкретною схемою (рис. 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> не можуть збігатися.