4.1.8. Ограниченные типы (диапазоны)
Еще одним вводимым типом языка является диапазон. Используя его, мы можем определить тип, который будет содержать значения только из ограниченного поддиапазона некоего базового типа. Базовым типом, из которого вычленяются диапазоны, может быть любой целочисленный тип, тип Char и любой из введенных программистом перечислимых типов.
Для введения нового типа — диапазона — надо в блоке описания типов TYPE указать имя этого типа и границы диапазона через две точки подряд:
| TYPE
| Century = 1..20; { диапазон целочисленного типа }
| CapsLetters = 'А'..'Я'; { заглавные буквы из типа Char }
| TestOK = Level3..Level5; { часть перечислимого типа Test }
Переменные этих объявленных типов смогут иметь значения только в пределах заданных типом диапазонов, включая их границы.
- 69 -
Это еще больше усиливает контроль данных при выполнении программы. Значения переменных типа «диапазон» могут выводиться на экран и вводиться с клавиатуры, только если этот диапазон взят из базового типа, выводимого на экран или вводимого с клавиатуры. В приведенном примере сугубо «внутренними» значениями будут только значения, принадлежащие к типу TestOK, как диапазону невыводимого перечислимого типа Test. Будет ошибкой задать нижнее значение диапазона большим, чем верхнее.
При конструировании диапазона в описании типа можно использовать несложные арифметические выражения для вычисления границ. Но при этом надо следить, чтобы запись выражения не начиналась со скобки (скобка — это признак начала перечисления):
| TYPE
| IntervalNo = (2*3+2)*2 .. (5+123); {неверно! }
| IntervalYes = 2*(2*3+2) .. (5+123); { правильно }