Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
самост1_1new_druk!!!.doc
Скачиваний:
22
Добавлен:
13.11.2019
Размер:
1.61 Mб
Скачать

Тема: Опис стандартних типів.

Порядкові типи.

Порядкові типи є підмножиною простих типів. Всі прості типи, відмінні від дійсних типів, є порядковими. Турбо-Паскаль має десять вбудованих порядкових типів: integer (ціле), shortint (коротке ціле), longint (довге ціле), bуtе (довжиною в байт), word (довжиною в слово), boolean (логічний), Bytebool, Wordbool, Longbool і char (символьний). Крім того, є два інших класи порядкових типів, що визначаються користувачем: перелічувані типи і діапазонні типи.

Для всіх порядкових типів характерні наступні спільні властивості. Всі можливі значення порядкового типу утворюють впорядковану зліченну множину. Кожному можливому значенню ставиться у відповідність порядковий номер, який є цілим числом. За винятком значень цілих типів, перше значення будь-якого порядкового типу має порядковий номер 0, наступне значення має порядковий номер 1 і так далі для кожного значення в цьому порядковому типі. Порядковим номером значення цілого типу є саме це значення. Тобто між можливими значеннями будь-якого порядкового типу і деякою підмножиною дійсних чисел існує взаємно-однозначна відповідність. У будь-якому порядковому типі кожному значенню, крім першого, передує інше значення, і після кожного значення, крім останнього, слідує інше значення відповідно до впорядкованості типу. До даних всіх порядкових типів можна застосовувати функції ORD, PRED і SUCС.

Перелічувані типи.

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

Опис перелічуваного типу складається зі списку імен елементів цього типу, поміщеного в круглі дужки. Кожний з ідентифікаторів виконує роль константи даного типу. Послідовність ідентифікаторів у списку істотна.

Синтаксис:

<Назва перелічуваного типу > = (список ідентифікаторів)

Приклад.

type Day = (Ponedilok, Vivtorok, Sereda, Subota, Nedila);

Zaklad = (Kafe, Restoran, Ваг, Кlub);

Соlіr = (Red, Green, Вlue):

Дані типу Day ідентифікуються символічними назвами днів тижня. Дані типу Zaklad ідентифікуються символічними назвами Kafe, R.estoran, Ваг, Кlub. Дані типу Colir ідентифікуються символічними назвами Red, Green і Blue.

В області дії опису перелічуваного типу заборонене використання іншого опису перелічувапого типу з константами, що уже раніше використовувались.

Приклад

type Day = (Роnеdіlоk, Vivtorok, Sereda, Subota, Nedila);

WeekEnd = (Subota, Nedila);

Наведений описів типів неприпустимий, тому що перетин списків констант типів Dау і WeekEnd не порожній, що призводить до неоднозначності.

Кожному елементу зі списку ідентифікаторів елементів в описі цього типу можна поставити у відповідність невід'ємне число, що визначає місце елемента в списку ідентифікаторів перелічуваного типу. Першому елементу у списку ставиться у відповідність число 0, другому - 1 і так далі. Наприклад, для опису

type Direction = (North, South, East, West)

імені North ставиться у відповідність число 0, імені. South число 1, імені East число 2, імені West число 3. Порядковий номер елемента в списку можна визначити за допомогою функції ord. Параметром функції є вираз, що повертає значення перелічуваного типу, а результатом буде невід’ємне ціле число, яке визначається номером позиції цього значення в описі перелічуваного типу, відраховуючи від 0. До даних перелічуваного типу можуть застосовуватися також функції pred і succ.

Приклад. В області дії визначеного типу boolean і явно описаного типу Zaklad

Zaklad = (Kafe, Restoran, Bar, Кlub);

справедливі такі співвідношення:

Вираз Результат

ord(false) 0

pred(true) false

ord(Кlub) 3

succ( Restoran) Bar

Інтервальнi типи.

Іншим класом порядкових типів є інтервальві типи. Інтервальний тип будується на основі іншого порядкового типу, який є для нього базовим. Інтервальний тип включає всі значення базового типу, що знаходяться в певному діапазоні, заданому при описі цього типу. Інтервальннй тип зберігає усі властивості базового типу.

Опис інтервальногo типу складається з константи, що подає нижнє обмеження типу, символу .. (дві крапки) і константи, що відповідає верхній межі інтервалу. Необхідно, щоб позначений інтервал не був порожнім.

Синтаксис інтервальних типів:

<Назва типу>= <Нижнє обмеження> .. < Bepхнє обмеження>

Константи < Нижнє обмеження> і < Верхнє обмеження> повинні належати до одного і того ж базового порядкового типу.

Приклад:

type Quadrant = 0 .. 90;

Upper = 'A' .. 'Z';

Logical = false .. true;

Соlіr = (Red,Blue,Green,Yellow,Orange);

МуСоlіr = Вluе .. Уellow;

Елементами даних типу Quadrant можуть бути цілі числа від 0 до 90 включно.

Елементами даних типу Upper є константи типу char в інтервалі від 'A' до 'Z'.

Елементами даних типу LogicaJ є константи false i true, обидва типу Bооlеаn.

Елементами даних типу МуСоlіr є константами Вluе, Green i Уellow перелічуваного типу Соlіr.

Стандартний тип byte є інтервальним цілим типом, йому відповідає неявний опис

type byte = 0 .. 255;

тобто його елементи утворюють діапазон від 0 до 255 у множині цілих чисел.

До даних інтервального типу можуть застосовуватися функції ord, pred і succ. Визначення результатів цих функцій відбувається в базовому типі.

Приклад. В області дії опису типу МуСоlіr

type Colir = (Red, Вluе, Green, Yellow, Orange);

МуСоlіr = Вluе .. Yellow;

справедливі такі співвідношення.:

Вираз Результат

ord(Blue) 1

succ(Yellow) Orange

pred(Yellow) Grecn

Використання перслічуваних i інтервальних типів покращує читабельність програм і спрощує їх відлагодження, тому що стає можливим автоматичне визначення правильності інтервалу значень даних. Використання даних зазначених типів дозволяє також заощаджувати пам'ять. Це пояснюється тим, що якщо кількість членів базового набору даних, пов'язаного з інтервальним типом, не перевищує 255, то значення елемента цього типу займає один байт пам'яті. Така ж економія досягається при використанні інтервальних типів із базовим цілим типом, якщо обидва обмеження інтервалу знаходяться в діапазоні 0 .. 255.

Перетворення типів.

Як було зазначено, даним кожного порядкового типу можна взаємно однозначно поставити у відповідність деякий діапазон цілих чисел. Цю відповідність реалізує функція Ord, яка для кожного елемента певного порядкового типу обчислює його порядковий номер у впорядкованій множині значень цього типу. Якщо цей діапазон, чи якийсь його піддіапазон є спільним для двох чи більше порядкових типів, то через цей діапазон існує взаємно однозначна відповідність між даними чи частиною даних одного порядкового типу і даними чи частиною даних іншого порядкового типу. У мові Турбо-Паскаль введено сімейство операторів, назви яких ідентичні назвам порядкових типів, що дозволяє здійснити перетворення даних між довільними порядковими типами.

Оператор перетворення типів має вигляд:

<Оператор>( <аргумент>),

де <Оператор> - це ідентнфікатор порядкового типу, а <аргумент> довільний вираз іншого порядкового типу. Результатом такої операції буде значення порядкового типу <Оператор>, порядковий номер якого співпадає з Ord(аргумент). Тобто, задовольняється співвідношення ord(аргумент) = ord( <Оператор>( <аргумент)).

Приклад. В області дії опису типу С

type С = (Zyma, Vеsnа, Lito, Оsіn);

справедливі такі співвідношення:

Вираз Результат

integer(Osin) 3

С(2) Lito

char(65) A

Integer('A') 65

boolean(Zyma) false

byte(true) 1

Питання для самоконтролю:

  1. Що таке порядкові типи?

  2. Які спільні властивості для всіх порядкових типів?

  3. Які функції можна застосовувати до порядкових типів?

  4. Що таке перелічувані типи?

  5. Який синтаксис опису перелічуваних типів?

  6. Що включає в себе інтервальний тип?

  7. Який загальний опис інтервальних типів?

  8. Для чого призначене перетворення типів?

  9. Який вигляд має оператор перетворення типів?