Программирование на языке Pascal

6cac1dc9

Стандартные подпрограммы, обрабатывающие порядковые типы данных


Только для величин порядковых типов определены следующие функции и процедуры:

  1. Функция ord(x) возвращает порядковый номер значения переменной x (относительно того типа, к которому принадлежит переменная х).
  2. Функция pred(x) возвращает значение, предшествующее х (к первому элементу типа неприменима).
  3. Функция succ(x) возвращает значение, следующее за х (к последнему элементу типа неприменима).
  4. Процедура inc(x) возвращает значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+1).
  5. Процедура inc(x,k) возвращает k-е значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+k).
  6. Процедура dec(x) возвращает значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x:=x-1).
  7. Процедура dec(x,k) возвращает k-e значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x:=x-k).

На первый взгляд кажется, будто результат применения процедуры inc(x) полностью совпадает с результатом применения функции succ(x). Однако разница между ними проявляется на границах допустимого диапазона. Функция succ(x) неприменима к максимальному элементу типа, а вот процедура inc(x) не выдаст никакой ошибки, но, действуя по правилам машинного сложения, прибавит очередную единицу к номеру элемента. Номер, конечно же, выйдет за пределы диапазона и за счет усечения превратится в номер минимального значения диапазона. Получается, что процедуры inc() и dec() воспринимают любой порядковый тип словно бы "замкнутым в кольцо": сразу после последнего вновь идет первое значение.

Поясним все сказанное на примере. Для типа данных

type sixteen = 0..15;

попытка прибавить 1 к числу 15 приведет к следующему результату:

+ 1 1 1 1 1 1 0 0 0 0

Начальная единица будет отсечена, и потому получится, что inc(15)=0.

Аналогичная ситуация на нижней границе допустимого диапазона произвольного порядкового типа данных наблюдается для процедуры dec(x) и функции pred(x):

dec(min_element)= max_element



Содержание раздела