
- Обучение
- Поступление в ЗФТШ
- О ЗФТШ
- Учителям
- Лекторий
-
Курсы
- Заочное отделение
- Очное отделение
- Факультативы
В прошлом задании мы работали с числовыми типами переменных и учили арифметику, теперь познакомимся с логическим типом переменных, который называется Boolean. Переменные этого типа имеют всего два значения - true и false (соответственно, «истина» и «ложь»). Подобно числовым переменным им можно присваивать значения при помощи оператора присваивания. При этом необходимо строго соблюдать правило совместимости типов. То есть, логическим переменным нельзя присваивать числовые значения, а числовым - логические. Так же можно выводить значения логических переменных на экран, а вот вводить их с клавиатуры нельзя!
В языке Pascal определены `6` операций сравнения, результатом которых является логическое значение:
1) «больше» (>)
2) «больше или равно» (>=)
3) «меньше» (<)
4) «меньше или равно» (<=)
5) «равно» (=)
6) «не равно» (<>).
Например, операция `5>2` всегда выдаст значение true, а операция `x<>3` выдаст значение true, если переменная `x` имеет любое значение, кроме `3`.
Сравнивать можно не только числа (причём как целые, так и вещественные), но и логические значения. При этом считается, что значение true больше, чем значение false.
При выполнении сравнений также необходимо соблюдать совместимость типов. То есть, можно сравнивать число с числом или логическое значение с логическим значением, но нельзя сравнивать число с логическим значением. Такое сравнение выдаст ошибку.
Помимо операций сравнения ещё существуют и логические операции:
1) and (конъюнкция, логическое умножение, операция «И»)
2) or (дизъюнкция, логическое сложение, операция «ИЛИ»)
3) not (отрицание, инверсия)
4) xor (строгая дизъюнкция, исключающее «ИЛИ», сложение по модулю `2`).
В скобках указаны возможные названия данных операций в алгебре логики.
Операнды этих операций должны быть логического типа. Результат вычислений также будет логический. При этом операции and, or, xor имеют по два операнда, а операция not - всего один, который записывается справа от названия операции. Названия логических операций являются служебными зарезервированными словами языка.
Приведём таблицы результатов логических операций для всех возможных значений операндов (в алгебре логики такие таблицы называются таблицами истинности):
X |
not x |
false |
true |
True |
false |
X |
y |
x and y |
x or y |
x xor y |
false |
false |
false |
False |
false |
false |
true |
false |
True |
True |
true |
false |
false |
True |
True |
true |
true |
true |
True |
False |
Логический результат даёт также стандартная функция odd(x), которая применяется к целочисленному аргументу х:
odd(x) = true, если `x` нечётно;
odd(x) = false, если `x` чётно.
Приоритет операций в сложном выражении (содержащем в себе все виды операций, изученных нами) следующий:
1) Операция not.
2) Операции группы умножения and, *, /, div, mod
3) Операции группы сложения or, xor, +, -
4) Операции сравнения >, <, >=, <=, =, <>
Операции одного приоритета выполняются слева направо. Операции в круглых скобках имеют более высокий приоритет, чем операции вне скобок.
Рассмотрим несколько примеров на построение логических выражений. Пусть нам требуется записать логическое выражение по синтаксису языка программирования, имеющее значение true, в случае выполнения указанного условия.
Целое число `n` делится на `13`.
n mod 13 = 0
Надо проверять, что остаток от деления на `13` является нулём.
Целое число `n` делится на `13` и `7`.
(n mod 13 = 0) and (n mod 7 = 0)
Здесь надо проверить одновременное выполнение двух условий.
Переменная `x` имеет значение из отрезков `[2,5]` или `[-1,1]`.
(x>=2) and (x<=5) or (abs(x)<=1)
Из чисел `x`, `y`, `z` хотя бы два равны между собой.
(x = y) or (x = z) or (y = z)
Числа `x`, `y`, `z` равны между собой.
(x = y) and (x = z)
Обратите внимание, что согласно таблице приоритетов, операции сравнения имеют самый низкий приоритет. Однако, как правило, в сложных выражениях нужно сначала выполнить сравнения, а потом группировать их результаты при помощи логических операций. Поэтому не нужно забывать брать операции сравнения в скобки, чтобы не получить неправильный порядок действий.