Булевы выражения могут быть включены в состав операторов 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)
будет печатать только цифры.