Вычисление логических выражений

Базовые структуры «ветвление» и циклы управляются условием. Условие – это выражение, имеющее логическое значение истина или ложь. Для условного блока условие определяет, какая из ветвей будет выполняться. Для циклов условие определяет, будет ли цикл продолжаться или завершаться.

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

Логические переменные объявляются с использованием типа Boolean. Они могут хранить только одно из двух значение – истина или ложь. В языке Паскаль используются константы true и false.

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

Можно сравнивать числа, строки и множества. Результатом операций отношения является либо значение истина, если отношение выполняется, либо значение ложь в противном случае.

Логические операции применяются к логическим выражениям и возвращают результат логического типа. К логическим операциям относятся: not (логическое отрицание), and (логическое И), or (логическое ИЛИ) и xor (логическое исключающее ИЛИ). Результаты логических операций определяются стандартными правилами булевой алгебры.

A B not A not B A and B A or B A xor B
ложь ложь истина истина ложь ложь ложь
ложь истина истина ложь ложь истина истина
истина ложь ложь истина ложь истина истина
истина истина ложь ложь истина истина ложь

Примеры логических выражений, записанных на языке Паскаль. var f: boolean; a, b, c: integer; ... f // Логическая переменная f = true // Не нужно - избыточность not f // Отрицание значения логической переменной a = b // Сравнение двух чисел на равенство b <= c // Сравнение двух чисел (a < b) and (b < c) // Сравнение чисел, результаты двух операций сравнения объединяются логической операцией a < b < c // Неверно! (a <> c) or f // Результат операции сравнения и значение логической переменной объединяются логической операцией

Поскольку приоритет логических операций в языке Паскаль выше, чем приоритет операций отношения, в выражениях, содержащих и те, и другие операции, обычно требуются скобки. Кроме того, приоритет операции and выше, чем приоритет операции or, поэтому в некоторых случаях для правильной интерпретации выражения компилятором могут также потребоваться скобки. Например, пусть a, b и c – логические переменные. Выражение a or b and c будет прочитано компилятором следующим образом: a or (b and c). При необходимости изменить порядок выполнения операций нужно использовать скобки: (a or b) and c.

Пример 1. Записать в виде логического выражение высказывание:

  1. «Точка x лежит правее точки c» – (x > c).
  2. «Точка (x, y) принадлежит эллипсу с центром в (0, 0) и полуосями a и b» – (x2/a2 + y2/b2 = 1).

Пример 2. Записать в виде логического выражение высказывание «Точка (x, y) принадлежит верхней половине эллипса с центром в (0, 0) и полуосями a и b» – (x2/a2 + y2/b2 = 1) & (y > 0).

Пример 3. Записать в виде логического выражения высказывание: «Точка x принадлежит одному из отрезков [a, b] или [c, d]» – ax & xbcx & xd.

Вопрос. Почему нельзя записать axb?

Пример 4. Вычислить значение логического выражения (x · y > zax < 0) ∨ ¬(b & x < y) при x = –2.5, y = 0.1, z = –3, a = true, b = false.

Способ выполнения: основан на приоритете операций – ((x · y > z) ∨ a ∨ (x < 0)) ∨ (¬(b & (x < y))).

Вопрос. Можно ли определить результат, не вычисляя всего выражения? – Результат равен true, т.к. b = false, следовательно, вторая часть выражения ложна, но её отрицание истинно, поэтому всё выражение тоже истинно.

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

Пример 6. Определить область истинности логического выражения x ≥ 0 & y ≥ –xy < –1.

Метод построения. Расставим скобки в соответствии с приоритетом операций: ((x ≥ 0) & (y ≥ –x)) ∨ (y < –1). Далее, в соответствии с приоритетом: