Перелічуваний тип
Стандартні типи змінних, як відомо, мають значення, що є елементами з підмножини цілих, дійсних чисел, логічних значень (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.
Щодо процедур уведення і виведення, то, на жаль, вводити і виводити на зовнішні пристрої значення перелічуваних типів не дозволено.
Діапазонний тип
Часто в програмі трапляються змінні, для яких наперед відомо, з якого інтервалу вони можуть набувати значення. Наприклад, нехай d – поточна дата (число деякого місяця). Зрозуміло, що d може набувати цілочислового значення з інтервалу [1, 31], тобто її можна віднести до типу integer. Однак може статися, що в програмі цій змінній буде присвоєне значення, що виходить за межі заданого інтервалу. Щоб контролювати ситуацію й уникати таких помилок, у мові Паскаль введено діапазонний тип, що передбачає визначення діапазону значень іншого попередньо заданого типу, який є базовим. Базовими можуть бути типи цілий, символьний і перелічуваний, однак не дійсний. Загальний вигляд описання діапазону такий:
<стала>..<стала>
Наведемо приклади:
type
index=1..20 {діапазон типу integer}
letter='a'..'z' {діапазон типу char}
тоді змінні опишемо так:
var
і, j: index;
sym: letter;
Як і для перелічуваного типу, опис змінних можна сумістити з описом типу:
var
i,j: 1..20;
sym: 'a'..'z';
Однак ліпше їх розділяти.
Усі операції, які виконують зі змінними базового типу, можна застосовувати до відповідного діапазону:
j+i*2
rd<dn
pred(sym)<>'d'
Функції базового типу можна виконувати з діапазоном. Значення функції необов'язково належатиме до діапазону. Наприклад: sqr(i) не можуть належати до діапазону index (якщо, звичайно, це значення не присвоєно змінній типу index, наприклад j).
Застосування діапазонного типу дає змогу поліпшити наочність програми, а також передає інформацію компіляторові для перевірки правильності програми, тобто перевірки діапазону значень змінних.
- Інформація та інформаційні процеси Поняття інформації.
- Одиниці вимірювання інформації.
- Подання інформації та типи комп'ютерів.
- Способи пересилання інформації.
- Будова комп'ютера
- Пристрої введення-виведення інформації.
- Процесор
- Принципи функціонування комп'ютера Фізичні принципи
- Програмний принцип
- Поняття про середовища програмування
- Загальна характеристика мови паскаль
- Поняття інтегрованого середовища
- Команда New
- Команда Open
- Основи алгоритмізації Алгоритми та їх властивості
- Блок-схеми
- Загальна характеристика Паскаль-програми
- Структура Паскаль-програми
- Елементи мови Паскаль
- Прості типи даних
- Стандартні типи даних
- Дійсний тип
- Логічний тип
- Символьний тип
- Конструйовані типи
- Перелічуваний тип
- Оператори надання значень змінним Оператор присвоєння
- Уведення-виведення
- Порядок виконання операцій
- Складений оператор
- Стиль запису програми
- Структури керування
- Структура послідовного виконання
- Структура розгалуження
- Умовний оператор
- Оператор варіанта
- Оператор безумовного переходу
- Структура повторення
- Цикл з параметром
- Цикл з передумовою
- Цикл з післяумовою
- Ітераційні цикли
- Обчислення суми знакозмінного ряду із заданою точністю
- Процедури і функції
- Процедури з параметрами. Параметри-значення
- Одномірні масиви
- Поняття масиву. Одномірний масив та його опис в програмі
- Обчислення скалярного добутку двох векторів
- Знаходження найбільшого (найменшого) значень серед елементів масиву
- Обчислення суми та добутку елементів масиву
- Перетворення масиву по заданому закону
- Впорядкування одномірних масивів
- Впорядкування шляхом вибору
- Впорядкування обмінами
- Впорядкування вставками
- Зливання впорядкованих масивів
- Двомірні масиви Поняття двомірного масиву та його опис у програмі
- Ввід та вивід значень елементів двомірного масиву Ввід значень елементів двомірного масиву
- Вивід значень елементів двомірного масиву a[m,n]
- Рядковий тип (string)
- Комбіновані типи Організація комбінованих типів у Паскалі
- Оператор приєднання
- Множинні типи Організація множин
- Файлові типи Організація файлів
- Підготовчі та завершальні операції
- Операції уведення-виведення
- Стандартні файли input і output
- Модулі Модуль і його структура
- Стандартні модулі
- Наближене знаходження коренів рівнянь Дослідження рівняння. Відокремлення коренів
- Метод поділу проміжку пополам
- Метод хорд
- Метод дотичних
- Чисельне інтегрування
- Квадратурні формули прямокутників
- Загальні формули прямокутників
- Квадратурна формула трапецій
- Практичні оцінки точності квадратурних формул. Вибір кроку інтегрування
- Список літератури