Pętla while w służy do wykonywania bloku kodu tak długo, jak długo spełniony jest określony warunek logiczny. Instrukcja while sprawdza warunek przed każdą iteracją, co oznacza, że blok kodu może być wykonany zero lub więcej razy, w zależności od początkowej wartości warunku.
Aby lepiej zapoznać się z działaniem pętli, przyjrzyj się rysunkowi poniżej. Jest bardzo podobny do ilustracji będących metaforą instrukcji if, z tym że po zjeździe z głównej trasy trafiamy na rondo, z którego można wyjechać tylko po spełnieniu określonych warunków.
Źródło: slideshare.net
Składnia
Jak zwykle dobrym punktem wyjściowym jest zapoznanie się ze składnią nowo poznawanych rzeczy, czyli w tym wypadku ze składnią pętli while. Oto ona:
while( /* warunek kończący pętlę */ )
{
//powtarzany blok instrukcji
}
lub jeżeli chcemy aby tylko jedna instrukcja była powtarzana:
while( /* warunek kończący pętlę */ )
jedna_instrukcja(); //jedna powtarzana instrukcja
Dopóki warunek jest spełniony (czyli wartość logiczna wynosi true) dopóty pętla będzie powtarzała instrukcję (lub blok instrukcji) występujący bezpośrednio po słowie kluczowym while.
Blok instrukcji umieszczony w pętli while może się więc nie wykonać ani razu jeżeli wartość logiczna warunku przy pierwszym wejściu w pętlę będzie fałszywa. Jest to kluczowa, a zarazem jedyna różnica pętli while od pętli do ... while.
W poniższym przykładzie zmienna fuel zaczyna z wartością 10, a pętla działa tak długo, jak fuel jest większe od 1.
short fuel = 10;
while(fuel > 1)
{
// Jedź dalej...
cout << "Masz wystarczajaco paliwa" << endl;
fuel -= 1; // zmniejszenie paliwa o 1 litr
}
Działanie:
Początkowy stan: Zmienna fuel ma wartość 10.
Warunek: Sprawdzany jest warunek fuel > 1. Dopóki jest on prawdziwy, pętla będzie się wykonywać.
Treść pętli:
Każdorazowo wypisuje na ekranie komunikat 'Masz wystarczająco paliwa'.
Zmniejsza wartość fuel o 1 (symulacja zużycia paliwa).
Koniec pętli: Gdy fuel zmniejszy się do 1, warunek fuel > 1 przestanie być prawdziwy, więc pętla zakończy swoje działanie.
Pętla sprawdza warunek przed każdą iteracją, co oznacza, że jeśli początkowy warunek byłby fałszywy, pętla nie wykonałaby się ani razu.
Wynik działania programu:
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
Masz wystarczajaco paliwa
W tym przykładzie pętla wypisuje wynik mnożenia kolejnych liczb od 1 do 12 przez 12, a następnie zwiększa wartość zmiennej count.
short count = 1;
while(count <= 12)
{
cout << count << " pomnozone przez 12 wynosi " << count * 12 << endl;
count += 1;
}
Działanie:
Początkowy stan: Zmienna count zaczyna z wartością 1.
Warunek: Pętla działa tak długo, jak count jest mniejsze lub równe 12 (count <= 12). Gdy count przekroczy 12, pętla zakończy swoje działanie.
Treść pętli:
W każdej iteracji wypisuje tekst w stylu: "1 pomnożone przez 12 wynosi 12", "2 pomnożone przez 12 wynosi 24", i tak dalej.
Następnie zwiększa wartość count o 1, co symuluje przechodzenie przez kolejne liczby od 1 do 12.
Koniec pętli: Kiedy count osiągnie wartość 13, warunek count <= 12 przestanie być prawdziwy, więc pętla się zatrzyma.
Wynik działania programu:
1 pomnozone przez 12 wynosi 12
2 pomnozone przez 12 wynosi 24
3 pomnozone przez 12 wynosi 36
4 pomnozone przez 12 wynosi 48
5 pomnozone przez 12 wynosi 60
6 pomnozone przez 12 wynosi 72
7 pomnozone przez 12 wynosi 84
8 pomnozone przez 12 wynosi 96
9 pomnozone przez 12 wynosi 108
10 pomnozone przez 12 wynosi 120
11 pomnozone przez 12 wynosi 132
12 pomnozone przez 12 wynosi 144
Pętla do-while to struktura, która służy do powtarzania określonego zestawu instrukcji wielokrotnie, dopóki spełniony jest pewien warunek. Kluczową cechą tej pętli jest to, że zawsze wykona ona co najmniej jeden raz, niezależnie od tego, czy warunek jest prawdziwy, ponieważ warunek sprawdzany jest po wykonaniu instrukcji pętli, a nie przed.
Jak działa:
Najpierw wykonanie instrukcji: Na początku pętla wykonuje wszystkie instrukcje wewnątrz swojego bloku. Nie sprawdza najpierw warunku.
Sprawdzenie warunku: Po wykonaniu instrukcji, sprawdzany jest warunek. Jeśli warunek jest spełniony (prawdziwy), pętla wraca do początku i ponownie wykonuje instrukcje. Jeśli warunek nie jest spełniony (fałszywy), pętla przestaje działać.
Powtarzanie: Proces powtarza się tak długo, jak warunek pozostaje prawdziwy. Kiedy stanie się fałszywy, pętla się kończy.
Ważne cechy:
Instrukcje wewnątrz pętli są wykonane przynajmniej raz, nawet jeśli początkowo warunek byłby fałszywy, ponieważ warunek sprawdzany jest dopiero po wykonaniu pierwszego cyklu pętli.
Pętla kończy się, gdy warunek staje się fałszywy po zakończeniu iteracji.
To sprawia, że pętla do-while jest użyteczna w sytuacjach, gdzie chcemy, aby instrukcje były wykonane co najmniej raz, zanim zdecydujemy, czy powtarzać je ponownie.
Pętla do-while w C++ ma następującą składnię:
do {
// Blok instrukcji do wykonania
} while (warunek);
Wyjaśnienie:
do: Słowo kluczowe do rozpoczyna blok pętli. Instrukcje zawarte w bloku między { } zostaną wykonane.
Blok instrukcji: Wszystkie instrukcje wewnątrz bloku { } są wykonywane raz przed sprawdzeniem warunku.
while (warunek); : Po wykonaniu bloku instrukcji, jeśli warunek jest prawdziwy (true), pętla wykonuje blok instrukcji ponownie. Jeśli warunek jest fałszywy (false), pętla kończy działanie.
W poniższym przykładzie pętla wypisuje liczby od 1 do 5.
int number = 1;
do {
cout << number << " ";
number += 1;
} while (number <= 5);
Działanie:
Początkowy stan: Zmienna number ma wartość 1.
Treść pętli:
Wypisywana jest aktualna wartość zmiennej number.
Zmienna number zostaje zwiększona o 1.
Warunek: Po każdej iteracji pętli sprawdzany jest warunek number <= 5. Dopóki wartość number jest mniejsza lub równa 5, pętla będzie się powtarzać.
Koniec pętli: Gdy zmienna number osiągnie wartość 6, warunek przestaje być prawdziwy, więc pętla zakończy działanie.
Wynik działania programu:
1 2 3 4 5
W poniższym przykładzie pętla będzie pytać użytkownika o hasło, dopóki nie poda poprawnego.
string password;
do {
cout << "Podaj haslo: ";
cin >> password;
} while (password != "tajne");
Działanie:
Początkowy stan: Zmienna password nie ma jeszcze przypisanej wartości.
Treść pętli:
Wyświetlany jest komunikat 'Podaj hasło'.
Użytkownik wpisuje hasło, które jest przypisywane do zmiennej password.
Warunek: Po wykonaniu bloku kodu sprawdzany jest warunek password != 'tajne'. Jeśli hasło jest inne niż 'tajne', pętla wykona się ponownie, pytając o hasło jeszcze raz. Jeśli hasło jest poprawne, pętla kończy działanie.
Koniec pętli: Pętla przestaje działać, gdy użytkownik poda poprawne hasło ('tajne').
W tym przypadku pętla zawsze wykona się co najmniej raz, nawet jeśli użytkownik podałby poprawne hasło za pierwszym razem.
Wynik działania programu:
Podaj haslo: haslo
Podaj haslo: abc
Podaj haslo: tajne
Napisz program, który wyświetli wszystkie liczby parzyste od 2 do N, gdzie N będzie podane przez użytkownika. Użyj pętli while, aby wykonać to zadanie.
Poproś użytkownika o podanie liczby całkowitej dodatniej N.
Użyj pętli while, aby sprawdzić i wyświetlić wszystkie liczby parzyste od 2 do N na ekranie.
Po wyświetleniu wszystkich liczb parzystych zakończ działanie programu.
Wynik działania programu:
Podaj liczbe N: 10
Liczby parzyste od 2 do 10:
2
4
6
8
10
Napisz program, który obliczy sumę wszystkich liczb naturalnych od 1 do N, gdzie N będzie liczbą podaną przez użytkownika. Użyj pętli while, aby wykonać to zadanie.
Poproś użytkownika o podanie liczby całkowitej dodatniej N.
Zainicjuj zmienną przechowującą sumę na 0.
Użyj pętli while, aby dodawać kolejne liczby naturalne do sumy.
Po osiągnięciu liczby N wyświetl sumę na ekranie.
Wynik działania programu:
Podaj liczbe N: 5
Suma liczb naturalnych do 5: 15
Napisz program, który wczyta liczby od użytkownika, aż ten zdecyduje się zakończyć wprowadzanie. Użyj pętli do-while, aby wykonać to zadanie.
Zainicjuj zmienną do przechowywania liczby.
W pętli do-while:
Poproś użytkownika o podanie liczby.
Wyświetl wprowadzone liczby na ekranie.
Zapytaj użytkownika, czy chce kontynuować (np. 'Czy chcesz wprowadzić kolejną liczbę? (t/n)').
Kontynuuj pętlę, jeśli użytkownik wybierze 't', a zakończ, jeśli wybierze 'n'.
Wynik działania programu:
Podaj liczbe: 2
Wprowadziles liczbe: 2
Czy chcesz wprowadzic kolejna liczbe? (t/n): t
Podaj liczbe: 5
Wprowadziles liczbe: 5
Czy chcesz wprowadzic kolejna liczbe? (t/n): n
Dziekuje za wprowadzenie liczb!
Napisz program, który policzy, ile liczb parzystych znajduje się w zakresie od 1 do N, gdzie N będzie liczbą podaną przez użytkownika. Użyj pętli do-while, aby wykonać to zadanie.
Poproś użytkownika o podanie liczby całkowitej dodatniej N.
Zainicjuj zmienną przechowującą licznik parzystych na 0 oraz zmienną pomocniczą do iteracji, rozpoczynając od 1.
Użyj pętli do-while, aby sprawdzać każdą liczbę w zakresie od 1 do N:
Jeśli liczba jest parzysta, zwiększ licznik parzystych o 1.
Po zakończeniu pętli wyświetl liczbę liczb parzystych na ekranie.
Wynik działania programu:
Podaj liczbe calkowita dodatnia N: 10
Liczba liczb parzystych od 1 do 10 wynosi: 5