Введение: Почему программы должны уметь "думать"?
Представь, что ты играешь в компьютерную игру. Когда твой персонаж подбирает аптечку, здоровье увеличивается. Когда наступает ночь, монстры становятся сильнее. А когда ты нажимаешь пробел, персонаж прыгает. Всё это — примеры условий и циклов в действии! Программа постоянно проверяет: "Если игрок нажал пробел — прыгни", "Пока здоровье меньше 100 — восстанавливай".
В этом уроке мы научимся заставлять программы принимать решения и повторять действия. Это как научить робота думать: "Если на улице дождь — возьми зонт. Повторяй это каждое утро".
Часть 1: Условные конструкции — если, то, иначе
Что такое условие в программировании?
Условие — это вопрос, на который можно ответить только "да" (true) или "нет" (false). Например: "Сегодня 25 декабря?" или "У игрока больше 100 жизней?". В C# мы используем конструкцию if (если).
Аналогия из жизни: Ты подходишь к перекрёстку. Если горит зелёный — иди. Если красный — стой. Это и есть условие!
Простой if
Самый базовый вариант — проверяем одно условие:
int age = 14;
// Если возраст больше или равен 18
if (age >= 18)
{
Console.WriteLine("Ты можешь голосовать!");
}
// Этот код выполнится всегда, независимо от условия
Console.WriteLine("Программа завершена.");
Обрати внимание: фигурные скобки {} показывают, какой код относится к условию. Если условие истинно — выполняется код внутри скобок.
if-else (если-иначе)
Когда нужно сделать выбор из двух вариантов:
int temperature = -5;
if (temperature > 0)
{
Console.WriteLine("На улице тепло. Можно идти без куртки!");
}
else
{
Console.WriteLine("Холодно! Надень куртку и шапку.");
}
В этом примере: если температура больше 0 — выводится первое сообщение. Во всех остальных случаях (когда температура <= 0) — второе.
else if — когда вариантов много
В жизни редко бывает только два варианта. В C# можно проверять несколько условий подряд:
int score = 85;
if (score >= 90)
{
Console.WriteLine("Оценка: Отлично! Ты гений!");
}
else if (score >= 75)
{
Console.WriteLine("Оценка: Хорошо! Молодец!");
}
else if (score >= 50)
{
Console.WriteLine("Оценка: Удовлетворительно. Нужно подтянуть знания.");
}
else
{
Console.WriteLine("Оценка: Неудовлетворительно. Придётся пересдавать.");
}
Важно: порядок условий имеет значение! Программа проверяет их сверху вниз и останавливается на первом истинном. Если бы мы сначала проверили score >= 50, то для 85 баллов вывелось бы "Удовлетворительно", хотя 85 — это явно больше 75.
Логические операторы: И, ИЛИ, НЕ
Иногда нужно проверить сразу несколько условий. Для этого есть специальные операторы:
- && — И (оба условия должны быть истинны)
- || — ИЛИ (хотя бы одно условие истинно)
- ! — НЕ (отрицание, переворачивает true на false)
int age = 16;
bool hasParentConsent = true;
// И: нужно быть старше 18 И иметь согласие родителей
if (age >= 18 && hasParentConsent)
{
Console.WriteLine("Можно участвовать в соревнованиях!");
}
else
{
Console.WriteLine("Извините, участие запрещено.");
}
// ИЛИ: можно войти, если ты VIP ИЛИ если у тебя есть билет
bool isVIP = false;
bool hasTicket = true;
if (isVIP || hasTicket)
{
Console.WriteLine("Добро пожаловать на концерт!");
}
else
{
Console.WriteLine("Вход только по билетам или VIP-пропускам.");
}
// НЕ: если не холодно, идём гулять
bool isCold = false;
if (!isCold) // то же самое, что isCold == false
{
Console.WriteLine("Идём гулять в парк!");
}
Тернарный оператор — короткая запись
Для простых условий, где нужно выбрать одно из двух значений, есть сокращённая запись:
int number = 7;
string result = (number % 2 == 0) ? "чётное" : "нечётное";
Console.WriteLine($"Число {number} — {result}");
// Это то же самое, что:
string result2;
if (number % 2 == 0)
{
result2 = "чётное";
}
else
{
result2 = "нечётное";
}
Тернарный оператор работает так: условие ? значение_если_true : значение_если_false. Используй его только для простых случаев, чтобы код оставался читаемым.
Часть 2: Циклы — когда нужно повторять
Зачем нужны циклы?
Представь, что тебе нужно написать "Я люблю программировать" 100 раз. Писать 100 строк кода — это скучно и неэффективно. Циклы позволяют повторять действия автоматически. В C# есть три основных цикла: for, while и do-while.
Аналогия из жизни: Чистка зубов — это цикл. Ты повторяешь движение щёткой, пока не почистишь все зубы. Тик-так часов — бесконечный цикл. А приготовить 10 пельменей — цикл с известным количеством повторений.
Цикл for — когда знаешь количество повторений
Самый популярный цикл. Используется, когда точно знаешь, сколько раз нужно повторить действие.
// Выводим числа от 1 до 5
for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"Счёт: {i}");
}
// Результат:
// Счёт: 1
// Счёт: 2
// Счёт: 3
// Счёт: 4
// Счёт: 5
Разберём структуру цикла for:
- int i = 1; — инициализация (создаём счётчик и задаём начальное значение)
- i <= 5; — условие (цикл выполняется, пока условие истинно)
- i++ — шаг (что происходит после каждой итерации, здесь увеличение на 1)
Ещё примеры:
// Считаем от 10 до 1 (обратный отсчёт)
for (int i = 10; i > 0; i--)
{
Console.WriteLine(i);
}
Console.WriteLine("ПУСК!");
// Шаг больше 1: чётные числа от 2 до 10
for (int i = 2; i <= 10; i += 2)
{
Console.WriteLine($"Чётное: {i}");
}
// Сумма чисел от 1 до 100
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i; // то же самое, что sum = sum + i
}
Console.WriteLine($"Сумма от 1 до 100 = {sum}");
Цикл while — пока условие истинно
Используется, когда количество повторений заранее неизвестно. Цикл проверяет условие перед каждым выполнением.
// Игра: угадай число
Random random = new Random();
int secretNumber = random.Next(1, 101); // случайное число от 1 до 100
int guess = 0;
Console.WriteLine("Угадай число от 1 до 100!");
while (guess != secretNumber)
{
Console.Write("Твой вариант: ");
guess = int.Parse(Console.ReadLine());
if (guess < secretNumber)
{
Console.WriteLine("Слишком мало! Попробуй ещё.");
}
else if (guess > secretNumber)
{
Console.WriteLine("Слишком много! Попробуй ещё.");
}
}
Console.WriteLine("Поздравляю! Ты угадал!");
Важно: если условие изначально ложно, цикл не выполнится ни разу. В примере выше, если сразу ввести правильное число, цикл завершится.
Цикл do-while — выполни хотя бы раз
Отличие от while: условие проверяется после выполнения тела цикла. Поэтому код внутри do выполнится как минимум один раз.
// Пример: спрашиваем пользователя, хочет ли он продолжить
string answer;
do
{
Console.WriteLine("Ты в игре! Хочешь продолжить? (да/нет)");
answer = Console.ReadLine().ToLower();
}
while (answer == "да");
Console.WriteLine("Выход из игры.");
Здесь пользователь всегда увидит сообщение "Ты в игре!" хотя бы один раз, даже если сразу ответит "нет".
Вложенные циклы — цикл внутри цикла
Иногда нужно повторить действие в повторении. Например, таблица умножения:
// Таблица умножения от 1 до 5
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= 5; j++)
{
Console.Write($"{i * j,4}"); // {i*j,4} — выравнивание по ширине 4 символа
}
Console.WriteLine(); // переход на новую строку после каждой строки таблицы
}
// Результат:
// 1 2 3 4 5
// 2 4 6 8 10
// 3 6 9 12 15
// 4 8 12 16 20
// 5 10 15 20 25
Внешний цикл (i) отвечает за строки, внутренний (j) — за столбцы. Для каждой строки выполняется полный внутренний цикл.
break и continue — управление циклом
Иногда нужно прервать цикл досрочно или пропустить итерацию:
- break — немедленно завершает цикл
- continue — пропускает текущую итерацию и переходит к следующей
// break: ищем число 7 в массиве
int[] numbers = { 3, 8, 1, 7, 9, 2 };
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == 7)
{
Console.WriteLine($"Нашли 7 на позиции {i}!");
break; // выходим из цикла, дальше искать не нужно
}
}
// continue: выводим только чётные числа
for (int i = 1; i <= 10; i++)
{
if (i % 2 != 0) // если нечётное
{
continue; // пропускаем, переходим к следующему i
}
Console.WriteLine($"Чётное: {i}");
}
Часть 3: Практические задания
Теперь, когда ты изучил условия и циклы, попробуй решить эти задачи. Каждое задание проверяет разные навыки. Постарайся написать код самостоятельно, а потом сравни с решением.
Задание 1: Калькулятор оценок
Напиши программу, которая запрашивает у пользователя число от 0 до 100 и выводит буквенную оценку:
- 90-100: "A — Отлично!"
- 75-89: "B — Хорошо!"
- 50-74: "C — Удовлетворительно"
- 0-49: "D — Нужно подтянуть"
Если число вне диапазона 0-100, выведи сообщение об ошибке. Используй конструкцию if-else if-else.
Задание 2: Таблица умножения (любимое число)
Запроси у пользователя число. Выведи таблицу умножения для этого числа от 1 до 10. Используй цикл for. Пример для числа 7:
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
...
7 x 10 = 70
Дополнительно: спроси у пользователя, до какого числа выводить таблицу (например, до 15 вместо 10).
Задание 3: Игра "Угадай число" с подсказками
Напиши игру, где компьютер загадывает число от 1 до 100, а пользователь пытается угадать. Программа должна:
- Говорить "больше" или "меньше" после каждой попытки
- Считать количество попыток
- Если пользователь вводит число вне диапазона 1-100, выводить предупреждение и не засчитывать попытку
- После угадывания вывести: "Поздравляю! Ты угадал число X за Y попыток!"
Используй цикл while и условные конструкции.
Подсказка для всех заданий: не бойся разбивать задачу на маленькие шаги. Сначала проверь ввод данных, потом реализуй логику, потом добавь вывод.
Заключение
Сегодня ты научился самому главному — заставлять программы принимать решения и повторять действия. Условия и циклы — это основа любого алгоритма. Без них программы были бы просто списком команд, которые выполняются один раз от начала до конца.
Потренируйся на заданиях, а потом придумай свои примеры: например, программу, которая проверяет, можно ли сегодня идти гулять (по погоде и дню недели), или симулятор подбрасывания монетки (цикл до 10 орлов). Чем больше практики — тем быстрее ты научишься "мыслить как программист".
В следующем уроке мы познакомимся с массивами — способами хранить много данных в одной переменной. Увидимся!