Введение: Почему компьютеры такие умные?
Привет, юный программист! 👋 Сегодня мы раскроем один из главных секретов программирования. Задумывался ли ты, как компьютер понимает, что делать в разных ситуациях? Как игра решает, выиграл ты или проиграл? Как калькулятор понимает, что на 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;
}
Как это работает?
- Программа запрашивает возраст
- Проверяет условие
age >= 18 - Если возраст 18 или больше — выводит первое сообщение
- Иначе — выводит второе
Операторы сравнения
В условиях мы используем специальные значки для сравнения:
>— больше<— меньше>=— больше или равно<=— меньше или равно==— равно (внимание: два знака равно!)!=— не равно
Важно! Один знак = — это присваивание, а два == — сравнение. Не путай!
Пример: чётное или нечётное?
#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;
}
Как это работает:
- Сначала проверяется первое условие
- Если оно ложно — проверяется второе
- И так далее, пока не найдётся истинное
- Если ни одно не подошло — выполняется 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;
}
Разбор по шагам:
int i = 1— создаём счётчик и даём ему начальное значениеi <= 5— условие: пока i меньше или равно 5, цикл работаетi++— после каждого шага увеличиваем i на 1- Тело цикла выполняется для 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для случайного выбора компьютера - Камень бьёт ножницы, ножницы бьют бумагу, бумага бьёт камень
- Веди счёт с помощью переменных
Удачи! 🎉 Помни: программирование — это как конструктор. Сначала собираешь простые детали (условия и циклы), а потом строишь из них целые миры!