⚙️ C++

Цикл for в C++17: подробное руководство

Цикл for: когда нужно повторить действие много раз

Введение: зачем нужен цикл?

Представь, что тебе нужно написать на доске 100 раз фразу «Я молодец». Можно писать руками 100 раз — это долго и скучно. А можно сказать компьютеру: «Повтори эту фразу 100 раз», и он сделает это за секунду. Именно так работает цикл for — это команда, которая заставляет программу повторять одно и то же действие нужное количество раз.

Циклы встречаются везде: в играх (персонаж бежит 10 шагов), в калькуляторах (сложить 5 чисел), в банкоматах (попросить ввести пароль 3 раза). Без циклов программирование было бы очень утомительным.

Основной синтаксис цикла for

В C++17 цикл for выглядит так:

for (начало; условие; шаг) {
    // код, который повторяется
}

Разберём по частям:

  • начало — с чего начинаем (например, int i = 0 — счётчик равен 0)
  • условие — пока оно верно, цикл работает (например, i < 5 — пока i меньше 5)
  • шаг — что происходит после каждого повторения (например, i++ — увеличиваем i на 1)

Пример — выведем числа от 0 до 4:

#include <iostream>
using namespace std;

int main() {
    for (int i = 0; i < 5; i++) {
        cout << i << " ";
    }
    return 0;
}
// Вывод: 0 1 2 3 4

Как это работает по шагам:

  1. Создаётся переменная i = 0
  2. Проверяется условие: 0 < 5 — true, заходим в тело цикла
  3. Печатаем 0
  4. Выполняем шаг: i++ — теперь i = 1
  5. Снова проверка: 1 < 5 — true, печатаем 1
  6. И так до тех пор, пока i не станет равно 5. Тогда условие 5 < 5 — false, цикл заканчивается.

Разбор типичных задач

Задача 1. Лифт. Вы зашли в лифт на нулевом этаже и нажали кнопку 7-го этажа. Дисплей показывает каждый этаж, мимо которого проезжает лифт.

#include <iostream>
using namespace std;

int main() {
    int этаж;
    cout << "Какой этаж вам нужен? ";
    cin >> этаж;
    
    for (int i = 0; i <= этаж; i++) {
        cout << "Проезжаем этаж " << i << endl;
    }
    cout << "Приехали!" << endl;
    return 0;
}
// Ввод: 5
// Вывод:
// Проезжаем этаж 0
// Проезжаем этаж 1
// Проезжаем этаж 2
// Проезжаем этаж 3
// Проезжаем этаж 4
// Проезжаем этаж 5
// Приехали!

Задача 2. Банкомат. Банкомат просит повторить фразу «Безопасность превыше всего» 3 раза.

#include <iostream>
using namespace std;

int main() {
    int количество;
    cout << "Сколько раз повторить фразу? ";
    cin >> количество;
    
    for (int i = 0; i < количество; i++) {
        cout << "Безопасность превыше всего" << endl;
    }
    return 0;
}
// Ввод: 3
// Вывод:
// Безопасность превыше всего
// Безопасность превыше всего
// Безопасность превыше всего

Задача 3. Кибербезопасность. Нужно вывести сообщение «Проверка системы...» 5 раз, а в конце — «Система чиста!».

#include <iostream>
using namespace std;

int main() {
    int вирусов;
    cout << "Сколько вирусов нужно проверить? ";
    cin >> вирусов;
    
    for (int i = 1; i <= вирусов; i++) {
        cout << "Проверка вируса №" << i << "... Обнаружен!" << endl;
    }
    cout << "Все вирусы удалены!" << endl;
    return 0;
}
// Ввод: 3
// Вывод:
// Проверка вируса №1... Обнаружен!
// Проверка вируса №2... Обнаружен!
// Проверка вируса №3... Обнаружен!
// Все вирусы удалены!

Частые ошибки новичков

Ошибка 1: Бесконечный цикл. Забыли изменить счётчик — условие всегда true.

// НЕПРАВИЛЬНО!
for (int i = 0; i < 5; ) {  // забыли i++
    cout << i;
}

Ошибка 2: Неправильное условие. Хотели 5 раз, а написали i <= 5 — получится 6 раз (0,1,2,3,4,5).

Ошибка 3: Путаница с нумерацией. Если нужно повторить ровно N раз, удобно писать for (int i = 0; i < N; i++).

Ошибка 4: Точка с запятой после скобки.

// НЕПРАВИЛЬНО!
for (int i = 0; i < 5; i++); {  // точка с запятой — тело цикла пустое!
    cout << "Привет";
}

Итоговый пример: День рождения в школе

Ты принёс 20 конфет и хочешь угостить каждого одноклассника по одной конфете. Сколько конфет останется, если в классе 24 человека? Напишем программу, которая показывает, как раздаются конфеты.

#include <iostream>
using namespace std;

int main() {
    int конфет = 20;
    int учеников;
    
    cout << "Сколько учеников в классе? ";
    cin >> учеников;
    
    cout << "Начинаем раздавать конфеты!" << endl;
    
    for (int i = 1; i <= учеников; i++) {
        if (конфет > 0) {
            cout << "Ученик №" << i << " получает конфету. Осталось: " << конфет - 1 << endl;
            конфет--;
        } else {
            cout << "Ученик №" << i << " не получил конфету — они закончились!" << endl;
        }
    }
    
    cout << "Раздача завершена!" << endl;
    return 0;
}
// Ввод: 24
// Вывод (сокращённый):
// Начинаем раздавать конфеты!
// Ученик №1 получает конфету. Осталось: 19
// ...
// Ученик №20 получает конфету. Осталось: 0
// Ученик №21 не получил конфету — они закончились!
// ...
// Ученик №24 не получил конфету — они закончились!
// Раздача завершена!

В этом примере мы видим, как цикл for помогает обработать каждого ученика по очереди. Счётчик i идёт от 1 до количества учеников, и для каждого мы проверяем, остались ли конфеты.

Подведём итоги

  • Цикл for повторяет код заданное количество раз
  • Состоит из трёх частей: начало, условие, шаг
  • Счётчик обычно называют i (от слова index)
  • Чтобы повторить N раз, пишем: for (int i = 0; i < N; i++)
  • Не забывай про шаг, иначе цикл станет бесконечным

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