ПЕРЕЛІЧУВАЛЬНИЙ І ОБМЕЖЕННИЙ ТИП ДАНИХ.
![]() |
Зміст | Задачі | ![]() |
Раніше ми розглядали скалярні (прості) типи даних і середніх стандартні типи
(real, integer і т. д. ). Крім стандартних типів даних Паскаль підтримує
скалярні типи, визначені самим користувачем. До них відносяться перелічувальний
і обмежений типи даних.
Перелічувальний тип задається безпосередньо перерахуванням всіх значень, які
може приймати зміна даного типу. Окремі значення розділяються комами, а весь
список розміщують у круглих дужках.
Формат:
Type<ім’я типу>=(<значення1>,...
, <значення n>);
Var <ідентифікатор>:<ім’я
типу>;
Приклад.
Type Color= (Cyan,Red,Yellow,Green); Metall=(Fe,Co,Na,Cu,Zn); Var Cl:Color; M1, M2:Metall; Season:(Winter,Spring,Summer,Autumn);
У прикладі наведено два явно описаних перелічуваних типи користувача Color і Metall. Змінна C1 типу Color може приймати одне з чотирьох значень :Cyan, Red, Yellow, Green. Спроба присвоїти їй інше значення приведе до помилки. Так само змінним M1іM2 типу Metall можна присвоїти одне з п'яти означень: Fe, Co, Na, Cu і Zn. Третій тип перелічування неявний (немає імені) і задається перерахуванням значень в розділі Var. Season є змінною цього типу і може приймати означення Winter. String, Summer і Autumn. Таким способом можна задавати будь-який перелічувальний тип, але це не так зручно, як спочатку описати тип в розділі Type, а потім описати змінну цього типу в розділі Var. При визначенні типу слід пам'ятати , що дані перелічувального типу займають в пам’яті один байт , тому він не може містити більше 256 елементів.
Константи (значення) перелічувального типу впорядковані. Впорядкування здійснюється по номеру елемента в описані типу. Номеру елемента можна визначити за допомогою функції Ord. Наприклад , якщо розглянути тип Golor , то Ord (Green)=3 (нумерація починається з нуля ). Впорядкованість констант перелічувального типу дозволяє здійснювати над ними операції порівняння. Так, результатом порівняння Winter <Strinq буде True, оскільки Strinq має більший порядковий номер в описані типу, ніж Winter. Вирази і констант перелічувального типу допустимі для використання в операторі case. Для роботи з даними перелічувального типу використовують стандартні функції Pred і Succ.
Pred(S) - повертає значення , яке знаходиться перед S в списку значень типу. Тип результату співпадає з типом параметра. Якщо попереднього значення не існує , то виникає помилка.
Приклад. C1:=Pred(Green) Результат: C1=Yellow.
Succ(S) - Повертає значення, яке знаходиться після S в списку значень типу. Тип результату співпадає з типом параметра. Якщо наступне значення не існує то виникає помилка.
Приклад. Season: =Succ( Spring ) Результат: Season=Summer.
На відміну від даних інших типів Паскаль підтримує операцій вводу-виводу значень перелічувального типу. При необхідності потрібно самому організувати ввід-вивід таких даних. Стандартні типи даних byte, word, іnteger, longint, char i boolean визначені як перелічувальні. Булевий тип визначається автоматично так
Tyre boolean=(False, True);
Значення Fase та True можна розглядати як впорядковану множину, яка складається з двох елементів. При цьому визначені такі означення стандартних функцій:
Ord(False)=0;
Ord(True)=1
Succ(False)=True; Pred(True)=False;
Обмежений або (інтервальний) тип даних дозволяє задати дві константи, які визначають границі діапазону значень для даної змінної. Компілятор при кожній операції із змінною обмеженого типу перевіряє чи не виходить її значення за встановлений діапазон. Обидві константи повинні належати одному із стандартних типів, крім real. Значення першої константи повинно бути меншим значення другої.
Формат.
Туре <ім'я типу>=<константа1>..
<константа2>;
Var <ідентифікатор
,... >:<ім'я типу >;
Приклад.
Туре
Dni=1.. 31;
Var RobDni, BolnDni:Dni;
В цьому прикладі змінні RobDni і BolDni мають тип Dni і можуть приймати будь-які
цілочисельні значення з діапазону 1.. 31. Вихід за межі діапазону приводить
до помилки.
Можна визначити інтервальний тип і більш універсальним способом, завдавши границі
діапазону не значеннями констант, а їх іменами:
Const Min=1;
Max=31;
Туре
Dni=Min.. Max;
Var RobDni, BolnDni:Dni;
Допускається утворення обмежених типів із перелічуваних. Наприклад, з типу Week можна утворити тип.
Туре RobDni = Monday .. Friday;
Кожен раз, коли відомо, що значення деякої змінної лежать в межах деякого діапазону, слід використовувати обмежений тип. Це суттєво підвищує наочність програми, а крім того, дозволяє більш надійно контролювати помилкові виходи значень за межі заданого діапазону(як при компіляції, так і при виконанні програми)
![]() |
Зміст | Задачі | ![]() |