Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 1 · Урок 6

Цикли (for, while, do-while)

Как да накараме програмата да повтаря действия. Различни видове цикли, контрол с break и continue, типични задачи.

Защо ни трябват цикли

Представи си: трябва да изведеш числата от 1 до 100. Без цикли ще трябва да напишеш 100 реда Console.WriteLine 🙃. Цикълът ти позволява да опишеш „повтаряй това действие, докато…", а компютърът ще го направи вместо теб.

Анатомия на цикъла

Всеки цикъл има три части: инициализация (начало), условие (докога да продължава) и обновяване (как се променя след всяка итерация). В различните видове те се пишат по различен начин.

стартинициализацияусловие?falseкрайtrueтялообновяване
Фиг. 1 — Общата схема на цикъл: повтаряме тялото, докато условието е true

Цикълът for — когато знаеш колко пъти

Най-използваният цикъл, когато броят на повторенията е известен.

for (инициализация; условие; обновяване)
{
    // тяло на цикъла
}

Класически пример — числата от 1 до 10:

for (int i = 1; i <= 10; i++)
{
    Console.WriteLine(i);
}

Ред по ред какво се случва:

  • int i = 1 — стартираме брояча от 1.
  • i <= 10 — продължаваме, докато i е ≤ 10.
  • i++ — след всяка итерация увеличаваме с 1.
  • Тялото се изпълнява общо 10 пъти.

Варианти

// От 10 до 1 (надолу)
for (int i = 10; i >= 1; i--)
{
    Console.WriteLine(i);
}

// През 2 (само четни)
for (int i = 0; i <= 20; i += 2)
{
    Console.WriteLine(i);
}

// Само нечетни от 1 до 99
for (int i = 1; i <= 99; i += 2)
{
    Console.WriteLine(i);
}

Цикълът while — докато е истина

Когато не знаеш предварително колко пъти ще се повтори, а имаш условие за продължение:

while (условие)
{
    // тяло
}
// Чете числа, докато потребителят не въведе 0
int n;
do
{
    Console.Write("Число (0 за край): ");
    n = int.Parse(Console.ReadLine());
    if (n != 0) Console.WriteLine($"Получих {n}");
} while (n != 0);

Безкраен цикъл

Ако забравиш да промениш променливата от условието, цикълът никога няма да спре! Класическа грешка:

int i = 0;
while (i < 10)
{
    Console.WriteLine(i);
    // забравено i++ — безкраен цикъл!
}

do-while — поне веднъж

Същият като while, но условието се проверява в края. Тялото винаги се изпълнява поне веднъж.

do
{
    // тяло
} while (условие);   // ← забележи ;

Типичен случай — меню, което показваме поне веднъж:

int choice;
do
{
    Console.WriteLine("1. Нова игра");
    Console.WriteLine("2. Изход");
    Console.Write("Избор: ");
    choice = int.Parse(Console.ReadLine());
} while (choice != 2);
whiledo-while
Кога се проверява условиетоВ началотоВ края
Минимален брой изпълнения на тялото0 пъти1 път
Кога се ползваМоже изобщо да не се изпълниВинаги поне веднъж (меню, въвеждане)

break и continue — контрол отвътре

break — прекратяване

Излиза веднага от цикъла, дори условието още да е true.

for (int i = 1; i <= 100; i++)
{
    if (i == 50)
    {
        Console.WriteLine("Стигнах до 50, спирам.");
        break;   // ← цикълът приключва
    }
    Console.WriteLine(i);
}

continue — пропусни тази итерация

Прескача до следващата итерация, без да изпълни остатъка от тялото.

// Извежда само нечетните числа
for (int i = 1; i <= 10; i++)
{
    if (i % 2 == 0) continue;   // ← пропусни четните
    Console.WriteLine(i);
}
// Резултат: 1 3 5 7 9

Типични задачи с цикли

Сума на числата от 1 до n

int n = 100;
int sum = 0;

for (int i = 1; i <= n; i++)
{
    sum += i;
}

Console.WriteLine(sum);   // 5050

Факториел

int n = 5;
long fact = 1;

for (int i = 2; i <= n; i++)
{
    fact *= i;
}

Console.WriteLine(fact);   // 120 = 1·2·3·4·5

Брой цифри в число

int n = 12345;
int count = 0;

while (n > 0)
{
    n /= 10;       // махаме последната цифра
    count++;
}

Console.WriteLine(count);   // 5

Сума на цифрите

int n = 729;
int sum = 0;

while (n > 0)
{
    sum += n % 10;   // последната цифра
    n /= 10;         // махаме я
}

Console.WriteLine(sum);   // 18 = 7+2+9

Съвет

Комбинацията n % 10 (последна цифра) и n /= 10 (изхвърляне на последна цифра) се среща постоянно при задачи с числа. Запомни я като шаблон.

Вложени цикли — таблица за умножение

for (int i = 1; i <= 5; i++)
{
    for (int j = 1; j <= 5; j++)
    {
        Console.Write($"{i * j,4}");   // ,4 = широчина 4 знака
    }
    Console.WriteLine();   // нов ред след всяка вътрешна итерация
}

Вложените цикли ще ни трябват много за двумерни масиви и подреждания.

Кога кой цикъл

  • for — броя на повторенията е известен (от 1 до n, обхождане на масив с индекс).
  • while — продължаваме, докато условие е истина; броят не е ясен предварително.
  • do-while — както while, но искаме поне едно изпълнение (меню, въвеждане).

Какво трябва да запомниш

  • Циклите имат три части: инициализация, условие, обновяване.
  • for — известен брой; while — докато условие; do-while — винаги поне веднъж.
  • break излиза от цикъла, continue прескача към следващата итерация.
  • Внимавай за безкрайни цикли — увери се, че условието някога ще стане false.
  • Шаблон за работа с цифри: while (n > 0) { … n % 10 …; n /= 10; }.