Типы данных. Стандартные типы данных. Целые типы. Порядковые типы. Функции 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
⇑
Связанные темы
⇑