Краткое содержание
Условие есть выражение, значение которого истинно или ложно. В этом уроке изучается, как условия строятся в C++: шесть операторов сравнения, которые сравнивают два значения и дают bool; три логические связки, &&, || и !, которые соединяют условия так же, как конъюнкция, дизъюнкция и отрицание в логике; и приоритет, который упорядочивает их между собой и по отношению к арифметике. Изучаются также две черты, в которых C++ расходится с математической записью: цепочка 1 < x < 5, которая компилируется и означает не то, что кажется, и вычисление по короткой схеме, при котором второй операнд && и || не вычисляется, если первый уже решил исход, что позволяет защитить опасную операцию. Завершает урок отрицание составных условий по законам де Моргана, проверенное таблицами истинности, и его центральный пример: условие високосного года и его отрицание. В этом разделе ещё нет ветвлений: условия вычисляются и выводятся как true или false, а урок Ветвления заставит их управлять программой.
Цели обучения
- Записывать в C++ составные условия, переводящие высказывания вроде « лежит между 1 и 10 включительно».
- Строить отрицание составного условия по законам де Моргана и подтверждать равносильность таблицей истинности.
- Использовать вычисление по короткой схеме для защиты операции, как в
count != 0 && total / count > 2. - Распознавать ошибку записи
1 < x < 5, объяснять, что она вычисляет, и исправлять её.
Условие как выражение
Урок Символы, логические значения, преобразования и константы представил тип bool с двумя его значениями, true и false, а урок Арифметические операции показал, что у выражения есть дерево, которое задают приоритет и ассоциативность, и тип, который задают его операнды. Этот урок соединяет обе идеи. Условие есть выражение типа bool: не инструкция, которая что-то спрашивает, а вычисление, результат которого и есть ответ. count < 10 вычисляется так же, как count + 1: берутся операнды, применяется оператор и получается значение, только это значение есть true или false, а не число. Если это так, то всё, что верно для арифметических выражений, верно и для условий: у них есть приоритет, есть дерево, их можно сохранить в именованной переменной (const bool inRange{…}) и можно вывести. Отсюда следует вопрос, который проходит через весь урок: какое выражение для данной фразы («год високосный», «возраст от 18 до 65») имеет в точности её истинностное значение при всех возможных данных?
Загрузка содержимого…