C++ Курс

C++: условия и циклы

Самоучитель Python 3, собранный из материалов данного сайта.Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Введение: Почему компьютеры такие умные?

Привет, юный программист! 👋 Сегодня мы раскроем один из главных секретов программирования. Задумывался ли ты, как компьютер понимает, что делать в разных ситуациях? Как игра решает, выиграл ты или проиграл? Как калькулятор понимает, что на 0 делить нельзя?

Всё это возможно благодаря двум мощным инструментам: условиям и циклам. Представь, что ты — капитан космического корабля. Условия — это твои решения: «Если топлива мало, летим на заправку. Иначе — продолжаем полёт». А циклы — это повторяющиеся действия: «Повторять проверку систем каждые 5 минут, пока не долетим до Марса».

Сегодня мы научимся программировать такие решения и повторения на C++. Поехали! 🚀

Часть 1: Условные операторы — if и else

Что такое условие?

В жизни мы постоянно принимаем решения на основе условий. Например:

  • Если на улице дождь, то беру зонт.
  • Если получил пятёрку, то мама радуется, иначе — придётся учить уроки.

В C++ это выглядит так же логично! Базовый синтаксис:

if (условие) {
    // код, который выполнится, если условие истинно
} else {
    // код, который выполнится, если условие ложно
}

Первый пример: проверка возраста

Напишем программу, которая проверяет, можно ли человеку смотреть фильм с рейтингом 18+:

#include <iostream>
using namespace std;

int main() {
    int age;
    cout << "Сколько тебе лет? ";
    cin >> age;
    
    if (age >= 18) {
        cout << "Добро пожаловать на фильм!" << endl;
    } else {
        cout << "Извини, тебе ещё рано :(" << endl;
    }
    
    return 0;
}

Как это работает?

  1. Программа запрашивает возраст
  2. Проверяет условие age >= 18
  3. Если возраст 18 или больше — выводит первое сообщение
  4. Иначе — выводит второе

Операторы сравнения

В условиях мы используем специальные значки для сравнения:

  • > — больше
  • < — меньше
  • >= — больше или равно
  • <= — меньше или равно
  • == — равно (внимание: два знака равно!)
  • != — не равно

Важно! Один знак = — это присваивание, а два == — сравнение. Не путай!

Пример: чётное или нечётное?

#include <iostream>
using namespace std;

int main() {
    int number;
    cout << "Введи число: ";
    cin >> number;
    
    if (number % 2 == 0) {
        cout << "Это чётное число!" << endl;
    } else {
        cout << "Это нечётное число!" << endl;
    }
    
    return 0;
}

Оператор % (остаток от деления) — наш лучший друг. Если число делится на 2 без остатка — оно чётное!

Логические операторы: И, ИЛИ, НЕ

Иногда нужно проверить сразу несколько условий. Для этого есть логические операторы:

  • && — И (оба условия должны быть истинны)
  • || — ИЛИ (хотя бы одно условие истинно)
  • ! — НЕ (отрицание)

Пример из жизни: «Если за окном идёт дождь И нет зонта, то я промокну».

Код:

#include <iostream>
using namespace std;

int main() {
    bool isRaining = true;
    bool hasUmbrella = false;
    
    if (isRaining && !hasUmbrella) {
        cout << "Ты промокнешь! Возьми зонт!" << endl;
    } else if (isRaining && hasUmbrella) {
        cout << "Дождь не страшен, у тебя есть зонт!" << endl;
    } else {
        cout << "Погода отличная!" << endl;
    }
    
    return 0;
}

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

Когда нужно проверить много условий подряд, используем else if:

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "Введи количество баллов (0-100): ";
    cin >> score;
    
    if (score >= 90) {
        cout << "Отлично! Ты гений!" << endl;
    } else if (score >= 70) {
        cout << "Хорошо! Но можно лучше." << endl;
    } else if (score >= 50) {
        cout << "Удовлетворительно. Подтяни знания." << endl;
    } else {
        cout << "Плохо. Нужно учить!" << endl;
    }
    
    return 0;
}

Как это работает:

  1. Сначала проверяется первое условие
  2. Если оно ложно — проверяется второе
  3. И так далее, пока не найдётся истинное
  4. Если ни одно не подошло — выполняется else

Часть 2: Циклы — повторение — мать учения

Зачем нужны циклы?

Представь, что тебе нужно написать «Я люблю программировать» 100 раз. Писать 100 строк кода? Нет, это скучно! Циклы делают повторение за нас.

В C++ есть три вида циклов: for, while и do-while. Каждый подходит для своей ситуации.

Цикл for — когда знаешь, сколько раз повторять

Цикл for используют, когда заранее известно количество повторений.

for (начало; условие; шаг) {
    // тело цикла
}

Пример: выведем числа от 1 до 5:

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 5; i++) {
        cout << i << " ";
    }
    cout << endl;
    
    return 0;
}

Разбор по шагам:

  1. int i = 1 — создаём счётчик и даём ему начальное значение
  2. i <= 5 — условие: пока i меньше или равно 5, цикл работает
  3. i++ — после каждого шага увеличиваем i на 1
  4. Тело цикла выполняется для i = 1, 2, 3, 4, 5

Цикл while — «Пока верно условие»

Цикл while повторяется, пока условие истинно. Используется, когда неизвестно точное количество повторений.

while (условие) {
    // тело цикла
}

Пример: игра «Угадай число»:

#include <iostream>
using namespace std;

int main() {
    int secret = 7;
    int guess = 0;
    
    cout << "Угадай число от 1 до 10: ";
    cin >> guess;
    
    while (guess != secret) {
        cout << "Не угадал! Попробуй ещё: ";
        cin >> guess;
    }
    
    cout << "Поздравляю! Ты угадал!" << endl;
    
    return 0;
}

Цикл будет работать, пока игрок не введёт правильное число. Сколько попыток понадобится — неизвестно!

Цикл do-while — «Сделай, потом проверь»

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

do {
    // тело цикла
} while (условие);

Пример: меню с повторным показом:

#include <iostream>
using namespace std;

int main() {
    int choice;
    
    do {
        cout << "Меню:" << endl;
        cout << "1. Начать игру" << endl;
        cout << "2. Настройки" << endl;
        cout << "3. Выход" << endl;
        cout << "Выбери: ";
        cin >> choice;
        
        if (choice == 1) {
            cout << "Игра началась!" << endl;
        } else if (choice == 2) {
            cout << "Открываем настройки..." << endl;
        }
    } while (choice != 3);
    
    cout << "Пока!" << endl;
    
    return 0;
}

Меню будет показываться снова и снова, пока пользователь не выберет «Выход».

Важные команды: break и continue

break — немедленно выходит из цикла:

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;  // цикл остановится на 5
    }
    cout << i << " ";
}
// Вывод: 1 2 3 4

continue — пропускает текущий шаг и переходит к следующему:

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;  // пропускаем 3
    }
    cout << i << " ";
}
// Вывод: 1 2 4 5

Часть 3: Вложенные конструкции

Условия внутри циклов

Можно комбинировать условия и циклы. Например, вывести только чётные числа от 1 до 10:

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            cout << i << " - чётное!" << endl;
        }
    }
    
    return 0;
}

Циклы внутри условий

#include <iostream>
using namespace std;

int main() {
    int choice;
    cout << "Сколько раз вывести приветствие? ";
    cin >> choice;
    
    if (choice > 0) {
        for (int i = 0; i < choice; i++) {
            cout << "Привет, мир! " << i+1 << endl;
        }
    } else {
        cout << "Некорректное число!" << endl;
    }
    
    return 0;
}

Вложенные циклы

Цикл внутри цикла — это мощно! Например, таблица умножения:

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 5; i++) {
        for (int j = 1; j <= 5; j++) {
            cout << i * j << "\t";
        }
        cout << endl;  // переход на новую строку
    }
    
    return 0;
}

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

Часть 4: Реальные примеры из жизни

Пример 1: Проверка пароля

#include <iostream>
#include <string>
using namespace std;

int main() {
    string password = "secret123";
    string input;
    int attempts = 0;
    
    do {
        cout << "Введи пароль: ";
        cin >> input;
        attempts++;
        
        if (input != password && attempts < 3) {
            cout << "Неверно! Осталось попыток: " << 3 - attempts << endl;
        }
    } while (input != password && attempts < 3);
    
    if (input == password) {
        cout << "Доступ разрешён!" << endl;
    } else {
        cout << "Доступ заблокирован!" << endl;
    }
    
    return 0;
}

Пример 2: Калькулятор с меню

#include <iostream>
using namespace std;

int main() {
    double a, b;
    int choice;
    
    do {
        cout << "\n=== Калькулятор ===" << endl;
        cout << "1. Сложение" << endl;
        cout << "2. Вычитание" << endl;
        cout << "3. Умножение" << endl;
        cout << "4. Деление" << endl;
        cout << "5. Выход" << endl;
        cout << "Выбери: ";
        cin >> choice;
        
        if (choice >= 1 && choice <= 4) {
            cout << "Введи два числа: ";
            cin >> a >> b;
            
            if (choice == 1) {
                cout << "Результат: " << a + b << endl;
            } else if (choice == 2) {
                cout << "Результат: " << a - b << endl;
            } else if (choice == 3) {
                cout << "Результат: " << a * b << endl;
            } else if (choice == 4) {
                if (b != 0) {
                    cout << "Результат: " << a / b << endl;
                } else {
                    cout << "На ноль делить нельзя!" << endl;
                }
            }
        }
    } while (choice != 5);
    
    cout << "Спасибо за использование калькулятора!" << endl;
    
    return 0;
}

Пример 3: Игра «Угадай число» с подсказками

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(0));  // случайное число
    int secret = rand() % 100 + 1;  // от 1 до 100
    int guess;
    int attempts = 0;
    
    cout << "Я загадал число от 1 до 100. Угадай!" << endl;
    
    do {
        cout << "Твоя догадка: ";
        cin >> guess;
        attempts++;
        
        if (guess > secret) {
            cout << "Меньше!" << endl;
        } else if (guess < secret) {
            cout << "Больше!" << endl;
        } else {
            cout << "Поздравляю! Ты угадал за " << attempts << " попыток!" << endl;
        }
    } while (guess != secret);
    
    return 0;
}

Часть 5: Типичные ошибки и советы

Ошибка 1: Путаница между = и ==

// НЕПРАВИЛЬНО:
if (age = 18) {  // присваивание, а не сравнение!
    // ...
}

// ПРАВИЛЬНО:
if (age == 18) {  // сравнение
    // ...
}

Ошибка 2: Бесконечный цикл

// НЕПРАВИЛЬНО (забыли увеличить счётчик):
int i = 0;
while (i < 10) {
    cout << i;
    // i не меняется — цикл бесконечный!
}

// ПРАВИЛЬНО:
int i = 0;
while (i < 10) {
    cout << i;
    i++;  // увеличиваем счётчик
}

Ошибка 3: Точка с запятой после условия

// НЕПРАВИЛЬНО:
if (x > 5); {  // точка с запятой завершает условие
    cout << "Больше 5";
}

// ПРАВИЛЬНО:
if (x > 5) {
    cout << "Больше 5";
}

Практические задания

Теперь твоя очередь! Попробуй решить эти задачи самостоятельно. Не бойся ошибаться — на ошибках учатся!

Задание 1: Определитель времени суток

Напиши программу, которая запрашивает время (часы от 0 до 23) и выводит:

  • «Утро» — если от 6 до 11
  • «День» — если от 12 до 17
  • «Вечер» — если от 18 до 22
  • «Ночь» — в остальных случаях

Подсказка: используй else if для проверки диапазонов.

Задание 2: Таблица умножения для одного числа

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

Пример вывода для числа 5:

5 x 1 = 5
5 x 2 = 10
...
5 x 10 = 50

Подсказка: используй цикл for.

Задание 3: Игра «Камень, ножницы, бумага»

Напиши игру против компьютера:

  • Компьютер случайно выбирает 1 (камень), 2 (ножницы) или 3 (бумага)
  • Игрок вводит свой выбор
  • Программа определяет победителя
  • Игра продолжается, пока игрок не введёт 0 для выхода
  • В конце показать счёт: сколько раз выиграл игрок, компьютер и сколько было ничьих

Подсказки:

  • Используй rand() % 3 + 1 для случайного выбора компьютера
  • Камень бьёт ножницы, ножницы бьют бумагу, бумага бьёт камень
  • Веди счёт с помощью переменных

Удачи! 🎉 Помни: программирование — это как конструктор. Сначала собираешь простые детали (условия и циклы), а потом строишь из них целые миры!