Основы программирования на C++, PASCAL
3.9. Функции, связывающие различные типы данных
В табл. 3.6 приводится список стандартных функций, обеспечивающих связь между различными типами данных.
Таблица 3.6
Функции ord, pred и succ применимы только к порядковым типам. Из простых типов это все, кроме вещественного.
Функция ord, применяемая к целому числу, дает его собственное значение. Например,
ord(-35)=-35; ord(128)=128
Если аргумент целый, то, например, оператор y:=pred(x) эквивалентен у:=х-1, а у:=succ(x) эквивалентен у:=х+1.
Для символьного типа аргумента эти функции дают соответственно предыдущий и следующий символ в таблице внутренней кодировки. Поскольку латинский алфавит всегда упорядочен по кодам, т.е.
ord('a')<ord('b')<…<-Ord('z'),
то, например,
pred('b')='a', a succ('b')='c'
То же относится и к цифровым литерам:
pred('5')='4'; succ('5')='6'
Функция chr (x) является обратной к функции ord(x), если х — символьная величина.
Это можно выразить формулой
chr(ord(x))=х,
где х — символьная величина.
Например, для кода ASCII справедливо
ord('a')=97; chr(97)='a'
В некоторых случаях возникает задача преобразования символьного представления числа в числовой тип. Например, нужно получить из литеры '5' целое число 5. Это делается так:
N:=ord('5')-ord('0'),
где N — целая переменная. Здесь использован тот факт, что код литеры '5' на пять единиц больше кода '0'.
Булевский тип также является порядковым. Порядок расположения двух его значений таков: false, true. Отсюда справедливы следующие отношения:
ord(false)=0, succ(false)=true,
ord(true)=1, pred(true)=false
Вот интересный пример. Пусть х, у, z — вещественные переменные. Как вы думаете, какую задачу решает следующий оператор:
z:=x*ord(x>=y)+y*ord(y>x)
Ответ такой: z = mах(х, у). Как видите, эту задачу можно решить, не используя условного оператора if...then...else.
Упражнения
1. Вычислить значения логических выражений:
а) К mod 7=K div 5-1 при К=15;
б) odd(trunc(10*P)) при Р=0.182;
В) not odd(n)при n=0;
г) t and (P mod 3=0) при t=true, P=10101;
Д) (x*y<>0) and (y>x) при х=2, y=l;
e) a or not b при a=false, b=true.
2. Если a=true и х=1, то какое значение получит логическая переменная d после выполнения оператора присваивания:
a) d:=x<2; б) d:=not a or odd(x); в) d:=ord(a)ox
3. Написать оператор присваивания, в результате выполнения