Навчальний курс. 22. Прості типи даних, Різне, Програмування, статті

Введення


У попередніх уроках ми мимохідь знайомилися з типами даних. Весь цей час мова йшла про простих типах. Сьогодні ми узагальнимо пройдене раніше, а також познайомимося з новим матеріалом, який необхідно знати в рамках теми “Прості типи даних”. Осмислено підходити до вибору типів даних для використовуваних в програмах змінних необхідно з різних причин. По-перше, маючи під рукою розмаїття доступних типів і вміло ними розпоряджаючись, можна скоротити обсяг пам’яті, необхідний програмі для роботи. Економію в 1-2 байта ніхто не помітить, але якщо мова йде про великі обсяги даних, ці байти можуть вилитися в цілком реальні мегабайти. По-друге, розумний вибір типів даних дозволяє уникнути деяких помилок, причому як з боку програміста (на етапі створення програми), так з боку користувача (у час використання програми).


Прості типи даних – загальне уявлення


Прості типи даних названі простими, тому що вони не містять всередині себе ніяких інших типів. Крім того, прості типи даних забезпечують зберігання в пам’яті лише одного значення. До простих типів даних відносять такі:



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


Цілочисельний тип – містить числові значення, цілі числа. Числа впорядковані за зростанням: …, -2, -1, 0, 1, 2, 3, …
Логічний тип – містить всього 2 значення – True, False, які теж упорядковані: False, True (випливає з відповідності False – 0, True – 1).
Символьний тип – символи кодової таблиці. Оскільки кожному символу відповідає свій код, то символи розташовані в порядку збільшення коду. Наприклад, букви латинського алфавіту A, B, C, D, … йдуть в кодової таблиці саме так, тому що чим далі від початку алфавіту, тим більший код має буква. Те ж саме стосується і арабських чисел в кодової таблиці – вони йдуть по порядку: 0, 1, 2, …, 8, 9. Це дозволяє робити такі порівняння, як, наприклад “A” < “Z” (Це істинно).


З того, що перерахованих типи даних впорядковані, випливає, що всі значення утворюють кінцеву послідовність. Це відповідає нашим уявленням про типи даних – всі вони мають свої обмеження. Наприклад, немає числового типу даних, який дозволив би зберігати як завгодно велике число. “Великі” типи є, але “число” “нескінченність” вони зберігати не можуть.


Функції та процедури для порядкових типів даних


Існує кілька корисних функцій і процедур, без використання яких, часом, складно оперувати порядковими типами даних:


Pred() – Функція повертає попереднє значення для вираження, зазначеного в якості єдиного аргументу.


Приклади: Pred (5) = 4, Pred (“E”) = “D”, Pred (True) = False.


Succ() – Функція, зворотна для Pred () – повертає наступне значення.


Приклади: Succ (5) = 6, Succ (“E”) = “F”, Succ (False) = True.


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


Приклади: Ord (“A”) = 65, Ord (True) = 1.


Low() – Повертає мінімальне значення зазначеного типу даних.


Приклади: Low (Byte) = 0, Low (Boolean) = False, Low (Char) = # 0 (символ з кодом 0).


High() – Повертає максимальне значення зазначеного типу даних.


Приклади: High (Byte) = 255, High (Boolean) = True, High (Char) = # 255 (в російській локалі це символ “я”).


Ну і ще дві процедури, з якими ми вже знайомі:


Dec() – Зменшує значення на одиницю.


Inc() – Збільшує значення на одиницю.


Не забувайте про другий необов’язковому параметрі цих процедур.


Користувальницькі типи даних


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


Цілочисельні типи


Як випливає з назви, цілочисельні типи дозволяють зберігати цілі числа. Серед них є типи, які зберігають числа зі знаком (тобто позитивні або негативні), а є й такі, які зберігають тільки позитивні. Чим більша кількість значень може містити тип, тим більше пам’яті він займає. Розглянемо цілочисельні типи даних.


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


Byte – Значення 0..255 – Займає в пам’яті 1 байт.


Word – Значення 0..655352 байта.


LongWord – Значення 0..42949672954 байта.


Тепер типи зі знаком (негативні числа записуються зі знаком мінус “-” попереду, невід’ємні можуть записуватися як зі знаком “+”, так і без нього):


ShortInt – Значення -128..1271 байт.


SmallInt – Значення -32768..327672 байта.


LongInt – Значення -2147483648..21474836474 байта.


Int64 – Значення -2^53..2^53-18 байт.


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


Integer – Значення -2147483648..21474836474 байта.


Cardinal – Значення 0..42949672954 байта.


Слід зазначити, що цілі числа можуть бути представлені не тільки в десятковій, а й в шістнадцятковій системі числення, тобто у вигляді $ xxxxxxxx, де x – один із символів 0, 1, …, 8, 9, A, B, …, E, F. Наприклад, всі кольори (точніше, їх коди) подаються саме у вигляді шістнадцятиричних чисел.


Логічні типи


З логічними виразами і з логічним типом даних ми вже знайомі – це тип Boolean, Що приймає значення True і False. Крім Boolean існують такі логічні типи: ByteBool, WordBool і LongBool. Однак останні введені лише для обспеченія сумісності з іншими мовами і системами програмування. Використовувати рекомендується тільки тип Boolean. Логічне значення в пам’яті займає 1 байт. Насправді, звичайно, досить і одного біта, але оперувати осередками менше байта, ми, на жаль, не можемо.


Символьні типи


Символьні типи забезпечують зберігання окремих символів. Основний тип даних – Char, Який містить символи з кодами 0..255. Існують ще типи AnsiChar і WideChar. Тип AnsiChar еквівалентний типу Char, Тобто по суті це один і той же тип. Займає в пам’яті 1 байт. Для кодування символів використовується код ANSI (American National Standards Institute). Тип WideChar кодується міжнародним кодом Unicode і займає в пам’яті 2 байта. Таблиця Unicode включає символи практично всіх мов світу.


Речові типи


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


Real (Він же Double) – Значення від 5.0×10^-324 до 1.7×10^308, Точність – 15-16 цифр, займає в пам’яті 8 байт.


Real48 – Значення від 2.9×10^-39 до 1.7×10^38, Точність – 11-12 цифр, 6 байт пам’яті.


Single – Значення від 1.7×10^-45 до 3.4×10^38, Точність – 7-8 цифр, 4 байта.


Extended – Від 3.6×10^-4951 до 1.1×10^4932, Точність – 19-20 цифр, 10 байт пам’яті.


Comp – Від -2×10^63+1 до 2×10^63-1, Точність – 19-20 цифр, 8 байт.


Currency – Від -922337203685477.5808 до 922337203685477.5807, Точність – 19-20 цифр, в пам’яті займає 8 байт.


Як і у випадку з цілими числами, перед речовими числами може стояти знак “+” або “-“.


Існує 2 форми запису дійсних чисел – з фіксованою точкою і з плаваючою.


Запис з фіксованою точкою являє собою звичайну запис, в якому ціла і дробова частини відділені один від одного крапкою / комою.


Запис з плаваючою точкою на увазі запис порядку числа, який відокремлюється від самого числа буквою “E” (запис “e” теж допустима). Наприклад, запис 1.5e2 означає число 1.5 з порядком +2, тобто це 1.5×10^2 = 150.


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


Перечислимого типи даних


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


Сенс перечислимого типу в тому, що ми явно вказуємо (перераховуємо) усі можливі значення. Переваги в тому, що крім заданих значень змінні цього типу не зможуть брати більше ніяких значень. Крім того, значення можна задавати цілком осмислені – наприклад слова. Це спростить розуміння коду і написання програми.


Значення типу даних перераховуються через кому, а весь цей набір полягає в круглі дужки. Опис типу повинно проводитися в спеціальному розділі розділу описів – розділі опису типів. Цей розділ передує ключовим словом type. Тобто запис йде приблизно так само, як і опис змінних або констант, тільки замість var і const пишеться type. Сам тип описується таким чином: назва типу, далі знак рівності і далі саме значення. У випадку з перечислимого типом це буде набір можливих значень.


Примітка: практично всі типи даних в Object Pascal прийнято називати на літеру “T” (скорочено від “Type”). Це не закон мови – просто одне з правил хорошого тону. Знаючи, що “T ***” – це тип, ви ніколи не помилитеся, в іншому ж випадку назву можна сплутати, наприклад, з назвою змінної.


Припустимо, ми хотіі задати тип даних, що визначає один з місяців року. Ми можемо описати його так:

type
TMonth = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
 
var
M: TMonth;
 
{…}
 
M:=Jun;

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


Розділ type існує як в модулі всієї форми (у цьому розділі спочатку описана сама форма: TForm1 = class(TForm) … ), Так і в будь-підпрограмі. Область дії типу, відповідно, визначається місцем в програмі, в якому він описаний.


Інтервальні типи даних


Інтервальні типи даних (також їх називають обмеженими) виходять з наявних типів шляхом обмеження діапазону значень. Інтервал задається двома константами – початковій і кінцевій кордоном. При кожному присвоєння значення змінної виконується перевірка відповідності нового значення вказаному діапазону. Якщо значення не потрапляє в діапазон, видається повідомлення про помилку. Під час виконання програми завдання недопустимого значення до помилки не приводить, зате значення змінної може стати невірним.
Обмежений тип даних можна створити тільки на основі простого впорядкованого типу. Значення другої константи (тобто правої межі) повинно бути більше значення першої (лівої межі).
Обмежені типи даних також описують в розділі type. Формат запису схожий, тільки між константами-межами ставляться дві точки.


Наприклад, ми хочемо в програмі працювати з датами. Можна створити обмежені типи даних для значень дня, місяця та року (діапазон для значення року слід задати в залежності від контексту задачі):

type
TDay = 1..31;
TMonth = 1..12;
TYear = 1900..2100;

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


Висновок


Сьогодні ми розглянули прості типи даних – цілочисельні, речові, символьні і логічні, а також навчилися створювати перечислимого та інтервальні типи даних в своїх програмах. Як було відзначено на початку, всі ці типи дозволяють зберігати лише одне значення і не містять всередині себе інших типів. Надалі ми перейдемо до розгляду структурних типів даних, де справа йде інакше.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*