Из того, что данные порядковых типов кодируются числами, следует возможность их сравнения. Например, для перечислений месяцев и дней недели можно записать.

if M2 > M1 then … { если второй месяц больше первого }

if D1 = D2 then … { если дни совпадают }

Нельзя сравнивать данные разных перечислимых типов.

if M2 > D1 then …       { месяц и день – недопустимо }

if 'W' > 20 then …       { символ и число – недопустимо }

Но любые типы можно сравнить, приведя их к числовому типу.

if Ord(M2) = Ord(D1) then … { сравниваются числовые коды }

if Ord(’W’) > 20 then …       { сравнивается код символа с числом }

Прыг-скок

Итак, числа, символы, булевы данные, диапазоны и перечисления принадлежат к порядковым типам. В общем случае наращивать и уменьшать порядковые переменные путём сложения и вычитания нельзя (можно лишь числа и диапазоны). Но рассмотренные ранее процедуры инкремента (INC) и декремента (DEC) умеют это делать, они были введены в Паскаль фирмой Borland. Другим таким средством являются функции SUCC и PRED, которые существовали ещё в исходной «виртовской» версии языка.

Функция SUCC (от слова SUCCESS – «ряд», «последовательность») принимает значение порядкового типа и возвращает следующее значение того же самого типа, например:

      Writeln ( Succ(20) );       { 21 }

      Writeln ( Succ(’D’) );       { ’E’ }

      Writeln ( Succ(False) ); { True }

      m:= Succ(Feb);       { переменной m присвоено Mar }

Функция PRED (от PREDECESSOR – «предшественник») возвращает предыдущее значение порядкового типа:

      Writeln ( Pred(20) );       { 19 }

      Writeln ( Pred(’D’) );       { ’C’ }

      Writeln ( Pred(True) );       { False }

      m:= Pred(Feb);       { переменной m присвоено Jan }

Функции SUCC и PRED подчиняются директиве контроля диапазонов $R+. Например, следующие операторы вызовут аварийное прекращение программы:

{ $R+ }

      m:= Succ(Dcb); { превышение верхнего предела }

      m:= Pred(Jan); { выход за нижний предел }

В Borland Pascal есть одна тонкость: директива $R+ не действует, если функции SUCC и PRED вызываются для чисел, например:

{ $R+ }

var B : byte;

      ...

      B:=255; B:= Succ(B);       { нет реакции на переполнение }

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату