top of page

Функции над дискретными типами

Функция ord

 

Буквы от ‘A’ до ‘Z’ следуют в возрастающем порядке, иными словами, каждая буква имеет порядковое значение, соответствующее ее месту в алфавите. Это порядковое значение может быть получено посредством функции ord.

ord(выражение) – возвращает порядковый номер литеры или значения другого дискретного типа.

 

  • ord(‘I’), ord(‘J’). Результат: 73, 74 (код ASCII)

 

Порядковый номер литеры зависит от используемого кода. Но, независимо от используемого кода, порядковые значения букв следуют по возрастанию:

 

  • ord(‘A’) < ord(‘B’) < ord(‘C’) … < ord(‘Z’)

 

хотя ord(‘Z’) – ord(‘A’) и не обязательно равно 25. То же самое и со строчными буквами:

 

  • ord(‘a’) < ord(‘b’) < ord(‘c’) … < ord(‘z’)

 

Определенной связи между прописными и соответствующими строчными буквами нет, но можно без опасений полагаться на то, что ord(‘a’) – ord(‘A’) имеет то же значение, что и ord(‘z’) – ord(‘Z’).

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

 

  • ord(‘0’) < ord(‘1’) < ord(‘2’) … < ord(‘9’)

 

и, более того, порядковые значения соседних цифр отличаются на 1; так, ord(‘9’) – ord(‘0’)=9. Отсюда следует, что численное значение цифры d (типа char) может быть получено так

 

  • value :=ord(d) – ord(‘0’).

 

Паскаль поддерживает типы char, integer и т.д. В дополнение к ним программист вправе определить и другие типы путем перечисления последовательности констант. Например, тип, заданный перечислением:

 

  • type days=(mon, tue, wed, thu, fri, sat, sun);

 

Константы типа, заданного перечислением, имеют порядковые значения, отсчитываемые от нуля. Например, ord(mon) возвращает 0, ord(sun) возвращает 6; mon < sun.

 

Тип Boolean  – перечисляемый тип, который автоматически задается как

 

type boolean=(false, true);

 

следовательно, ord(false) дает 0, ord(true) дает 1; false &lt; true.

 

Функция chr

 

Обратной для ord  является функция chr.

 

  • chr(выражение) – возвращает литеру, порядковое значение которой задается параметром; неправильное значение влечет ошибку.

 

  • chr(73), chr(74). Результат: I, J (кодировка ASCII)

  • chr(1000). Результат: ошибка

 

Функции succ и pred

 

Порядковые значения редко бывают нужны сами по себе. Часто достаточно знать следующий или предыдущий элемент в установленном порядке. Для этой цели служат функции succ и pred.

 

  • succ(выражение) – возвращает элемент, следующий за тем, который указан в качестве параметра.

  • succ(‘A’), succ(‘0’), succ(0). Результат: B, 1 (символ), 1 (число)

  • succ(false). Результат: true

 

  • pred(выражение) – возвращает элемент, предшествующий тому, который указан в качестве параметра.

  • pred(‘Z’), pred(‘9’), pred(9). Результат: Y, 8 (символ), 8 (число)

  • succ(true). Результат: false

 

Эти две функции можно использовать для определения следующих и предшествующих элементов для типа, заданного перечислением. Возьмем тип days , определенный ранее: pred(sun) возвращает sat, succ(mon) возвращает true.

Однако было бы неверно писать writeln(pred(sun)), поскольку элементы перечисляемого типа нельзя читать или печатать, что, конечно, снижает выгоду от использования таких типов. Наилучшее приближение к writeln(pred(sun) – это оператор writeln(ord(pred(sun))), печатающий число 5 (порядковое значение элемента sat).

Функцию succ удобно использовать для управления циклом:

 

  1. i :=0;

  2. repeat

  3.     i :=succ(i);

  4.     ……

  5. until i=10;

bottom of page