Код
#Руководства

If-else в С++, ветвление и логические операции: 3-я часть гайда по языку программирования

Разбираемся, как сделать программу на C++ полезнее, чем обычный калькулятор.

 vlada_maestro / shutterstock

Это третья часть из серии «Глубокое погружение в C++». В прошлый раз мы научились работать с данными: переменными, константами и операциями с ними. Сегодня поговорим о более сложных аспектах языка.

Полезные программы умеют выполнять различные инструкции в зависимости от обстоятельств. Например, браузер отображает сайт, если всё успешно загрузилось, или сообщает об ошибке, если что-то пошло не так. Это называется ветвлением.

Ветвление в программе может быть таким:

Нет ни одной IT-сферы, где не нужно проверять какие-то условия, чтобы выполнить определённые действия: от робототехники до игр. Давайте разбираться, что такое условные конструкции, какими они бывают и как ими пользоваться.

Логические операции в C++

Есть тип данных bool (булев тип), в котором хранится значение либо истина, либо ложь. Благодаря ему и возможно ветвление.

Чтобы поместить в переменную булева типа какое-то значение, мы можем самостоятельно написать его (true или false) или ввести какое-либо логическое утверждение:

  • число a больше числа b;
  • имя пользователя — Игорь;
  • сегодня четверг и так далее.

Дальше компьютер проверяет правдивость такого утверждения и возвращает результат.

Для написания таких утверждений необходимы логические операторы:

  • > — больше;
  • < — меньше;
  • == — равно;
  • ! = — не равно;
  • >= — больше или равно;
  • <= — меньше или равно.

Вот несколько примеров:

bool result = 5 > 6; //false
result = 5 < 6; //true
result = 5 == 6; //false
result = 5 != 6; //true

При попытке вывести значение переменной result программа выведет 1 или 0.

ЗаданиеПопробуйте самостоятельно написать несколько логических утверждений и посмотреть, что покажет программа.

Конструкция if

Условная конструкция if позволяет выполнять инструкции только в том случае, если данное логическое утверждение верно. Записывается эта конструкция так:

После того как программа проверит утверждение, она выполнит (или не выполнит) всё, что написано внутри фигурных скобок. Вот пример программы с ветвлением:

int a = 5;
int b = 6;

if (a > b)
{
    std::cout << "a is bigger than b \n";
}

if (a < b)
{
    std::cout << "b is bigger than a \n";
}

if (a == b)
{
    std::cout << "a equals b \n";
}

Программа работает корректно, но такой код сложно читать из-за большого количества условных конструкций. Чтобы упростить запись, можно использовать оператор else (иначе).

if (a > b)
{
    std::cout << "a is bigger than b \n";
}
else
{
    std::cout << "a is not bigger than b \n";
}

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

Если нужно проверить несколько условий, то воспользуемся оператором else if.

Программа сначала проверит первое условие и, если оно ложно, будет проверять следующие за ним else if. Если ни одно из условий не было верным, выполняются инструкции внутри else, поэтому оно всегда должно стоять в конце.

Вы можете размещать условные конструкции внутри других условных конструкций:

if(a > b)
{
    if(a > 100)
    {
   	 //Какие-то инструкции
    }
    else
    {
   	 //Какие-то инструкции
    }
}

Есть и более короткие варианты записи. Например, если должна быть выполнена только одна инструкция, то фигурные скобки лучше опустить:

if(a == 5)
    std::cout << "a == 5 \n";
else
    std::cout << "a != 5 \n";

Запись можно сократить ещё сильнее, если вы используете условие, чтобы указать значение для переменной:

int result = 2 > 1 ? 1 : 0;

Получается запись вида:

переменная = условие ? значение, если условие истинно : значение, если условие ложно;

Задание Попробуйте написать как можно больше условных конструкций, перед тем как продолжать чтение статьи, — эта тема очень важна.

Булева алгебра

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

Такие условия называются сложными, а для их проверки применяется булева алгебра. В C++ для этого есть следующие операторы:

  • & & — логическое «И» или логическое умножение (конъюнкция). Оператор И возвращает истину, если верны оба утверждения.
  • || — логическое «ИЛИ» или логическое сложение (дизъюнкция). Оператор ИЛИ возвращает истину, если верно хотя бы одно утверждение.
  • ! — логическое отрицание. Возвращает истину, если утверждение ложно.

Вот простая таблица, в которой показаны вводные данные и результаты их логических умножений и сложений:

A B && (И) || (ИЛИ)
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1

С оператором НЕ всё ещё проще:

A !A (НЕ A)
1 0
0 1

Вот несколько примеров использования таких операторов:

//Проверяем, чтобы денег было больше или равно цене, а также чтобы товар был в наличии
bool canBuy = money >= price && goodsLeft > 0;

//Чтобы убедиться, что человек может дышать, проверяем, что он не мёртв
bool canBreath = !isDead;

//Запрещаем доступ к сайту, если человек забанен или если проводятся технические работы
bool forbidAccess = isBanned || techWorks;

Также вы можете использовать скобки:

bool goodChoice = (a == 1 || a == 2) && b != 3;

Конструкция switch

Если вам нужно проверить какую-то переменную на определённое значение, то лучше использовать конструкцию switch. С её помощью превращаем такой код:

if(a == 1)
{}
else if(a == 2)
{}
else if(a == 3)
{}
else if(a == 4)
{}
else
{}

В такой:

switch(a)
{
    case 1:
   	 //...
   	 break;

    case 2:
   	 //...
   	 break;

    case 3:
   	 //...
   	 break;

    case 4:
   	 //...
   	 break;

    default:
   	 //...
}

Вместо утверждения вы передаёте в switch переменную и проверяете значение. Далее с помощью оператора case обозначаются все значения, для которых нужно выполнить какое-то действие.

В конце каждого case должно стоять слово break — оно говорит компилятору, что это конец инструкции. Аналогом else в switch служит default, и после него break уже не нужен.

Такие конструкции применяются, например, в работе с выпадающими списками.

Заключение

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

В следующей статье мы на практике разберёмся, как работать с пользовательским вводом, и будем активно использовать операторы if и switch.

Научитесь: Профессия Разработчик на C++ с нуля Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована