Глава 3 ТИПЫ ДАННЫХ
Под типом данных понимается множество допустимых значений этих данных, а также
совокупность операций над ними.
3.1. Классификация типов данных
В Turbo Pascal можно выделить следующие группы типов:
- простые типы;
- структурированные типы;
- указатели;
- процедурные типы;
- объекты.
Среди типов, используемых в языке, есть стандартные (предопределенные) и определяемые
программистом. К стандартным типам, не требующим предварительного определения,
относятся целые типы, вещественные типы, логические типы, символьный тип - Char,
тип-строка - string, ASCIIZ-строка - PChar, текстовый файл - Text,
тип-указатель - Pointer. Все другие используемые типы данных должны быть определены
либо в разделе объявления типов, либо в разделе объявления переменных или
типизированных констант.
Раздел объявления типов начинается зарезервированным словом type, после которого
определяются вводимые типы. Определение каждого нового типа начинается с
идентификатора типа. За ним следует знак равенства, а далее - само определение,
завершающееся точкой с запятой:
type
<имя типа 1> = <определение типа 1>;
<имя типа 2> = <определение типа 2> ;
<имя типа N> = <определение типа N>;
В качестве примера см. п. 3.2.4.
В данном разделе будут описаны только простые типы данных, все остальные типы
будут рассмотрены после описания переменных, констант и выражений.
3.2. Простые типы данных
Простой тип определяет допустимое множество значений данных этого типа а также
совокупность операций над ними.
В Turbo Pascal имеются следующие группы простых типов:
- целые типы;
- перечисляемый тип;
- логический тип;
- тип-диапазон;
- символьный тип;
- вещественные типы.
Все простые типы, за исключением вещественных, являются порядковыми типами.
Для величин порядковых типов определены: следующее значение и предыдущее значение.
Для величин порядковых типов определены стандартные процедуры и функции: Dec, Inc,
Ord, Pred, Succ (см. п. 13.1).
3.2.1. Целые типы
В отличие от языка Паскаль, где определен единственный целый тип Integer,
в Turbo Pascal имеется пять стандартных типов целых чисел: Shortint, Integer,
Longint, Byte, Word.
Характеристики этих типов приведены в табл. 2.
Таблица 2. Целые типы данных
Тип Диапазон Формат Размер в байтах
Shortint -128 .. 127 Знаковый 1
Integer -32768 .. 32767 Знаковый 2
Longint -2147483648 .. 2147483647 Знаковый 4
Byte 0.. 255 Беззнаковый 1
Word 0.. 65535 Беззнаковый 2
3.2.2. Логический тип
Стандартный логический тип Boolean (размер - 1 байт) представляет собой тип
данных, любой элемент которого может принимать лишь два значения: True и False.
При этом справедливы следующие соотношения:
False < True Succ (False) = True
Ord (False) = 0 Pred(True) = False
Ord(True) = 1
В Turbo Pascal 7.0 добавлено еще три логических типа ByteBool (размер - 1 байт),
WordBooL (размер - 2 байта) и LongBool (размер - 4 байта). Они введены для
унификации с другими языками программирования и со средой Windows.
Отличие их от стандартного типа Boolean заключается в фактической величине
параметра этого типа, соответствующей значению True. Для всех логических типов
значению False соответствует число 0, записанное в соответствующее количество
байтов. Значению же True для типа Boolean соответствует число 1, записанное
в его байт, а для других типов значению True соответствует любое число,
отличное от нуля (хотя функция Ord в этом случае дает значение 1).
3.2.3. Символьный тип
Стандартный символьный тип Char определяет полный набор ASCII-символов.
Функция Ord от величины типа Char дает код соответствующего символа.
Сравниваются величины символьного типа по своим кодам.
3.2.4. Перечисляемый тип
Перечисляемый тип не является стандартным и определяется набором идентификаторов,
с которыми могут совпадать значения параметра. Список идентификаторов указывается
в круглых скобках, идентификаторы разделяются запятыми:
type
<имя типа> = (<идентификатор 1, идентификатор 2, ... , идентификатор М>);
Важно, в каком порядке перечислены идентификаторы при определении типа, т. к.
первому идентификатору присваивается порядковый номер 0, второму - 1 и т. д.
Один и тот же идентификатор можно использовать в определении только одного
перечисляемого типа. Функция Ord от величины перечисляемого типа дает порядковый
номер ее значения.
Пример. Перечисляемый тип,
type Operat = (Plus, Minus, Mult, Divide);
Логический тип является частным случаем перечисляемого типа:
type Boolean = (False, True);
3.2.5. Тип-диапазон
В любом порядковом типе можно выделить подмножество значений, определяемое
минимальным и максимальным значением, в которое входят все значения исходного
типа, находящиеся в этих границах, включая и сами границы. Такое подмножество
определяет тип -диапазон. Тип-диапазон задается указанием минимального и
максимального значений, разделенных двумя точками:
type
<имя типа> = <мин. значение> .. <макс. значение>;
Минимальное значение при определении такого типа не должно быть больше
максимального.
Пример. Определение типов-диапазонов.
type
Dozen = 1..12; {числа от 1 до 12}
AddSub = Plus..Minus; {операции сложения и вычитания}
3.2.6. Вещественные типы
В отличие от стандарта языка Паскаль, где определен только один вещественный
тип Real, в Turbo Pascal имеется пять стандартных вещественных типов:
Real, Single, Double, Extended, Comp.
Характеристики этих типов см. в табл. 3.
Таблица 3. Вещественные типы данных
Тип Диапазон Число Размер
значащих цифр в байтах
Real 2.9*10-39..1.7*1038 11-12 6
Single 1.5*10-45..3-4*1038 7-8 4
Double 5.0*10-324..1.7*10308 15-16 8
Extended 3.4*10-4932..1.1*104932 19-20 10
Comp -263.. +263-1 19-20 8
Тип Comp фактически является типом целых чисел увеличенного диапазона, однако
порядковым не считается.
Типы Single, Double, Extended и Comp можно использовать в программах только при
наличии арифметического сопроцессора или при включенном эмуляторе сопроцессора
(см. пп. 17.5.8 и 17.7.1)