Защо ни трябват цикли
Представи си: трябва да изведеш числата от 1 до 100. Без цикли ще трябва да напишеш 100 реда Console.WriteLine 🙃. Цикълът ти позволява да опишеш „повтаряй това действие, докато…", а компютърът ще го направи вместо теб.
Анатомия на цикъла
Всеки цикъл има три части: инициализация (начало), условие (докога да продължава) и обновяване (как се променя след всяка итерация). В различните видове те се пишат по различен начин.
Цикълът 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);| while | do-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; }.