Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка - Основи програмування і алгоритмічні мови.DOC
Скачиваний:
29
Добавлен:
02.05.2014
Размер:
512.11 Кб
Скачать

4 Лабораторна робота №4 Записи у мові Pascal

4.1 Стислі теоретичні відомості

Запис – структура різнотипових даних, аналогічно таблиці, в якої є ім’я і є ім’я у кожного її поля. Тип запис визначається конструкцією:

Record

Поле1:ТипПоля1;

Поле2:ТипПоля2;

ПолеN:ТипПоляN;

End;

Якщо декілька полів мають однаковий тип, то їх можна перелічити в одному блоці.

Можна, наприклад, ввести тип даних, аналогічний анкеті:

Type

Person=Record

F_I_O_ : String;

Ves, Rost : Real;

Telephone : LongInt;

End;

Тут пара Record…End конструює тип запис. Тип Person задає таблицю із рядка F_I_O, двох чисел з дробовою частиною Ves, Rost і одного цілого числа Telephone.

Після об’яви в програмі змінної типу запис до кожного її поля можна звернутися, вказав спочатку ідентифікатор змінної-запису, а потім, через крапку ім’я поля (вказівка тільки ідентіфікатора змінної-запису – вже комбінація двох значень).

Тобто якщо ввести в попередньому прикладі змінну Nekto типу Person, під ім’ям Nekto буде розумітися анкета-таблиця з конкретними значеннями, та доступ до полів таблиці буде вироблятись дописуванням до імені всієї таблиці імені потрібного поля:

Nekto.F_I_O – значення рядка з прізвищем, ім’ям та по батькові;

Nekto.Ves – значення поля Ves.

Порядок опису полів у визначенні запису відповідає порядку їх зберігання у пам’яті.

Поле запису може мати будь-який тип (масив, множина, інший запис і т. п.). Для доступу до елемента таких структур застосовується правило:

Змінна_СкладнийЗапис.ЙогоПоле_Запис.ПолеПоляЗапису

або

Змінна_З_полем_масивом.ПолеМасив[і]

Запис може мати варіантну частину, тобто в межах одного типу можна задавати декілька різних структур та безпосередній вибір однієї із них визначається контекстом або сигнальним значенням. Варіантні поля вказуються після полів фіксованих та оформлюються, наприклад, наступним чином:

Type

RecType= Record;

Number:Byte;

Case Massa:Char of

т’, ’Т’:(tonna : Word);

г’, ’Г’:(gram : LongInt)

?’ :(Comment1, Comment2 : String[16])

End;

Тут у запису є звичайне (фіксоване) поле Number і таке ж поле Massa (обрамоване словами Case і Of), яке виконує паралельно роль селектора (поле тега). За полем-селектором перераховуються варіанти третього поля, взятого у круглі дужки. Значення селектора повинно бути визначено до його використовування у запису (також, як і в операторі вибору Case).

В будь-який час доступні поля тільки одного з можливих варіантів, описаних у типу. Ці варіанти знаходяться при зберіганні в одному і тому ж місці пам’яті, розмір якого визначається самим об’ємним із варіантів. Наприклад, приведений вище запис типу RecType зберігається як 366 байт: 1 байт (Number) + 1 байт (Massa) + 2(16+1) байт (Comment1, Comment2).

Можна, ігноруючи поле-селектор, звертатися до будь-якого із полів варіантів, але оскільки значення для всіх варіантів одне, воно трактується по-різному, відповідно типу кожного поля.

Поле-селектор можна замінити ім’ям будь-якого перелічувального типу (в тому числі і введеного), тільки б він утримував елементів не менше, ніж варіантів запису. У випадку двох варіантів у Case можна вписувати тип Boolean зі значенням False і True.

Змінна типу запис може брати участь тільки в операціях привласнення. Поле запису може приймати участь у будь-яких операціях, які звертаються до його типу.

Для роботи з полями запису у мові введений оператор приєднання:

With Ім’яЗмінної_Запису Do Оператор;

Тепер у середині оператора (він може бути складним) звертання до полів запису проводжується без вказання ідентифікатора самої змінної, наприклад:

Var