Pascal. Типи даних. Стандартні типи даних. Цілі типи. Порядкові типи

Типи даних. Стандартні типи даних. Цілі типи. Порядкові типи. Функції Ord, Pred, Succ. Функція 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

 


Споріднені теми