Lekcja 6. Pętle (for, while, do-while, foreach)
PodstawowyPo co się tego uczymy?
Bez pętli powtórzenie tej samej operacji 100 razy wymagałoby napisania jej 100 razy z osobna. Pętle to jeden z najczęściej używanych elementów w każdym programie — od prostego licznika po przetwarzanie tysięcy rekordów z bazy danych.
Teoria
Pętla powtarza ten sam fragment kodu wielokrotnie, bez ręcznego przepisywania go za każdym razem. C# ma cztery rodzaje pętli, każdą do innego zastosowania.
for — gdy z góry wiesz, ILE RAZY coś powtórzyć:
for (int i = 0; i < 5; i++) { ... }
Składa się z trzech części: inicjalizacji (int i = 0, wykonana raz na starcie), warunku (i < 5, sprawdzanego przed każdym powtórzeniem) i kroku (i++, wykonywanego po każdym powtórzeniu).
while — gdy nie wiesz z góry, ile razy, ale znasz warunek zatrzymania:
while (warunek) { ... }
Warunek sprawdzany jest PRZED każdym wykonaniem — jeśli od razu jest fałszywy, pętla nie wykona się ani razu.
do-while — jak while, ale sprawdza warunek PO wykonaniu bloku — pętla wykona się przynajmniej RAZ, nawet jeśli warunek jest fałszywy od początku:
do { ... } while (warunek);
foreach — do przechodzenia po WSZYSTKICH elementach tablicy lub kolekcji (Lekcja 8), bez ręcznego liczenia indeksów:
foreach (var element in tablica) { ... }
break natychmiast przerywa całą pętlę. continue pomija resztę bieżącego powtórzenia i przechodzi od razu do następnego.
Schemat
for (inicjalizacja; warunek; krok) while (warunek) do { ... }
│ │ while (warunek)
├─ sprawdź warunek ──NIE──> koniec ├─ sprawdź ──NIE──> koniec │
│ │ │ │ wykonaj RAZ,
│ TAK │ TAK potem sprawdź
│ │ │ │ warunek
│ wykonaj blok │ wykonaj blok
│ │ │ │
└─── krok ──┘ └── wróć do warunku
Przykład z życia
Pasek postępu pobierania pliku w przeglądarce to w praktyce pętla while sprawdzająca w kółko "czy pobieranie już się skończyło?", aktualizując procent za każdym powtórzeniem.
Kod (C#)
using System;
class Program
{
static void Main()
{
// for - znana liczba powtórzeń
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("Powtórzenie numer " + i);
}
// while - dopóki warunek jest prawdziwy
int paliwo = 100;
while (paliwo > )
{
paliwo -= 25;
Console.WriteLine("Paliwo: " + paliwo);
}
// do-while - wykona się co najmniej raz
int probaLogowania = ;
do
{
probaLogowania++;
Console.WriteLine("Próba logowania numer " + probaLogowania);
} while (probaLogowania < 3);
// foreach - dla każdego elementu tablicy
string[] imiona = { "Ala", "Bartek", "Celina" };
foreach (string imie in imiona)
{
Console.WriteLine("Cześć, " + imie + "!");
}
}
}
Komentarz i wyjaśnienie kodu
Pętla do-while jest szczególnie przydatna przy "próbie logowania" czy dowolnym scenariuszu "zrób coś, potem sprawdź, czy powtórzyć" — chcesz, żeby kod wykonał się PRZYNAJMNIEJ RAZ, zanim w ogóle sprawdzisz warunek. foreach (string imie in imiona) automatycznie przechodzi przez KAŻDY element tablicy imiona, bez potrzeby ręcznego pilnowania indeksu jak w klasycznej pętli for.
Ćwiczenie samodzielne
Napisz pętlę for wypisującą liczby od 1 do 10, a następnie pętlę foreach wypisującą elementy tablicy trzech Twoich ulubionych filmów.
Plac zabaw — wypróbuj online
Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.
Zadania do pracy własnej
Napisz program obliczający sumę liczb od 1 do 100 za pomocą pętli
for.Napisz program symulujący odliczanie rakiety od 10 do 0 (pętla
while), a po dojściu do 0 wypisujący "START!".Napisz program "zgadnij liczbę": w tablicy zapisz z góry wylosowaną liczbę (np. 7) i trzy "próby" gracza (np. 5, 9, 7 — wpisane na sztywno w tablicy), a pętlą
foreachsprawdź kolejne próby, używającbreak, żeby przerwać pętlę od razu po trafieniu, i wypisz komunikat, po której próbie gracz zgadł.
Typowe błędy
Najpoważniejszy błąd to PĘTLA NIESKOŃCZONA — zapomnienie o zmianie zmiennej sterującej wewnątrz pętli while (np. brak paliwo -= 25;) sprawia, że warunek nigdy nie stanie się fałszywy i program "zawiesza się". Drugi błąd: pomylenie < z <= w warunku pętli for, co powoduje wykonanie o jedno powtórzenie za mało lub za dużo (tzw. błąd "off-by-one"). Trzeci: użycie do-while tam, gdzie warunek powinien być sprawdzony PRZED pierwszym wykonaniem — do-while zawsze wykona blok co najmniej raz, nawet gdy to niepożądane.
Nawiązanie do egzaminu zawodowego
To realizacja efektu INF.04.4.4 z podstawy programowej ("stosuje wyrażenia, instrukcje i biblioteki") w zakresie pętli — jednego z podstawowych elementów programowania strukturalnego, niezbędnego przy przetwarzaniu tablic i kolekcji w Lekcji 8.