Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Философия программирования на C++ Выпуск 12. Условия 3


Добрый день всем, кто с нами!

Сегодня мы расскажем, что еще важно знать об условиях.

Итак, в прошлой программе мы по введенному пользователем числу определяли, что должна делать программа. И добавили несколько условий, которые проверяют, что пользователь ввел правильное число.

Сегодня мы сделаем то же самое, но теперь, если пользователь ввел что-то неправильно, мы не будем выводить ему результат 0, а просто сообщим, что он ввел неверное число. И вот код, который это делает:

#include <iostream>

using namespace std;

int main() {
    // Сначала все идет, как в прошлом выпуске
    int a = 0;
    int b = 0;
    int action = 0;
    cout << "1. + Sum" << endl;  // 1 - сложить
    cout << "2. * Multiply" << endl;  // 2 - умножить
    cout << "3. / Divide"
<< endl;  // 3 - разделить
    cout << "4. - Sub" 
<< endl;  // 4 - вычесть
    cout << "Please, enter your action: ";
    cin >> action;
    if (action <= 0 || action >= 5) {  // Если action меньше либо равно 0 ИЛИ больше либо равно 5
        // То выводим пользователю сообщение об ошибке и...
        cout << "You entered: " << action << ", you can enter only 1, 2, 3 or 4" << endl;
        return 0;  // Выходим из программы!
    }
    // Если пользователь ввел неправильное число, то этот код выполняться НЕ БУДЕТ.
    cout << "Enter two numbers: ";
    cin >> a >> b;
    float result = 0.;
    if (1 == action)  // А здесь пишем сначала число, почему - см. ниже
        result = a + b;
    if (2 == action)
        result = a * b;
    if (3 == action) {
        // А сюда мы добавим проверку, что число b не равно нулю!
        if (b != 0) {  // Если b не равно нулю, то просто делим a на b
            result = a / b;
        } else { // Иначе (то есть если b все-таки равно нулю) выводим предупреждение пользователю
            cout << "You cannot divide by 0" << endl;
            return 0;  // Если делим на ноль - тоже выходим из программы
        }
    }
    if (4 == action)
        result = a - b;
    // Теперь эта строчка выведется только при корректном выбранном действии!
    cout << "Result: " << result << endl;  // Выводим результат
}

Разберем программу. Начало нам знакомо вплоть до первого условия. Во-первых, появились новые условия >= и <=. Это проверка на то, что число больше или равно того, что стоит справа (или меньше или равно соответственно). Например, "10 >= 9" - верное условие, поскольку 10 больше 9. Но и "9 >= 9" тоже верное, поскольку 9 равно 9. А вот "10 <= 9" - уже неправильное условие (оно даст false, ложь - надеюсь, вы еще помните что это), поскольку 10 ни меньше, ни равно 9.

Кроме этого здесь так называемое составное условие. Мы добавили оператор ИЛИ (|| - две вертикальные палочки), который соединяет два условия. Он дает истину (true) в том случае, если выполнится ХОТЯ БЫ одно из условий слева и справа от него. В остальных случаях - ложь (false) и составное условие не выполнится.

В данном примере, если пользователь введет число меньше либо равное 0 ИЛИ больше либо равное 5 (то есть как раз не 1-4), то сработает либо левое условие, либо правое.

Например, пользователь ввел 10. Тогда условие "action <= 0" вернет false, поскольку "10 <= 0" очевидно ложно, а "action >= 5" вернет true. Поэтому оператор || (ИЛИ) вернет нам true, поскольку одно из условий сработало. В следующем выпуске мы подробнее рассмотрим составные операторы условий.

Следующее новое в этой программе - это оператор return. Он позволяет завершить работу текущей функции (да-да, помните, что программа работает в функции main?). Оператор return тут же завершает работу функции, а значит и программа дальше не выполняется.

Число ноль справа от return означает значение, которое функция возвращает. Подробнее о них - в выпусках, посвященных функциям. Пока вам достаточно запомнить, что внутри функции main код 0 означает "успешное выполнение программы", а остальные - неуспешное (с ошибкой). Мы использовали везде 0 только потому, что как правило для вас безразлично, успешно ли завершилась программа.

Идем дальше. Теперь рассмотрим условие, в котором пользователь ввел число 3. Если пользователь ввел 3, то выполняться будет блок внутри этого условия. А внутри него - еще одно условие! Да, так можно делать, вложенность условий может быть бесконечной. Внутри условия можно засовывать еще много условий.

Итак, пользователь выбрал действие 3 - деление. Поскольку делить на 0 математика не позволяет, то нам необходимо проверить, что пользователь не пытается разделить на 3 (иначе мы не будем знать, какой результат возвращать). Поэтому мы пишем еще одно новое для вас условие - "!=" (не равно). Читается так: если b НЕ РАВНО 0, то... условие истинно. Поэтому, если b не равно нулю, мы просто делим на него число a. Но что делать, если оно все-таки равно нулю? На этот случай есть еще одно ключевое слово - else. Оно позволяет написать блок кода для случая, когда условие НЕ выполнилось (вернуло false). То есть когда не выполнится условие, что b не равно нулю (то есть когда b будет все-таки равно нулю - дада, немного запутанно, но я в вас верю), мы выводим снова предупреждение пользователю и - выходим из программы!

Кстати, else тоже можно писать без фигурных скобочек {} - но только если внутри него всего одна команда.

Выпуск получился большим и тяжелым. В следующем выпуске мы подведем итоги по условиям и рассмотрим более сложные составные условия. В этом месте понадобится знание дискретной математики. Я бы рекомендовал ее поизучать - это очень полезный раздел математики. Мы будем ее проходить, но не вдаваясь в теоретические подробности.

А на сегодня все, всем спасибо, что вы с нами! Успехов в изучении программирования! 



В избранное