> if A and B or C and D or E
> then S:=’Поезжай на машине!’
> else S:=’Топай пешком!’;
Как просто! Здесь опять выделено курсивом логическое выражение. Только теперь оно составлено из булевых переменных и булевых операций AND (И) и OR (ИЛИ). Иногда эти операции называют логическим умножением и логическим сложением. Сходство с арифметикой здесь в том, что каждая логическая операция обладает в выражении своим старшинством: умножение AND выполняется раньше сложения OR. Когда эту последовательность надо изменить, применяют скобки. Пример такого рода показан на рис. 34 (перекресток).
Рис.34 – Схема проезда, четвертый вариант
Сначала скажем словами: «проехать можно, если открыта A ИЛИ открыта B И открыта C ИЛИ открыта D». Переведя на Паскаль буквально, без скобок, получим:
> if A or B and C or D
> then S:=’Поезжай на машине!’
> else S:=’Топай пешком!’;
Поскольку логическое умножение выполняется раньше сложения, Паскаль поймет это так: A or (B and C) or D. Но это не то, что мы хотели! Правильно будет записать наше решение со скобками:
> if (A or B) and (C or D)
> then S:=’Поезжай на машине!’
> else S:=’Топай пешком!’;
Наконец, рассмотрим маршрут на рис. 35, где путь преграждает шлагбаум. Договоримся, что закрытому шлагбауму соответствует значение TRUE (то есть, в сравнении с улицами тут все наоборот).
Рис.35 – Схема проезда, пятый вариант
Рассуждая как обычно, скажем так: «проезд возможен, если НЕ закрыт шлагбаум». Здесь применено логическое отрицание НЕ, что по английски значит «NOT». Решение на Паскале будет таким.
> if not A
> then S:=’Поезжай на машине!’
> else S:=’Топай пешком!’;
В отличие от двух предыдущих операций, логическое отрицание – одноместная операция, ей нужен лишь один операнд. Логическое отрицание имеет наивысший приоритет, и выполняется раньше логического умножения и сложения.
Парад логических операций
Итак, посредством логических операций мы переводим рассуждения с человеческого языка на формальный язык программирования, получая при этом логические (булевы) выражения. Логические данные в Паскале можно сравнивать и выполнять с ними четыре логические операции, три из которых вам уже знакомы. Рассмотрим свойства этих операций.
Логическое отрицание NOT («НЕ»). Имеет наивысший приоритет, то есть, при отсутствии скобок выполняется в первую очередь. Это одноместная операция, поскольку требует лишь одного операнда. По своему действию она напоминает знак «минус» для чисел, поскольку изменяет значение операнда на противоположное. Правила для этой операции таковы.
>NOT FALSE = TRUE
>NOT TRUE = FALSE
Логическое умножение AND («И»). Приоритет ниже, чем у NOT, но выше, чем у логического сложения OR. Требует двух операндов, и в результате дает TRUE, если оба операнда равны TRUE.
>FALSE AND FALSE = FALSE
>FALSE AND TRUE = FALSE
>TRUE AND FALSE = FALSE
>TRUE AND TRUE = TRUE
Логическое сложение OR («ИЛИ»). Приоритет самый низкий, – выполняется в последнюю очередь. Требует двух операндов и в результате дает TRUE, если хотя бы один из операндов равен TRUE.
>FALSE OR FALSE = FALSE
>FALSE OR TRUE = TRUE
>TRUE OR FALSE = TRUE
>TRUE OR TRUE = TRUE
Итоги
• Информация – это то, что устраняет неопределенность.
• Получая ответ на вопрос, мы получаем информацию. Количество информации можно измерить.
• Наименьшая порция информации – бит – содержится в ответе на простой вопрос («да» или «нет»). Это количество принято за единицу измерения информации.
• Память компьютера состоит из элементарных ячеек – триггеров, каждый из которых хранит один бит информации. Восемь битов составляют один байт.
• Подобие триггеров в Паскале – булевы (логические) переменные. Они принимают только одно из двух значений: TRUE (истина) или FALSE (ложь).
• Булевы переменные в сочетании с логическими операциями OR, AND, NOT и скобками образуют булево выражение. Скобки нужны для изменения естественного порядка выполнения операций.
• Булевы выражения используют в условных и циклических операторах.
А слабо?
А) Что будет напечатано в результате выполнения следующего фрагмента?
> S:=’123’;