Перерахований тип. Всі типи даних і найбільш часто використовувані Pascal тип

Тип, що перераховується, задається безпосередньо перерахуванням усіх значень, які може приймати змінна даного типу. Кожне значення є константою свого типу і може належати тільки одному з типів, що перераховуються, заданих у програмі. Перерахований тип описується в розділі опису типів, який починається зі службового слова type. Кожне значення називається деяким ідентифікатором і розташовується у списку, обрамленому круглими дужками, наприклад:

Type Colors = (red, white, blue); Days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

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

Змінні будь-якого типу можна оголошувати без попереднього опису цього типу, наприклад:

Var TextColor: (black, white, green);

Значення, що входять до перерахованого типу, є константами. Дії з них підпорядковуються правилам, застосовним до константів. Вони пронумеровані починаючи від 0 у порядку проходження в описі. До всіх типів, що перераховуються, застосовні операції відношення (якщо обидва операнда одного типу). Порядок встановлюється послідовністю перерахування констант.

Для аргументів, що належать до ординальних типів існують такі функції:

  • succ(X) – наступне за X
  • pred(X) – попереднє X
  • ord(X) – ординальний номер X

Допускається і зворотне перетворення: будь-який вираз типу WORD можна перетворити на значення типу, що перераховується, якщо тільки значення цілочисленного виразу не перевищує потужності типу, що перераховується. Таке перетворення досягається застосуванням автоматично оголошеної функції з ім'ям типу, що перераховується.

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

type nm = (word1, word2, …, wordN); var w: nm;

тут nm – ідентифікатор типу (довільний), word1, word2… - конкретні значення, які може набувати змінна w, що належить типу nm. Значення цього вважаються упорядкованими, тобто. опис типу одночасно вводить упорядкування word1< word2 < wordN. Порядковые значения отсчитываются с 0.

До змінних типу перерахування можна застосовувати функції ord, pred, succ та процедури inc та dec.

До всіх змінних одного і того ж скалярного типу застосовні операції відношення: =,<>, <=, >=, <, >.

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

Приклад 1. type color = (red, yellow, green, blue);
Тут визначено, що red< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

Функція succ(x)

За елементом x визначається та впорядкована послідовність, якій належить x, і видається елемент, що йде за x у цій послідовності.

Приклад 2. Нехай задано послідовність букв в алфавітному порядку. Тоді succ(A) є B; succ(L) є M і т.д.

Наприклад 1 succ(red) є yellow.

Функція pred(x)

По елементу x визначається послідовність, якій належить x, і видається попередній елемент цієї послідовності.

Приклад 3. pred(F) є E; pred(Z) є Y і т.д.

Функція ord(x)

Видається номер елемента x у послідовності.

Приклад 4. ord(red) дорівнює 0, а ord(green) дорівнює 2.


Алгоритм мови Pascal побудований таким чином, що для того, щоб оперувати зі змінними, потрібно зазвичай вказати їх тип. Причому опис типу кожної змінної необхідно виконувати до виконання програми (у розділі var). Тобто запуску компілятора програма спочатку отримує відомості, щодо того з якими типами даних буде працювати і тільки потім виконує якісь дії.
Отже в Паскалі 3 основних типи: простий, структурований та покажчик. Проте кожен тип має свої підтипи. Для зручності всі типи даних наведено у вигляді списку.

До кожного типу характерний свій діапазон значень. Нижче наведено діапазони значень для простоготипу

Найчастіше використовують типи integer,real,longint,byte,string,booleanі charоскільки зазвичай у завданнях не вказується які конкретно типи би мало бути використані на вирішення. Будьте уважні під час використання типів та уважно стежте за допустимими діапазонами для кожного типу. Наприклад дробовим числам не можна надавати тип integer ,а типом сhar може бути лише один символ (наприклад змінна f:=gfgfgf не може бути char)
Тепер про те, як описати тип. Як було зазначено вище операторам присвоюється тип на самому початку програми (можна навіть сказати що на початок програми). Отже описуються типи у розділі var, який перебуває на початок програми (тобто до begin). Розглянемо простий приклад
var x,u,yu,i:integer;
s, f: real;
g:string;
begin
....
end. Як видно з прикладу, шаблон опису типу виглядає так
оператор1,оператор 2: тип; Як ви вже помітили, немає необхідності описувати кожен оператор, якщо тип загальний, достатньо перерахувати їх через кому. Також немає необхідності після кожного типу переходити на новий рядок, тут це зроблено просто для зручнішого читання коду. Взагалі код має бути читабельним і добре сприймається, тому радиться оператори загального типу об'єднувати, а кожен тип писати з нового рядка.

Опис та використання

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

Type Cardsuit = (clubs, diamonds, hearts, spades);

Тут проводиться оголошення типу даних Cardsuit (карткова масть), значеннями якого може бути будь-яка з чотирьох перерахованих констант. Змінна типу Cardsuit може приймати одне із значень clubs, diamonds, hearts, spades , допускається порівняння значень типу перерахування на рівність чи нерівність, і навіть використання в операторах вибору (у Паскалі - case) як значень, ідентифікують варіанти.

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

На базі перерахувань в деяких мовах можуть створюватися типи-множини. У разі безліч розуміється (і описується) як невпорядкований набір унікальних значень типу-перечисления.

Тип, що перераховується, може використовуватися в оголошеннях змінних і формальних параметрів функцій (процедур, методів). Значення перерахованого типу можуть надаватися відповідним змінним і передаватися через параметри відповідних типів функції. Крім того, завжди підтримується порівняння значень перерахованого типу на рівність та нерівність. Деякі мови підтримують інші операції порівняння для значень перерахованих типів. Результат порівняння двох перелічуваних значень у випадках визначається, зазвичай, порядком прямування цих значень у оголошенні типів - значення, що у оголошенні типу зустрічається раніше, вважається «менше» значення, що зустрічається пізніше. Іноді перерахований тип або деякий діапазон значень перерахованого типу також може бути використаний як тип індексу для масиву. У цьому випадку для кожного значення вибраного діапазону масиві є один елемент, а реальний порядокпрямування елементів відповідає порядку прямування значень в оголошенні типу.

Реалізація

Зазвичай у процесі компіляції значення перерахувань представляються з допомогою цілих чисел. Залежно від конкретної мови програмування таке уявлення може бути повністю приховано від програміста, або доступне йому за допомогою тих чи інших «обхідних маневрів» (наприклад, примусового перетворення значення типу перерахування до значення типу «ціле число»), або навіть керуємо програмістом ( у таких випадках програміст має можливість явно вказати, якими числами кодуватимуться всі або деякі значення типу-перерахування). У всіх варіантів є свої позитивні та негативні сторони. З одного боку, можливість використання числових значень констант, що становлять тип-перерахування, особливо при зловживанні нею, позбавляє сенс використання цих типів і створює небезпеку появи помилок (коли використовуються числові значення, для яких в типі немає відповідних констант). З іншого боку, очевидне управління значеннями дає деякі додаткові можливості. Наприклад, дозволяє використовувати типи-перерахування при організації інтерфейсу з модулями, написаними іншими мовами, якщо вони використовують або повертають кодовані цілими числами значення певного набору.

Ще одна можливість, яку дають типи на рівні реалізації мови - економія пам'яті. При невеликому обсязі типу-перерахування для зберігання значення цього типу достатньо декількох бітів (наведений тип Cardsuit вимагає всього два біти на значення, в той час як стандартне ціле число на більшості використовуваних архітектур займає 32 біти - в 16 разів більше), і компілятор може використовувати цей факт для ущільнення зберігання даних у пам'яті. Це може бути особливо важливо, якщо кілька значень типів-перерахувань зберігаються в одному записі - ущільнення записів при обробці їх великої кількості може звільнити багато пам'яті. Правда, слід зазначити, що компілятори зазвичай не реалізують цю можливість, принаймні останнім часом, коли комп'ютерна пам'ять суттєво подешевшала.

Критика

Тип перерахування є традиційним для розвинених мов програмування, використовується досить широко і часто сприймається як щось зрозуміле. Проте цей тип також не обходиться без критики з боку теоретиків та практиків програмування. Так, при розробці мови програмування Оберон перераховані типи потрапили до списку можливостей, які були видалені з мови. Ніклаус Вірт, розробник мови, назвав такі причини:

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

Опис перерахувань у різних мовах

Ada

Enum cardsuit (CLUBS, DIAMONDS, HEARTS, SPADES);

Динамічні мови слабкої типізації з C-подібним синтаксисом (напр., perl або JavaScript), як правило, не мають перерахувань.

C++

C#

Enum Cardsuit (Clubs, Diamonds, Spades, Hearts);

Java

Enum Cardsuit (Клуби, Diamonds, Spades, Hearts)

Haskell

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

Data Bool = False | True

Примітки


Wikimedia Foundation. 2010 .

Вікіпедія

З технічних причин Bool перенаправляється сюди. Про Bool можна прочитати тут: stdbool.h. Логічний, булев (англ. Boolean або logical data type) тип даних примітивний тип даних в інформатиці, які можуть приймати два можливі … Вікіпедія

Теоретично програмування будь-який тип, значення якого є значеннями деяких інших типів, «обгорнутими» конструкторами алгебраїчного типу. Інакше кажучи, алгебраїчний тип даних має набір конструкторів типу, кожен із яких… … Вікіпедія

Ціле, цілісний тип даних (англ. Integer), в інформатиці один із найпростіших і найпоширеніших типів даних у мовах програмування. Служить для подання цілих чисел. Безліч чисел цього типу є… … Вікіпедія

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

У цього терміна існують інші значення, див. Множина (значення). Безліч тип і структура даних в інформатиці є реалізацією математичного об'єкта безліч. Дані типу безліч дозволяють зберігати обмежену кількість значень.

Деякі мови програмування пропонують спеціальний тип даних для комплексних чисел. Наявність вбудованого типу спрощує зберігання комплексних величин та обчислення з них. Зміст 1 Арифметика над комплексними 2 Підтримка мовами … Вікіпедія

Для покращення цієї статті по інформаційним технологіямбажано?: Знайти та оформити у вигляді виносок посилання на авторитетні джерела, що підтверджують написане. Проставивши виноски, внести більш точні … Вікіпедія

Як організовано перерахований та інтервальний тип даних Паскаль? Будь-який структурований тип даних у мові Pascal характеризується безліччю елементів, що входять до його складу. Константа або змінна такого типу завжди містить кілька компонентів, кожна з яких може бути структурованого типу. Це нагадує нам вкладеність типів.

Мова Pascal включає такі структуровані типи: рядки, масиви, записи, множини, файли. Але перед тим, як приступити до вивчення цих типів, розглянемо два порядкові типи даних - перерахований та інтервальний.

Перерахований тип Паскаль:

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

У процесі створення програми у нас може з'явитися необхідність об'єднати в одну групу за якоюсь ознакою сукупність значень перерахованого типу. Наприклад, тип ZnakZodiaka (Знак зодіаку) включає скалярні значення Oven, Strelec, Kozerog, Bliznecy, Vesy (Овен, Стрілець, Козеріг, Близнюки, Терези); Перерахований тип Planeta (Планета) поєднує скалярні значення Mercury, Venera, Earth, Mars (Меркурій, Венера, Земля, Марс). Опис типу, що перераховується, відбувається в розділі опису типів:

ZnakZodiaka=(Oven,Strelec,Kozerog,Bliznecy,Vesy);

Опис змінних скалярного типу, оголошених у розділі type, провадиться за допомогою імен типів:

Planeta = (Mercury, Venera, Earth, Mars); var Solnsystem: Planeta;

Таким чином, змінна Solnsystem може приймати такі значення: Mercury, Venera, Earth або Mars. Також змінні, що мають тип, що перераховується, можуть бути оголошені в розділі var:

Solnsystem: Mercury,Venera,Earth,Mars;

Як бачимо, імена типів тут не присутні, і змінні є сукупність значень перелічуваного типу. До змінних типу, що розглядається, можна застосувати оператор присвоєння «:=»

Solnsystem: = Mercury;

Послідовність значень типу, що перераховується, нумерується автоматично, починаючи з нуля:

Planeta = (Mercury, Venera, Earth, Mars);

У цьому прикладі Mercury має значення 0, Venera – значення 1, Earth – значення 2, Mars – значення 3.

Інтервальний тип даних Паскаль:

Діапазон значень, які мають будь-який порядковий тип, визначається як інтервальний тип даних. Відрізок встановлюється в діапазоні від мінімального значення констант до максимального, які відокремлюються один від одного двокрапкою «..». Константами можуть бути константи цілого, символьного, логічного чи перелічуваного типу. Базовим типом називають скалярний тип, у якому задається відрізок.