- •3. Логика буля и условное выполнение
- •3.1 Сортировка с условным выполнением.
- •3.1.1 Семейство программ ifSort
- •3.1.2. Семейство программ MinSort
- •3.2. Булева логика.
- •3.2.1. Булевы операторы.
- •3.2.2. Булевы выражения.
- •3.2.3. Булевы тождества.
- •3.3. Булевы выражения в cf-Паскале
- •3.3.1. Снова семейство программ MinSort.
- •3.4. Заключение.
3.2.2. Булевы выражения.
Булеы операторы и операнды могут быть объединены при помощи скобок в Булевы выражения. Любое такое выражение, внутренние операнды которого являются булевыми значениями могут быть преобразованы в одно значение истинности при помощи таблицы истинности. Например, используя T и F в качестве значений истинности.
T or ((NOT F) AND F) = T
Результат может быть получен за один шаг путем повторного нахождения внутреннего выражения, заключенного в скобки и замены его значением из таблицы истинности:
Выражение |
Шаг уменьшения |
Причина |
T OR ((NOT F) AND F) |
(NOT F) = T |
NOT.3 |
T OR (T AND F) |
(T AND F) = F |
AND.2 |
T OR F |
(T OR F) = T |
OR.2 |
T |
|
|
3.2.3. Булевы тождества.
Уравнение между двумя булевыми выражениями, которое не зависит от того, какие значения принимают соответствующие операнды, вроде
NOT(NOT P) = P называется булевым тождеством.
15 полезных булевых тождеств показаны ниже:
TRUE AND P = P
TRUE OR P = TRUE
FALSE AND P = FALSE
FALSE OR P = P
NOT(NOT P) = p
P AND (NOT P) = FALSE
P OR (NOT P) = TRUE
P OR Q = Q OR P
P AND Q = Q AND P
P OR (Q OR R) = (P OR Q) OR R
P AND (Q AND R) = (P AND Q) AND R
P OR (Q AND R) = (P OR Q) AND (P OR R)
P AND (Q OR R) = (P AND Q) OR (P AND R)
NOT(P OR Q) = (NOT P) AND (NOT Q)
NOT(P AND Q) = (NOT P) OR (NOT Q)
Доказательства булевых тождеств могут быть организованы в таблицах, в которых перечислены все комбинации булевых значений операндов, и каждая часть тождества эквивалентна по базовым таблицам истинности, затем скомбинированы для того, чтобы найти значение левой и правой части. Если эти значения равны во всех случаях, то тождество считается доказанным.
Например:
1. TRUE AND P = P
P |
Left |
Right |
T |
T |
T |
F |
F |
F |
9. P OR Q = Q OR P
P |
Q |
Left |
Right |
T |
T |
T |
T |
T |
F |
T |
T |
F |
T |
T |
T |
F |
F |
F |
F |
3.3. Булевы выражения в cf-Паскале
Булевы выражения могут быть включены в состав операторов IF и WHILE языка CF-Паскаль для уменьшения сложности многих программ. В качестве иллюстрации переработаем программу MinSort с использование булевых условий вместо вложенных операторов IF там, где это возможно.
Новые идеи: Булевы выражения языка Паскаль.
SR23. <условие> ::= <выражение> <сравнение> <выражение>
| NOT(<условие>)
|(<условие>) AND (<условие>)
|(<условие>) OR (<условие>)
это правило показывает, что любое условие, используемое с булевым оператором, должно быть заключено в скобки.
Примеры выражений с одинаковым значением:
NOT(Ch1 < Ch2) |
Ch1 >= Ch2 |
NOT(Ch1 > Ch2) |
Ch1 <= Ch2 |
NOT(Ch1 = Ch2) |
Ch1 <> Ch2 |
(Ch1 <= Ch2) AND (Ch1 >= Ch2) |
Ch1 = Ch2 |
(Ch1 <= Ch2) AND (Ch1 < Ch2) |
Ch1 < Ch2 |
(Ch1 <> Ch2) AND (Ch1 > Ch2) |
Ch1 > Ch2 |
(Ch1 < Ch2) AND (Ch1 > Ch2) |
FALSE (как правило, это ошибка) |
(Ch1 < Ch2) OR (Ch1 > Ch2) |
Ch1 <> Ch2 |
(Ch1 <= Ch2) OR (Ch1 < Ch2) |
Ch1 <= Ch2 |
(Ch1 = Ch2) OR (Ch1 <> Ch2) |
TRUE (как правило, это ошибка) |
Булевы тождества и факты могут быть использованы для создания эквивалентных условий языка Паскаль. Например, закон деМоргана:
NOT(P OR Q) = (NOT P) AND (NOT Q)
Означает, что операторы IF, начинающиеся с
IF NOT((Ch1 = Ch2) OR (Ch3 < Ch4))
и
IF (Ch1 <> Ch2) AND (Ch3 >= Ch4)
будут иметь одинаковые действия. Большинству людей более понятен второй вариант.
Булевы выражения очень полезны в программировании. Например:
WHILE (Ch = ‘ ‘) OR (Ch = ‘0’)
DO
READ(Ch)
будет продолжать считывание до первого непробельного ненулевого символа.
IF (Ch >= ‘0’) AND (Ch <= ‘0’)
THEN
WRITE(Ch)
будет печатать только цифры.
