Интервальный ординальный тип (или тип – диапазон) является подмножеством последовательных величин ранее определенного (или предопределенного) перечислимого или стандартного ординального типа (базового типа).
Если тип week_day ранее определен, мы можем создать новый тип, например:
TYPE work_day=Monday..Friday;
На интервальном типе данных определены те же операции, что и на базовом. Однако программист должен гарантировать корректность операций на шаге выполнения. Если var D:work_day, то на шаге выполнения программы фрагмент D:=Friday; D:=SUCC(D) приведет к ошибке, поскольку для интервального типа work_day значение Friday является последним и не имеет последующего.
Fabruary:if (t.y mod 4)=0 then t.d:=29 else t.d:=28;
April,June,September,November:t.d:=30
end
end else t.d:=t.d-1;
t.w_d:=pred_week_day(today.w_d);
end;
begin
today.w_d:=Monday;
today.d:=2;
today.m:=October;
today.y:=2006;
repeat
pred_dat(today);
if (today.y<=2000) and (today.w_d=Monday) and (today.d=13)
then kol:=kol+1;
until (today.y=1901) and (today.m=January) and (today.d=1);
writeln('Kol= ',kol:4)
end.
К целочисленным типам в TP относятся следующие предопределенные типы:
Тип
Диапазон
Размер (байт)
Shortint
-128..127
1 (со знаком)
Integer
-32768..32767
2 (со знаком)
Longint
-2147483648..2147483647
4 (со знаком)
Byte
0..255
1 (без знака)
Word
0..65535
2 (без знака)
Для целочисленных типов применимы все функции, допустимые для ординальных типов – PRED, SUCC, DEC, INC. Определены унарные операции + и - ( сохранить знак числа, изменить знак числа), арифметические бинарные операции сложения (+), вычитания (-), умножения (*), деления нацело (div), взятия остатка при целочисленном делении (mod), деление (/), в результате последней операции получается вещественная величина. Кроме общих функций для ординальных типов данных, для целочисленных типов данных определены следующие:
CHR(X) – возвращает символ (значение типа CHAR), код которого есть целое положительное число X (0 <= X <= 255).
Логическая функция ODD(X) возвращает TRUE, если X – нечетно, в противном случае – FALSE.
ABS(X) - абсолютная величина X.
SQR(X) - квадрат величины X.
В TP для данных типа INTEGER (и совместимых с INTEGER) определены побитовые операции:
· n1 shl n2 - левый логический сдвиг двоичного кода числа n1 на n2 позиций. Слева двоичные разряды пропадают, справа добавляются нули.
· n1 shr n2 - правый логический сдвиг.
· not n – дополнение к двоичному коду целого числа n (цифра 0 заменяется на 1, 1 на 0).
· n1 or n2 – логическое "или".
· n1 and n2 – логическое "и".
· n1 xor n2 – логическое исключающее "или".
В побитовых операциях целые числа обрабатываются как строки двоичных цифр. Примеры использования побитовых операций приведены в таблицах.