Часто принимаемое решение зависит от результата не одного, а нескольких утверждений. Например, «Вася получит сегодня пятерку, если придет на урок И правильно выполнит задание». Значит, нужно научиться объединять результаты нескольких утверждений и принимать общее решение. В приведенном примере этим объединением служит союз «И».
Логическое умножение (конъюнкция)
В алгебре логики операции сравнения в логических выражениях можно комбинировать с помощью логических операций. Обсудим их по порядку.
Рассмотрим утверждение: х < 7 и х > 3
Два отношения связаны союзом «и» (and). Согласно правилам булевской алгебры, комбинация двух логических выражений, связанных между собой союзом «и», всегда является истинной, если истинны оба выражения.
Эта операция называется логическим умножением, или конъюнкцией. В Паскале она обозначается как and.
Таблица 4.2. Таблица истинности для операции логического умножения
Операнд 1
Операция
Операнд 2
Результат
True
And
True
True
True
And
False
False
False
And
True
False
False
And
False
False
Логическое сложение (дизъюнкция)
Рассмотрим утверждение: х > 100 или х< 10
Выражения можно связывать союзом «или» (or). Логическое выражение, связанное союзом «или», всегда ложно (false), если ложны обе его части. Во всех других случаях результатом будет «истина» (true). Эта операция называется логическим сложением, или дизъюнкцией. В Паскале она обозначается как or.
Таблица 4.3. Таблица истинности для операции логического сложения
Операнд 1
Операция
Операнд 2
Результат
True
Or
True
True
True
Or
False
True
False
Or
True
True
False
Or
False
False
Исключающее ИЛИ (сложение по модулю 2)
Рассмотрим утверждение: либо х > 5, либо х < 0
Выражения связаны парой «либо-либо». Такое утверждение истинно, когда истинно только одно из двух составляющих его утверждений. Можно сформулировать это иначе: логическое выражение истинно (true), если его операнды различны. Данная операция называется исключающим ИЛИ. В Паскале она обозначается как хог.
Таблица 4.4. Таблица истинности для операции исключающего ИЛИ
Операнд 1
Операция
Операнд 2
Результат
True
Or
True
False
True
Or
False
True
False
Or
True
True
False
Or
False
False
Как еще можно получить эти результаты? Представим значение true как 1 (логическую единицу), a false — как 0 (логический нуль).
Теперь сложим эти значения и возьмем остаток от деления полученного результата нацело на 2 (mod 2). Эта операция называется также сложением по модулю 2. Ясно, что результат будет всегда меньше двух.
Логическое отрицание (инверсия)
Рассмотрим утверждение: не (х > 100)
Выражение отрицается частицей «не». Результат операции противоположен отрицаемому утверждению. Если утверждение было истинным (true), результатом будет false («ложь»), И наоборот, если утверждение было ложным (false), то получится true («истина»). Эта операция называется логическим отрицанием, логическим НЕ, или инверсией. В Паскале она обозначается как not.
Таблица 4.5. Таблица истинности для операции логического НЕ
Операнд
Результат операции Not
True
False
False
True
Применение логических операций в программе
Пример 4.3. Логические операции в программе Program Bool_l; var X: Integer; Bol, OnBol, Rez: Boolean; Begin X:=4; Bol :=X>3; OnBol:=X<3; writeln('Bol=',Bol); writeln('ОnBol=',OnBol); Rez:=Bol and OnBol; writeln ('Bol and OnBol=',Rez) ; Rez:=Bol or OnBol; writeln('Bol or OnBo1=',Rez); Rez:=not Bol; writeln('not Bol=',Rez); readln end.
При выполнении программы имеем на экране следующее:
Bol=TRUE OnBol=FALSE Bol and OnBol=FALSE Bol or OnBol=TRUE not Bol=FALSE
Пример 4.4. Составление логических выражений Program Bol_2; { Введем логические переменные, которые будут определять характеристики студента. Составим выражения, определяющие, является ли студент первокурсником, получающим стипендию }
var Price:Boolean; { Определяет наличие стипендии у студента } Kursl:Boolean; { Определяет, является ли студент первокурсником } Rezult:Boolean; { Определяет результат}
begin Price:=True; { Пусть наш студент получает стипендию } Kursl:=True; { Пусть студент - первокурсник } Rezult:=Price and Kursl; writeln('Студент-первокурсник со стипендией? -', Rezult); Price:=False; { Пусть наш студент не получает стипендию } Rezult:=Price and Kursl; writeln('Студент - первокурсник со стипендией? - ', Rezult); readln end.
При выполнении программы имеем на экране следующее: Студент - первокурсник со стипендией? - TRUE Студент - первокурсник со стипендией? – FALSE
Задание 4.1. Определите в программе 4 логических переменных, которые содержат следующую информацию о людях: Married — «истина», если человек женат (замужем), Blond — «истина», если у человека светлые волосы, Male — «истина», если человек — мужчина, Employed — «истина», если человек работает.
Составьте логические выражения, с помощью которых можно определить, является ли человек: 1) замужней женщиной; 2) неженатым мужчиной; 3) незамужней блондинкой; 4) безработной незамужней женщиной; 5) либо неженатым, либо безработным, либо и тем и другим.