Логические выражения

Понятие логического выражения или выражения типа Boolean во многом базируется на понятии операций отношения. В Object Pascal реализованы следующие операции отношения:

= - равно;

<> - не равно;

> - больше чем;

< - меньше чем;

>= - больше или равно;

<= - меньше или равно.

Эти операции используют в качестве операндов выражения практически всех скалярных и базовых типов: вещественного, целого, логического, символьного и строкового.

При выполнении операций отношения допускается смешение типов Real (всех вещественных), Integer (всех целых). Результат операции для любых операндов всегда логического типа - { false, true }.

Примеры:

А = В { результат равен true, если А равно В

и false, если А не равно В}

А <> В { результат равен true, если А не

равно В и false, если А равно В}

А > В { результат равен true, если А больше

В и false в противном случае}

А > 0 { результат равен true, если А больше

нуля и false в противном случае}

В операциях сравнения для символов и строк необходимо вспомнить, что у каждого элемента скалярного, перечислимого типа есть свой код - порядковый номер. Его можно получить, используя функцию Ord. Заведомо известно, что коды всех букв упорядочены согласно таблице ASCII (смотри п.3.2.3), а коды всех цифр упорядочены по их арифметическим значениям. Данное отношение порядка и позволяет сравнивать любые символы и строки.

Пример:

 

'А' < 'D'

'X' < 'Y'

'2' < '5'

'ABCD' < 'АВСЕ'

'ABC' < 'ABCD'

Кроме операций отношения в логических выражениях используются скобки и логические связки (операции с операндами типа Boolean):

- унарная (имеющая один операнд): not;

- бинарные (имеющие два операнда): and, or, xor.

Запись бинарных логических связок осуществляется следующим образом:

 

<логическое выражение - первый операнд> <логическая связка> <логическое выражение - второй операнд> ;

 

При использовании логических связок необходимо большое внимание уделять расстановке скобок так, как при совместном использовании операций сравнения и логических связок можно легко ошибиться. Логические связки имеют более высокий приоритет, чем операции сравнения.

Примеры логических выражений со связками:

(А>5) and (Т<10)

((М<3) or (Х<0)) and Z.

С помощью произвольных логических выражений X и Y можно легко показать смысл логических связок. Напомним, что выражения X и Y могут иметь только одно из двух значений {false, true}.

X and Y - ("конъюнкция") данное логическое выражение истинно, тогда и только тогда, когда X и Y одновременно истинны.

X or Y - ("дизъюнкция") данное логическое выражение истинно, когда по крайней мере одно из выражений X или Y истины.

X xor Y - ("исключающая дизъюнкция") данное логическое выражение истинно, когда X<>Y и ложно в обратном случае.

not Х - ("отрицание") данное логическое выражение истинно, когда X— ложно и ложно, когда X— истинно.

Используя операции отношения на множестве логических значений можно определить и другие операции математической логики.

Например:

(X, Y:Boolean)

Х<= Y- импликация;

Х = Y— эквивалентность;

Х <> Y— исключающее или.

Сами логические операции очень удобно определять с помощью таблиц истинности, в которых единица соответствует логическому значению true, а ноль - false.

Пусть X и Y это логические операнды. Для всевозможных комбинаций их значений построим таблицу истинности логических выражений X and Y, X or Y, X xor Y, not X, X<=Y , Х = Y.

 

X Y X and Y X or Y Х <> Y Х<= Y X =Y not Х

 

При вычислении логических выражений можно воспользоваться установкой компилятора {$В-} или {$В+}. Она отвечает за режим оптимизации вычисления логических выражений. Например, в логическом выражении

(2<>2) and (a<y) and (t<z)

достаточно вычислить первый элемент конъюнкции, чтобы сказать, что всё логическое выражение ложно. Но в некоторых случаях режим оптимизации приводит к ошибкам. Например, в той части логического выражения, которая была отброшена в результате оптимизации вызывалась функция, имеющая логическое значение и выполняющая полезную работу, но в результате оптимизации функция не будет вызвана и это приведет к ошибке.