⚙️ C++

C++17 में for लूप: विस्तृत मार्गदर्शिका

Условия и циклы C++: if, switch, for, while с примерами

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

Условный оператор if/else

#include <iostream>
using namespace std;

int main() {
    // Простой if
    int temp = 22;
    if (temp > 20) {
        cout << "Тепло! Идём гулять." << endl;
    }
    
    // if-else
    int age = 16;
    if (age >= 18) {
        cout << "Вход разрешён." << endl;
    } else {
        cout << "Только с 18 лет. Ещё " << (18-age) << " лет." << endl;
    }
    
    // if-else if-else: множество вариантов
    int score = 75;
    if      (score >= 90) cout << "Отлично (A)" << endl;
    else if (score >= 80) cout << "Хорошо (B)" << endl;
    else if (score >= 70) cout << "Удовлетворительно (C)" << endl;
    else if (score >= 60) cout << "Посредственно (D)" << endl;
    else                   cout << "Неудовлетворительно (F)" << endl;
    
    // Логические операторы
    bool hasTicket = true, hasID = true;
    if (age >= 18 && hasTicket && hasID) {
        cout << "Добро пожаловать на концерт!" << endl;
    }
    
    return 0;
}

Тернарный оператор

// условие ? значение_если_true : значение_если_false
int a=15, b=28;
int max = (a > b) ? a : b;   // 28
string sign = (a > 0) ? "положительное" : "неположительное";

// В выводе
cout << "Максимум: " << ((a > b) ? a : b) << endl;

// Чётность
for (int i=1; i<=5; i++)
    cout << i << " — " << (i%2==0 ? "чётное" : "нечётное") << endl;

Оператор switch

#include <iostream>
using namespace std;

int main() {
    int day = 3;
    
    switch (day) {
        case 1: cout << "Понедельник" << endl; break;
        case 2: cout << "Вторник"     << endl; break;
        case 3: cout << "Среда"       << endl; break;
        case 4: cout << "Четверг"     << endl; break;
        case 5: cout << "Пятница"     << endl; break;
        case 6: cout << "Суббота"     << endl; break;
        case 7: cout << "Воскресенье" << endl; break;
        default: cout << "Неверный день" << endl;
    }
    
    // Несколько case → один блок
    int month = 4;
    int daysCount;
    switch (month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            daysCount = 31; break;
        case 4: case 6: case 9: case 11:
            daysCount = 30; break;
        case 2:
            daysCount = 28; break;
        default:
            daysCount = -1;
    }
    cout << "Дней в месяце: " << daysCount << endl; // 30
    
    // Switch со строками — через if/else (switch в C++ не поддерживает string напрямую)
    string cmd = "start";
    if      (cmd == "start") cout << "Запуск..." << endl;
    else if (cmd == "stop")  cout << "Остановка..." << endl;
    else                     cout << "Неизвестная команда" << endl;
    
    return 0;
}

Цикл for

#include <iostream>
using namespace std;

int main() {
    // Базовый for
    for (int i = 0; i < 5; i++) cout << i << " "; // 0 1 2 3 4
    cout << endl;
    
    // Обратный отсчёт
    for (int i = 10; i >= 1; i--) cout << i << " ";
    cout << "ПУСК!" << endl;
    
    // Шаг 2
    for (int i = 0; i <= 10; i += 2) cout << i << " "; // 0 2 4 6 8 10
    cout << endl;
    
    // Сумма 1..100 = 5050
    int sum = 0;
    for (int i = 1; i <= 100; i++) sum += i;
    cout << "Сумма 1..100 = " << sum << endl;
    
    // Числа Фибоначчи
    int fa=0, fb=1;
    cout << "Фибоначчи: ";
    for (int i=0; i<10; i++) {
        cout << fa << " ";
        int tmp = fa + fb; fa = fb; fb = tmp;
    }
    cout << endl; // 0 1 1 2 3 5 8 13 21 34
    
    // Таблица умножения
    cout << "
Таблица умножения:" << endl;
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= 9; j++) {
            cout << i*j;
            if (i*j < 10) cout << "   ";
            else if (i*j < 100) cout << "  ";
            else cout << " ";
        }
        cout << endl;
    }
    
    return 0;
}

Цикл while: игра "Угадай число"

#include <iostream>
#include <cstdlib>  // rand(), srand()
#include <ctime>    // time()
using namespace std;

int main() {
    // Инициализация генератора случайных чисел
    srand(time(nullptr));
    int secret = rand() % 100 + 1; // Случайное число 1..100
    
    int guess = 0;
    int attempts = 0;
    
    cout << "Угадайте число от 1 до 100!" << endl;
    
    while (guess != secret) {
        cout << "Ваш вариант: ";
        cin >> guess;
        attempts++;
        
        if (guess < secret) {
            cout << "Больше! ↑" << endl;
        } else if (guess > secret) {
            cout << "Меньше! ↓" << endl;
        } else {
            cout << "🎉 Правильно! Число было " << secret << endl;
            cout << "Попыток: " << attempts << endl;
        }
    }
    
    return 0;
}

Цикл do-while

#include <iostream>
using namespace std;

int main() {
    // do-while: выполнить СНАЧАЛА, ПОТОМ проверить
    int n = 0;
    do {
        cout << "n = " << n << endl;
        n++;
    } while (n < 3);
    
    // Классика: ввод с проверкой
    int age;
    do {
        cout << "Введите возраст (1-120): ";
        cin >> age;
        if (age < 1 || age > 120)
            cout << "Ошибка! Введите от 1 до 120.
";
    } while (age < 1 || age > 120);
    cout << "Принятый возраст: " << age << endl;
    
    return 0;
}

Range-based for (C++11): перебор коллекций

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

int main() {
    // Массив
    int nums[] = {1, 2, 3, 4, 5};
    int sum = 0;
    for (int n : nums) {  // Для каждого n в nums
        sum += n;
    }
    cout << "Сумма: " << sum << endl; // 15
    
    // Вектор
    vector<string> fruits = {"яблоко", "груша", "банан"};
    for (const string& f : fruits) {  // & для эффективности (без копирования)
        cout << "Фрукт: " << f << endl;
    }
    
    // Строка — тоже итерируемая
    string word = "Привет";
    for (char c : word) {
        cout << c << " "; // П р и в е т
    }
    cout << endl;
    
    // auto& для произвольного типа
    vector<int> squares = {1, 4, 9, 16, 25};
    for (auto& sq : squares) {
        cout << sq << " ";
    }
    cout << endl;
    
    return 0;
}

break и continue

#include <iostream>
using namespace std;

int main() {
    // break: выйти из цикла
    for (int i=0; i<10; i++) {
        if (i==5) { cout << "
Нашли 5!" << endl; break; }
        cout << i << " ";
    }
    // 0 1 2 3 4
    
    // continue: пропустить итерацию
    for (int i=0; i<10; i++) {
        if (i%2==0) continue; // пропускаем чётные
        cout << i << " "; // 1 3 5 7 9
    }
    cout << endl;
    
    // Поиск простого числа
    cout << "Простые числа до 50: ";
    for (int n=2; n<=50; n++) {
        bool prime = true;
        for (int d=2; d*d<=n; d++) {
            if (n%d==0) { prime=false; break; }
        }
        if (prime) cout << n << " ";
    }
    cout << endl;
    
    // FizzBuzz
    for (int i=1; i<=20; i++) {
        if      (i%15==0) cout << "FizzBuzz
";
        else if (i%3==0)  cout << "Fizz
";
        else if (i%5==0)  cout << "Buzz
";
        else              cout << i << "
";
    }
    
    return 0;
}

Практика: треугольник и паттерны

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    
    // Треугольник из звёздочек
    cout << "Треугольник:" << endl;
    for (int row=1; row<=n; row++) {
        for (int col=1; col<=row; col++) cout << "* ";
        cout << endl;
    }
    
    // Пирамида
    cout << "Пирамида:" << endl;
    for (int row=1; row<=n; row++) {
        for (int sp=n-row; sp>0; sp--) cout << " ";  // пробелы
        for (int star=1; star<=2*row-1; star++) cout << "*"; // звёздочки
        cout << endl;
    }
    
    // Шахматная доска
    cout << "Шахматная доска:" << endl;
    for (int i=0; i<8; i++) {
        for (int j=0; j<8; j++) cout << ((i+j)%2==0 ? "■ " : "□ ");
        cout << endl;
    }
    
    return 0;
}

Итого: что мы узнали

  • ✅ if / else if / else — ветвление программы
  • ✅ Тернарный оператор ? : — компактный if/else
  • ✅ switch: нужен break, иначе fall-through
  • ✅ for — цикл с известным числом итераций
  • ✅ while — условие проверяется ДО тела
  • ✅ do-while — условие проверяется ПОСЛЕ тела
  • ✅ Range-based for (auto& x : collection) — C++11, перебор коллекций
  • ✅ break — выход из цикла; continue — пропуск итерации