§ 3. Основные алгоритмические конструкции
3.3. Составные условия
Для логических переменных в С++ определены логические операции !, &&, ||, соответствующие операциям НЕ, И, ИЛИ, выполняемым над высказываниями. Логические выражения, в которых наряду с простыми условиями (сравнениями) используются логические операции, называют составными условиями. Приведем таблицу истинности для логических операций.
В логических выражениях могут встречаться как арифметические, так и логические операции. Порядок выполнения операций определяется их приоритетом [1]: 1. !; 2. *, /, %; 3/ +, –; 4. <, >, <=, >= 5. ==, !=; 6. &&; 7. ||. Операции с одинаковым приоритетом выполняются по порядку, слева направо. Для изменения порядка выполнения операций применяют скобки (примеры 3.3 и 3.4). При составлении программ часто нужно строить отрицания сложным логическим выражениям. Для этого полезно использовать тождества, известные из алгебры логики (пример 3.5) и следующую таблицу:
Пример 3.6. Написать программу, которая выдаст на экран значение true или false в зависимости от того, находится ли число B между числами A и C. Этапы выполнения задания I. Исходные данные: переменные a, b, c (вводимые числа). II. Результат: rez (true или false). III. Алгоритм решения задачи. 1. Ввод исходных данных. 2.1. Верно неравенство: а < b < c. Этому неравенству соответствует логическое выражение: а < b && b < с. Присвоим переменной r1 значение этого выражения. 3. Вывод результата. IV. Описание переменных: a, b, c – int, r1, r2, rez – bool.[1] Обратите внимание, что приоритет операций отличается от того, который принят в Pascal (http://informatika8.adu.by/#fif2-2). |
Пример 3.3. Определение порядка действий для выражения: a || c < b && d Первым выполняется сравнение c и b, затем логическая операция &&, потом — ||. Пример 3.4. Рассмотрим выражение: (a < b) && (c < d) Здесь скобки определяют приоритет выполнения операций: т. е. сначала должны выполниться сравнения, а затем —логическая операция &&. Однако в С++ операции сравнения обладают более высоким приоритетом, чем логические операции (в отличие от Pascal), поэтому приведенная выше запись эквивалентна: a < b && c < d Пример 3.5. Построение отрицаний:
Рассмотрим выражение !a > b с переменными а и b типа int. Здесь операция ! относится к переменной a. Поскольку целые могут рассматриваться как логические, то отрицанием любого числа, кроме нуля, будет 0, отрицанием нуля будет 1. Затем полученный результат (0 или 1) сравнится с числом b. Для отрицания сравнения выражение нужно записать так: !(a > b). В языке С++ используются значки «&» и «|». Этими значками обозначаются битовые операции над целыми числами. Значок «&» соответствует операции and (И), проводимой над двоичными разрядами числа, а значок «|» — операции or (ИЛИ). Кроме этих операций, над битами числа можно выполнять операции «~» not (инверсия) и «^» xor (исключающее ИЛИ, сложение по модулю 2). Пример 3.6. V. Программа:
VI. Тестирование. Запустить программу и ввести значения а = 5, b = 0, c = –5. Результат: Запустить программу и ввести значения a = –2, b = –7, с = 5. Результат: VII. Анализ результатов. Для полного тестирования программы нужно проверить все 6 возможных случаев взаимного расположения a, b, c. В программировании на С++ могут использоваться диграфы (англ. digraphs) — последовательности из двух или более символов, которые компилятор воспринимает как один (или более символов). Они созданы и используются для ввода символов, отсутствующих на клавиатуре или в кодировке. К диграфам относят слова and и or, которые эквивалентны && и ||.
|