69744

Ієрархічні записи

Домашняя работа

Информатика, кибернетика и программирование

Досі ми розглядали записи, у яких значення окремих полів були величинами простих типів або рядками. Проте в мові Паскаль значення поля може бути довільного типу, в тому числі записом. Наведемо приклад такого використання записів.

Украинкский

2014-10-09

36.5 KB

1 чел.

Самостійне вивчення

Тема 6: Ієрархічні записи

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

Використовуючи оператор приєднання, можна спростити звертання до полів записів так:

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> не можуть збігатися.