- •Методичні вказівки до виконання лабораторних робіт з дисциплін:
- •Введення
- •1. Лабораторна робота №1 Керівні структури мови Pascal
- •1.1 Стислі теоретичні відомості
- •1.2 Завдання до роботи
- •2 Лабораторна робота №2
- •2.2 Завдання до роботи
- •3 Лабораторна робота №3 Рядки у мові Pascal
- •3.1 Стислі теоретичні відомості
- •If ch in [‘a’..’z’] then . . .
- •I,j:Word;
- •3.2 Завдання до роботи
- •4 Лабораторна робота №4 Записи у мові Pascal
- •4.1 Стислі теоретичні відомості
- •Ves, Rost : Real;
- •XyRec:Record
- •X,y:Integer;
- •X,y:Integer;
- •4.2 Завдання до роботи
- •5 Лабораторна робота №5 Файли у мові Pascal
- •5.1 Стислі теоретичні відомості
- •BlockWrite(Var f:File;Var Source;Count:Word[;Var WriteOut:Word])
- •5.2 Завдання до роботи
- •6. Порядок виконання і захисту робіт
- •Перелік посилань
- •322618, Г.Дніпродзержинськ, вул.Дніпробудівська, 2.
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