К порядковым типам относятся (см. рис. 3.1) целые, логические, символьный, перечисляемый и тип-диапазон.
Целые типы. Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два, четыре или восемь байтов. В табл. 3.1 приводятся названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений.
Таблица 3.1. Характеристики целых типов
Название типа
Длина,байт
Диапазон значений
Cardinal
0. .. 2 147 483 647
Byte
0...255
Shortint
-128...+127
Smallint
-32 768...+32 767
Word
0...65 535
Integer
-2 147 483 648...+2 147 483 647
Longint
-2 147 483 648...+2 147 483 647
Int64
-9*10 18 . ..+9*10 18
LongWord
0. . .4 294 967 295
Примечание
Типы LongWord и Int64 впервые введены в версии 4, а типы Smallint и Cardinal отсутствуют в Delphi 1. Тип integer для этой версии занимает 2 байта и имеет диапазон значений от -32768 до +32767, т.е. совпадает с Smallint.
При использовании процедур и функций с целочисленными параметрами следует руководствоваться “вложенностью” типов, т.е. везде, где может использоваться Word, допускается использование Byte (но не наоборот), в Longint “входит” Smallint, который, в свою очередь, включает в себя Shortint.
Перечень процедур и функций, применимых к целочисленным типам, приведен в табл. 3.2. Буквами b, s, w, i, l обозначены выражения соответственно типа Byte, Shortint, Word, Integer и Longint, х - выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.
При действиях с целыми числами тип результата будет соответствовать типу операндов, а если операнды относятся к различным целым типам - общему типу, который включает в себя оба операнда. Например, при действиях с shortint и word общим будет тип integer. В стандартной настройке компилятор Delphi не вырабатывает код, осуществляющий контроль за возможной проверкой выхода значения из допустимого диапазона, что может привести к недоразумениям.
Логические типы. К логическим относятся типы Boolean, ByteBool, Bool, wordBool и LongBool. В стандартном Pascal определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool - по 2 байта, LongBool - 4 байта.
Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина).
Таблица 3.2.Стандартные процедуры и функции,
применимые к целым типам
Обращение
Тип результата
Действие
abs (x)
x
Возвращает модуль x
chr(b)
Char
Возвращает символ по его коду
dec(vx[,i])
-
Уменьшает значение vx на i, а при отсутствии i - на 1
inc(vx[,i])
-
Увеличивает значение vx на i, а при отсутствии i -на 1
Hi(w)
Byte
Возвращает старший бант аргумента
Hi(I)
То же
Возвращает третий по счету байт
Lo(i)
То же
Возвращает младший байт аргумента
Lo(w)
То же
То же
odd(l)
Boolean
Возвращает True, если аргумент-нечетное число
Random(w)
Как у параметра
Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0...(w-l)
sqr(x)
X
Возвращает квадрат аргумента
swap(i)
Integer
Меняет местами байты в слове
swap (w)
Word
Тоже
Символьный тип. Значениями символьного типа является множество всех символов ЭВМ. Каждому символу приписывается целое число в диапазоне О...255. Это число служит кодом внутреннего представления символа, его возвращает функция ord().
Для кодировки в Windows используется код ANSI (назван по имени American National Standard Institute - американского института стандартизации, предложившего этот код). Первая половина символов ПК с кодами 0... 127 соответствует табл. 3.3. Вторая половина символов с кодами 128...255 меняется для различных шрифтов. Стандартные Windows-шрифты Arial Cyr, Courier New Cyr и Times New Roman для представления символов кириллицы (без букв “ё” и “Ё”) используют последние 64 кода (от 192 до 256): “А”... “Я” кодируются значениями 192..223, “а”... “я” - 224...255. Символы “Ё” и “ё” имеют соответственно коды 168 и 184.
Символы с кодами 0...31 относятся к служебным кодам. Если эти коды используются в символьном тексте программы, они считаются пробелами.
Перечисляемый тип. Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками, например:
Type
colors = (red, white, blue);
Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер О, второе - 1 и т. д. Максимальная мощность перечисляемого типа составляет 65536 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа Word и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0, 1 и т.д.
Таблица 3.3.Кодировка символов в соответствии со стандартом ANSI
Код
Символ
Код.
Символ
Код.
Символ
Код
Символ
NUL
BL
@
'
ЗОН
!
А
а
STX
“
В
b
ЕТХ
#
С
с
EOT
$
D
d
ENQ
%
Е
е
ACK
&
F
f
BEL
'
G
д
8'
BS
(
Н
h
HT
)
I
i
LF
*
J
j
VT
+
К
k
FF
f
L
CR
-
М
m
SO
N
n
SI
/
о
DEL
Р
P
DC1
Q
q
DC2
R
r
DC3
S
s
DC 4
Т
t
NAK
U
u
SYN
V
v
ETB
W
W
CAN
х
x
EM
Y
У
SUB
:
Z
.122
z
ESC
;
t
{
FS
<
\
GS
=
]
}
RS
>
Л
~
US
f
r
Применение перечисляемых типов делает программы нагляднее, повышает надежность программ благодаря возможности контроля тех значений, которые получают соответствующие переменные.
Переменные любого перечисляемого типа можно объявлять без предварительного описания этого типа, например:
Var
col: (black, white, green);
Тип-диапазон. Тип-диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона. Тип-диапазон задается границами своих значений внутри базового типа:
<мин.знач.>..<макс.знач.>
где <мин. знач.> – минимальное значение типа-диапазона;
<макс. знач.> – максимальное значение типа-диапазона.
Например,
Type
digit = '0'..'9';
dig2 = 48 .. 57;
Тип-диапазон не обязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной, например:
Var
date : 1. .31;
month: 1..12;
Ichr : 'А'..'Z';
При определении типа-диапазона нужно руководствоваться следующими правилами:
· два символа “..” рассматриваются как один символ, поэтому жду ними недопустимы пробелы;
· левая граница диапазона не должна превышать его правую границу.
Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью.