Типи даних. Стандартні типи даних. Цілі типи. Порядкові типи. Функції Ord, Pred, Succ. Функція SizeOf
Зміст
- 1. Поняття типу даних. Групи типів даних
- 2. Класифікація стандартних типів
- 3. Порядкові типи. Поняття. Властивості порядкових типів. Функції Ord, Pred, Succ
- 4. Приклад, що демонструє використання порядкових типів у поєднанні з функціями Pred, Succ
- 5. Цілі типи. Характеристики цілих типів у стандартному Паскалі та Free Pascal
- 6. Приклад оголошення та використання змінних цілих типів
- 7. Програмне визначення мінімально-допустимих та максимально-допустимих значень цілих типів. Приклад
- 8. Програмне визначення розміру типу. Функція SizeOf. Приклад
- Споріднені теми
Пошук на інших ресурсах:
1. Поняття типу даних. Групи типів даних
У програмі дані характеризуються так званим типом, який визначений для кожної змінної, що оголошена у програмі. Іншими словами, кожна змінна має свій визначений тип. Тип змінної – це характеристика, яка визначає множину значень, які може приймати змінна. Виходячи з типу змінної, для кожної змінної виділяється відповідний розмір пам’яті.
Мова програмування Паскаль дозволяє використовувати набір типів, які поділяються на дві групи:
- стандартні (наперед визначені) типи;
- користувацькі типи. Це типи, що визначені користувачем (програмістом).
Стандартні типи мають строго визначені імена і є доступними у будь-якій точці програми. Усі стандартні типи описуються в модулі System. Для використання стандартних типів у програмі, не потрібно підключати модуль System у розділі uses, оскільки цей модуль підключається за замовчуванням. Стандартні типи є доступні у будь-якому модулі програми.
Дозволяється перевизначати імена стандартних типів у програмі. Також доступ до типу можна отримати шляхом використання імені модуля System як показано нижче
System.LongInt System.Real System.Boolean System.Char
Користувацькі типи – це типи, що визначені програмістом. Ці типи необхідні для забезпечення більш кращого розв’язку поставленої задачі. З допомогою користувацьких типів у програмі можна точніше описувати дані, що потрібні для розв’язку задачі.
У мові Паскаль розрізняють наступні користувацькі типи:
- зчислювальний тип;
- інтервальний тип;
- покажчикові типи (крім стандартного типу Pointer);
- структуровані типи;
- об’єктні типи.
⇑
2. Класифікація стандартних типів
У різних версіях Паскаля імена та кількість типів змінюються. Розрізняють типи базового Паскаля та додаткові типи, що були додані в нових подальших версіях та різновидах цієї мови: Delphi (Object Pascal), Lazarus, PascalABC.
До стандартних типів мови Паскаль відносяться:
- цілі типи ShortInt, Integer, LongInt, Byte, Word;
- дійсні типи Single, Real, Double, Extended, Comp;
- булеві типи Boolean, ByteBool, WordBool, LongBool;
- символьний тип Char;
- рядкові типи String, PChar;
- вказівний тип (тип покажчика) Pointer;
- текстовий тип Text.
У мові Free Pascal було додано нові стандартні типи:
- цілі типи SmallInt, Cardinal, LongWord, Int64, QWord;
- дійсний тип Currency;
- символьний тип WideChar.
У мові Delphi додано такі типи:
- цілі типи SmallInt, Cardinal, LongWord, Int64, UInt64, NativeInt, NativeUint;
- дійсні типи Real48, Currency.
⇑
3. Порядкові типи. Поняття. Властивості порядкових типів. Функції Ord, Pred, Succ
До порядкових типів даних відносяться наступні стандартні типи:
- цілі типи ShortInt, Integer, LongInt, Byte, Word, SmallInt, Cardinal, LongWord, Int64, QWord;
- булеві типи Boolean, ByteBool, WordBool, LongBool;
- символьні типи Char, WideChar.
Для порядкових типів можна визначити наступні властивості:
- для кожного порядкового типу визначена множина допустимих значень, які є впорядкованою послідовністю. Кожен елемент порядкового типу має свій порядковий номер, який представлений цілим числом. Перше значення в порядкових типах Byte, Word, Boolean, ByteBool, WordBool, LongBool має порядковий номер 0, далі йде порядковий номер 1 і т.д. У порядкових типах ShortInt, Integer, LongInt порядковий номер рівний значенню цих типів;
- для будь-якого порядкового типу є застосовна стандартна функція Ord, яка визначає порядковий номер цього значення;
- для будь-якого порядкового типу є застосовна стандартна функція Pred, яка повертає попереднє значення відносно заданого значення. Якщо функція Pred застосовується до першого допустимого значення порядкового типу (крім булевих типів), то повертається порядковий номер останнього значення;
- будь-який порядковий тип може бути використаний у стандартній функції Succ, яка повертає наступне значення, що слідує за заданим. Якщо ця функція застосовується до останнього допустимого значення порядкового типу (крім булевих типів), то повертається порядковий номер першого значення.
⇑
4. Приклад, що демонструє використання порядкових типів у поєднанні з функціями Pred, Succ
У прикладі наводиться використання функцій Pred, Succ для стандартних типів класичного Паскаля. Ці функції також можуть бути використані для нових типів мови Free Pascal.
program TestOrdinalTypes; uses crt; var // Оголошення змінних порядкових типів // 1. Група цілих типів i, pred_i, succ_i : Integer; bt, pred_bt, succ_bt : Byte; si, pred_si, succ_si : ShortInt; li, pred_li, succ_li : LongInt; w, pred_w, succ_w : Word; // 2. Булеві типи b, pred_b, succ_b : Boolean; bb, pred_bb, succ_bb : ByteBool; wb, pred_wb, succ_wb : WordBool; lb, pred_lb, succ_lb : LongBool; // 3. Тип Char c, pred_c, succ_c : Char; begin // 1. Група цілих типів // 1.1. Тип Integer i:=25; pred_i := Pred(i); // 24 succ_i := Succ(i); // 26 Writeln('Integer: ', pred_i:6, i:6, succ_i:6); // 1.2. Тип Byte bt:=0; pred_bt := Pred(bt); // 255 succ_bt := Succ(bt); // 1 Writeln('Byte: ', pred_bt:6, bt:6, succ_bt:6); // 1.3. Тип ShortInt si:=-1; pred_si := Pred(si); // -2 succ_si := Succ(si); // 0 Writeln('ShortInt:', pred_si:6, si:6, succ_si:6); // 1.4. Тип LongInt li:=0; pred_li := Pred(li); succ_li := Succ(li); Writeln('LongInt: ', pred_li:6, li:6, succ_li:6); // 1.5. Тип Word w := 0; pred_w := Pred(w); // 65535 succ_w := Succ(w); // 1 Writeln('Word: ', pred_w:6, w:6, succ_w:6); // 2. Булеві типи // 2.1. Тип Boolean b:=True; pred_b := Pred(b); // False succ_b := Succ(b); // True Writeln('Boolean: ', pred_b:6, b:6, succ_b:6); // 2.2. Тип WordBool wb:=False; pred_wb := Pred(wb); // True succ_wb := Succ(wb); // True Writeln('WordBool:', pred_wb:6, wb:6, succ_wb:6); // 2.3. Тип ByteBool bb:=True; pred_bb := Pred(bb); // True succ_bb := Succ(bb); // False Writeln('ByteBool:', pred_bb:6, bb:6, succ_bb:6); // 2.4. Тип LongBool lb:=False; pred_lb := Pred(lb); // True succ_lb := Succ(lb); // True Writeln('LongBool:', pred_lb:6, lb:6, succ_lb:6); // 3. Символьний тип Char c:='D'; pred_c := Pred(c); succ_c := Succ(c); Writeln('Char: ', pred_c:6, c:6, succ_c:6); end.
Результат виконання програми
Integer: 24 25 26 Byte: 255 0 1 ShortInt: -2 -1 0 LongInt: -1 0 1 Word: 65535 0 1 Boolean: FALSE TRUE TRUE WordBool: TRUE FALSE TRUE ByteBool: TRUE TRUE FALSE LongBool: TRUE FALSE TRUE Char: C D E
⇑
5. Цілі типи. Характеристики цілих типів у стандартному Паскалі та Free Pascal
У таблиці 1 відображаються характеристики цілих типів, які були реалізовані у стандартному Паскалі.
Опис типу (призначення) |
Позначення у програмі |
Діапазон представлення чисел |
Розмір пам’яті |
Коротке ціле зі знаком | ShortInt | -128 .. 127 | 1 байт |
Ціле зі знаком | Integer | -32768 .. 32767 | 2 байти |
Довге ціле зі знаком | LongInt | -2147483648..2147483647 | 4 байти |
Коротке ціле без знаку | Byte | 0 .. 255 | 1 байт |
Ціле без знаку | Word | 0 .. 65535 | 2 байти |
Рисунок 1. Характеристики цілих типів у мові Паскаль
До важливих характеристик типу відносяться розмір пам’яті в байтах та діапазон представлення чисел. Розмір пам’яті визначає, скільки байт буде виділено для збереження однієї змінної чи константи в пам’яті. Якщо оголосити змінну типу LongInt, то для її збереження буде виділено 4 байти пам’яті.
У Free Pascal до переліку цілих типів будо внесено зміни (див. таблицю 2), а саме:
- додано додаткові типи SmallInt, Cardinal, LongWord, Int64, QWord;
- тип Integer може займати пам’ять 2 або 4 байти з метою забезпечення сумісності між 16-бітними словами та 32-бітними словами, що були реалізовані в різних поколіннях процесорів.
Таблиця 2 містить додаткові цілочисельні типи, що були додані у мові Free Pascal.
Позначення у програмі |
Діапазон представлення чисел |
Розмір пам’яті, байт |
SmallInt | -32768 .. 32767 | 2 |
Cardinal |
0 .. 4294967295 так само як LongWord |
4 |
LongWord | 0 .. 4294967295 | 4 |
Int64 | -9223372036854775808..9223372036854775807 | 8 |
QWord або UInt64 |
0 .. 65535 | 8 |
У мові Delphi додано такі цілочисельні типи: SmallInt, Cardinal, LongWord, Int64, UInt64, NativeInt, NativeUint. Ці типи мають такі самі характеристики як однойменні типи з таблиці 2. Тип NativeInt має такі самі характеристики як тип LongInt. Тип NativeUint відповідає типу LongWord.
⇑
6. Приклад оголошення та використання змінних цілих типів
Нижче наводиться фрагмент оголошення змінних та констант цілих типів стандартного Паскаля.
program TestOrdinalTypes; uses crt; // Оголошення констант цілих типів const Max = 300; Min = 0; NumberDays = 7; // Оголошення змінних цілих типів var s:ShortInt; i:Integer; l:LongInt; b:Byte; w:Word; begin // Присвоєння значень змінним типів ShortInt, Integer, LongInt s := -35; Writeln(s); i := 2021; Writeln(i); l := 3000000; Writeln(l); // Спроба присвоєння змінній значення, // яке перевищує її допустимі межі. b:=2000; // b = 208 - переповнення Writeln(b); // Присвоєння значення змінній типу Word w := 65000; Writeln(w); end.
Результат виконання програми
-35 2021 3000000 208 65000
⇑
7. Програмне визначення мінімально-допустимих та максимально-допустимих значень цілих типів. Приклад
Для деяких типів існують наперед визначені константи, що визначають мінімально-допустиме або максимально-допустиме значення, яке може отримати змінна деякого типу. У різних мовах (Free Pascal, Delphi, PascalABC) перелік цих констант може відрізнятись.
Нижче наведено приклад використання констант MaxInt та MaxLongInt у системах Delphi та Lazarus
// Вивести максимальне значення типів Integer та LongInt Writeln(System.MaxInt); // 2147483647 Writeln(System.MaxLongint); // 2147483647
⇑
8. Програмне визначення розміру типу. Функція SizeOf. Приклад
Щоб отримати розмір типу, що зайнятий змінною, використовується функція SizeOf. В загальному випадку, виклик функції має такий вигляд:
SizeOf(variableName_or_constantName);
або
SizeOf(typeName);
тут
- variableName_or_constantName – ім’я змінної або константи, для якої потрібно визначити розмір пам’яті, що виділений для неї;
- typeName – ім’я типу, для якого визначається розмір.
Приклад.
program TestTypes; uses crt; // Оголошення констант const Pi = 3.1415; // Оголошення змінних var i:Integer; d:Double; qw:QWord; size:Integer; begin // Функція SizeOf - визначити розмір змінної або типу // 1. Отримати розмір змінної i size := SizeOf(i); // size = 4 Writeln('SizeOf(i) = ', size); // 2. Отримати розмір змінної qw size := SizeOf(qw); // size = 8 Writeln('SizeOf(qw) = ', size); // 3. Отримати розмір типу LongInt size := SizeOf(LongInt); // size = 4 Writeln('SizeOf(LongInt) = ', size); // 4. Вивести розміри інших типів Writeln('SizeOf(Currency) = ', SizeOf(Currency)); // 8 Writeln('SizeOf(SmallInt) = ', SizeOf(SmallInt)); // 2 // 5. Отримати розмір константи Pi Writeln('SizeOf(Pi) = ', SizeOf(Pi)); // 8 end.
Результат виконання програми
SizeOf(i) = 4 SizeOf(qw) = 8 SizeOf(LongInt) = 4 SizeOf(Currency) = 8 SizeOf(SmallInt) = 2 SizeOf(Pi) = 8
⇑
Споріднені теми
⇑