Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

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

Функция 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 < 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) возвращает tue.

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

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

i := 0;

repeat

    i := succ(i);

    ……

until i = 10;