Самостійне вивчення
Перелічуваний тип
Стандартні типи змінних, як відомо, мають значення, що є елементами з підмножини цілих, дійсних чисел, логічних значень (true або false) або множини символів обчислювальної системи (наприклад ASCII). Проте часто доводиться стикатися з поняттями, які можуть набувати специфічних значень, що не є елементами названих підмножин. Наприклад, поняття місяць (року) об'єднує часткові випадки з іменами "січень", "лютий", "березень",..., "грудень"; день тижня - це Пн, Вт, Ср,...,Сб, Нд. Для кожного з цих понять часткові випадки можна закодувати, наприклад, дні тижня - від 1 до 7, місяці року - від 1 до 12 тощо. Однак працювати з такими кодами незручно, оскільки треба постійно пам'ятати їхню відповідність конкретному поняттю. Наприклад, вираз b=9 не дає змоги зрозуміти, що порівнюється: ціле число, чи код місяця в році. Якщо це код місяця, то значно зручніше було б записати умову
b=september
Для того, щоб такий і подібні записи можна було використовувати, у Паскалі введено новий тип - перелічуваний. Це впорядкований набір ідентифікаторів, заданий шляхом їх перелічення. Тобто для визначення перелічуваного типу задають список значень, яких можуть набувати змінні цього типу. Загальний вигляд задання перелічуваного типу такий:
type <ім'я типу>=(<перелік можливих значень>) Наприклад, задано тип:
type
odynycia=(dujm, fut, metr, myla);
var
masstab:odynycia.
Таким чином змінній masstab приписують тип odynycia, тобто ця змінна може мати одне із значень dujm, fut, metr, mylia. Обидва описи можна об'єднати в один, описавши тип під час опису змінних:
var
masstab: (metr, fut, dujm, mylia).
Однак у цьому разі цей же тип не можна надати ще якійсь одній або групі змінних. Тому визначення типу ліпше відділяти від опису змінної. Крім того, в деяких випадках треба зазначати тільки ім'я типу, а не його задання. А тут не буде імені типу.
Імена, перелічені в дужках, називають сталими іменами. Ще один приклад описання типів такий:
type
color=(black, white, red, orange, green, blue);
var x, y, z: color.
Значення змінної не може належати більш ніж до одного типу. Наприклад, запис
type
robden=(pn, vt, sr, ct, pt, sb);
vychden=(sb, nd);
є неправильним.
Категорично заборонено різним іменам типів надавати однакові описи.
Зазначимо, що булів тип є фактично стандартним перелічуваним типом, його можна описати так:
type
boolean=(false, true);
Єдина операція, яку можна виконувати над змінними перелічуваного типу, - порівняння. Результат одержують булів. Зрозуміло, що обидві компоненти порівняння мають однаковий тип. Упорядкованість у перелічуваних типах визначена послідовністю, в якій значення перелічені під час визначення типу. Запишемо умовно
type
T=(W1,W2.....,Wn);
тоді Wi<>Wj, якщо i<>j - ознака відмінності, Wi<Wj, якщо i<j, -ознака впорядкованості.
Для визначених типів вираз white<black буде false; true>false - true;
Упорядкованість змінних перелічуваного типу дає змогу виконувати з ними функції pred і succ:
succ(blue)=white.
Перший елемент списку не має попереднього, а останній
- наступного значення, тобто pred(red) і succ(green) є невизначені.
Функція ord теж має аргументом змінну перелічуваного типу і видає ціле число, що є порядковим номером значення змінної у списку визначення. Причому перше значення у цьому списку має порядковий номер нуль, друге - 1 і т.д. Тобто
ord(pn)=0; ord(sr)=2; ord(black)=1.
Щодо процедур уведення і виведення, то, на жаль, вводити і виводити на зовнішні пристрої значення перелічуваних типів не дозволено.