Функции, связывающие различные типы данных

В табл. 2.6 приведен список стандартных функций, обеспечива­ющих связь между различными типами данных.

Функции Ord, Pred и Succ применимы только к порядковым типам данных, т. е. из простых типов данных ко всем, кроме веще­ственных.

Функция Ord, применяемая к целому числу, дает его собствен­ное значение. Например:

Ord(-35) = -35; Ord(128) = 128

Таблица 2.6

Стандартные функции, связывающие различные типы данных

Обращение Тип аргумента Тип результата Действие
Ord (x) Любой порядковый I Дает порядковый номер значения х в его типе
Pred (x) То же Тот же, что у х Дает предыдущее по отноше­нию к х значение в его типе
Succ (x) -//- Тот же, что ух Дает следующее по отноше­нию к х значение в его типе
Chr (x) Byte Char Дает символ с порядковым номером х
Odd (x) I Boolean Дает True, если х — нечетное число, и False, если х — четное

Если аргумент целый, то, например, оператор

у:= Pred(x) эквивалентен у:= х - 1, а оператор

у:= Succ(x) эквивален­тен у:= х + 1.

Для аргумента символьного типа эти функции дают соответ­ственно предыдущий и следующий символы в таблице внутренней кодировки. Поскольку латинский алфавит всегда упорядочен по ко­дам, т.е.

Ord('a') < Ord('b') <... < Ord (' z '), то, например, можно записать

Pred('b') = 'a'; Succ('b') = 'с'. То же относится и к цифровым литерам:

Pred('5') = '4'; Succ('5') = '6'.

Функция Chr (х) является обратной к функции Ord (х), если х — символьная величина. Например, для кода ASCII справедлива за­пись:

Ord('a') = 97; Chr(97) = 'а'.

Эту их «взаимообратность», если х— символьная величина, можно выразить формулой

Chr(Ord(x)) = х.

В некоторых случаях возникает задача преобразования символь­ного представления числа в числовое. Например, получить из ли­теры '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:= х * Ord(x >= у) + у * Ord(y > x).

Ответ: z =max(x, у), т.е. данную задачу можно решить без ис­пользования условного оператора if..then..else.

Упражнения

1. Вычислить значения следующих логических выражений:

а) К mod 7 = К div 5-1 при К = 15;

б) Odd(Trunc(10 * Р)) при Р = 0.182;

в) Not Odd(n) при n = 0;

г) t And (P mod 3 = 0) при t = True, P = 10101;

д) (х * у < > 0) And (у > х) при х = 2, у = 1;

е) a Or Not b при а = False, b = True.

2. Определить какое значение получит логическая переменная d при а = True и х = 1 после выполнения следующих операторов присваивания:

а) d:= х < 2;

б) d:= Not a Or Odd(x);

в) d:= Ord(a) < > х.

3. Написать оператор присваивания, в результате выполнения кото­рого логическая переменная t получит значение True, если следующее утверждение истинно, и значение False — в противном случае:

а) из чисел х, у, z только два равны между собой;

б) х — положительное число;

в) каждое из чисел х, у, z положительное;

г) только одно из чисел х, у, z положительное;

д) р делится без остатка на q;

е) цифра 5 входит в десятичную запись трехзначного целого числа к.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: