ТИПИ ДАННИХ
Концепція типу даних. Прості типи.
Практично у всіх мовах програмування константи, вирази, функції, відносяться до деякого типу даних. Звичайно, щоб визначити тип даних, вдаються до опису типу.
Приклади.
У Паскалі
a,x: real;
z: Longint;
y: array[0..5] of Integer.
У Фортрані
INTEGER I,M,OP
COMPLEX Q
У Бейсику
DEFSTR A-D
DEFDBL Q
У деяких мовах тип визначається у деяких випадках по контексту
Приклади.
У Паскалі
const
v = 1.02;
p = [man, woman, girl];
У Фортрані
PI = 3.1415926
Щодо типу слід зазначити такі властивості та принципи, що їх покладено у концепцію типу:
- Будь-який тип даних визначає множину значень, які можуть приймати константи, змінні, вирази, результати операцій та значення функцій.
- Тип будь-якої величини, що визначається константою, змінною або виразом, може бути визначений за її видом або описом, Жодних обчислень для цього не слід проводити.
- Будь-яка операція або функція вимагає задання операндів (аргументів) визначеного типу та повертає значення деякого визначеного типу. Якщо операція дозволяє використовування різного типу аргументів, то тип результату однозначно визначається правилами мови.
Усі типи даних будемо поділяти на базові та складані. Серед базових (або стандартних, або простих, або елементарних) звичайно виділяють такі:
- Integer - числа цілого типу. Якщо при реалізації використовуються комірки пам'яті з n двійковими разрядами, то звичайно числа типу integer приймають значення
-2n-1 Ј x Ј 2n-1-1.
Для даних типу integer визначено арифметичні операції "+", "-", "*", "/", "div", "mod", "rem".
Операції "/", "rem" та "div", "mod" відображають два підходи до ділення у алгебрі цілих чисел - ейлерівський (/, rem) та модульний (div, mod).
У мові Паскаль функції div та mod реалізують саме ейлерівський підхід!
Для додатних чисел результати операцій / та div однакові та дають цілу частину частки від діління.
Якщо хоча б одне з чисел x або y менше нуля, то спочатку виконують
abs(x) / abs(y),
а потім додають знак "-", якщо xy < 0, або "+", якщо xy > 0.
Таким чином,
31/10 = +3;
(-31)/10 = -3;
31/(-10) = -3;
(-31)/(-10) = +3.
А так визначається результат операції "rem". Вона дорівнює залишку від діління
abs(x) / abs(y),
що береться із знаком "+", якщо x > 0, та "-" якщо x < 0.
Таким чином,
31 rem 10 = +1;
(-31) rem 10 = -1;
31 rem (-10) = +1;
(-31) rem (-10) = -1.
При цьому завжди
(m/n) * n +(m rem n) = m;
0 < abs(m rem n) < abs(n).
Операції "div" та "mod" виконуються виключно для додатного другого операнду.
m div n означає entier(m/n) = max y: y О Z, y Ј m/n, де m/n є результатом ділення у алгебрі дійсних чисел.
Операція m mod n = m - (m div n)*n дає результат у діапазоні 0 Ј m mod n < n, так, що (m div n) * n + (m mod n) = m.
Таким чином,
31 div 10 = +3;
(-31) div 10 = -4;
31 mod 10 = 1
(-31) mod 10 = 9.
- Real - числа дійсного типу. Діапазон залежить від конкретної реалізації.
Cardinal - дані порядкового типу. Це цілі числа без знаку, тобто типу x О N. У Паскалі їм відповідають типи Byte та Word.
Boolean - дані логичного типу, з двома значеннями: true та false (правда та хибність). Над ними звичайно визначено логічні операції not (Ш), and (Щ), or (Ъ) та, можливо, деякі інші.
Char - це множина символів, що можуть бути надруковані. Формально слід розрізнювати цей тип з типом Byte, хоча фактично для зберігання символу у пам'яті використовується рівно один байт, і, таким чином, є деяка відповідність між цими типами даних.
Для даних типу Char вдаються до таких припущень:
- Тип Char містить 26 великих та 26 малих літер латинської абетки, 10 арабських цифр та деяку кількість інших символів. При реалізації у неангломовних країнах (у тому числі і в Україні) до типу Char долучають літери національної абетки.
Щодо символів вважається, що літери латинської абетки та цифри впорядковані таким чином, що
('A' Ј x) & (x Ј 'Z') Ю x - велика латинська літера;
('a' Ј x) & (x Ј 'z') Ю x - мала латинська літера;
('0' Ј x) & (x Ј '9') Ю x - цифра;
Це, крім іншого, означає не тільки впорядкованість, але й відсутність розривів у послідовностях літер та цифр.
- Щодо кирилічних літер це, на жаль не виконується.
- Існує символ "пробіл", виведення якого на друк або на екран не призводить до появи якогось зображення. Він слугує як відокремлювач.
Вправи.
- Обчислити m/n, m rem n та m div n , m mod n, де це можливо.
m | 1 | -1 | 1 | -1 |
14 | -14 | 14 | -14 |
0 | 0 | 2 | -2 |
3 | -3 | 3 | -3 |
n | 1 | 1 | -1 | -1 |
5 | 5 | -5 | -5 |
2 | -2 | 0 | 0 |
7 | 7 | -7 | -7 |
m/n | | | | |
| | | |
| | | |
| | | |
rem | | | | |
| | | |
| | | |
| | | |
div | | | | |
| | | |
| | | |
| | | |
mod | | | | |
| | | |
| | | |
| | | |
Контрольні питання.
- Які Ви знаєте скалярні типи даних?
- Перелічить вимоги до типів, за якими слід будувати мову програмування.
На початок