C++: Pętla while, do while
Składnia:
while (warunek){
instrukcje;
}
Dopóki warunek jest spełniony wykonywane są instrukcje.
Przykład:
Program wypisze na ekran liczby od 1 – 10.
int a=1; while (a<=10){ cout<<a<<endl; a++; }
Wynik działania:
1
2
3
4
5
6
7
8
9
10
Wyjaśnienie:
Wartość początkowa a jest równa 1. Przypisujemy ją w definicji całkowitoliczbowej zmiennej a. Pętla sprawdza warunek, czy a jest mniejsze bądź równe 10. Dopóki jest, wypisuje na ekran aktualną wartość a, następnie zwiększając ją o 1. W momencie kiedy wartość a osiągnie 11, warunek nie będzie spełniony i pętla się zakończy.
Warunek może przyjąć podobnie jak w instrukcji warunkowej if jedynie 2 wartości: prawda lub fałsz, warunek jest spełniony bądź nie. Prawdę – czyli warunek spełniony oznaczamy logiczną wartością 1, fałsz natomiast 0.
Wiedząc to możemy zapisać pętlę nieskończoną while – w której warunek zawsze będzie spełniony:
while(1){ instrukcje; }
Przykładem zastosowania takiej konstrukcji może być program, który wczytuje od użytkownika wartość zmiennej, dopóki nie będzie ona wynosiła 0 i wypisuje ją na ekran:
int c; while (1){ cin>>c; if(c==0) break; cout<<c<<endl; }
Wyjaśnienie:
Deklarujemy zmienną o nazwie c. Przechodzimy do pętli, gdzie wczytujemy (cin) wartość zmiennej c, sprawdzamy (if) czy użytkownik nie wprowadził 0, jeśli tak instrukcja break kończy pętlę, w przeciwnym razie pomijamy tą instrukcję i przechodzimy dalej – do wypisania wartości zmiennej c.
Dla przykładu jeszcze drugi sposób wykonania tego samego programu za pomocą pętli nieskończonej.
int c, z=1; while (z){ cin>>c; if(c==0) z=0; else cout<<c<<endl; }
Wyjaśnienie:
Deklarujemy zmienną c oraz zmienną z przypisując jej jednoczenie wartość 1. Dopóki wartość zmiennej z będzie 1, pętla będzie działać, w momencie gdy użytkownik wprowadzi wartość 0 dla zmiennej c, zmienna z również przyjmie wartość 0, co przy sprawdzaniu warunku zakończy pętlę.
Pewną odmianą pętli while jest pętla do while. Jej składnia wygląda następująco:
do{
instrukcje;
}while(warunek)
Jak widzimy najpierw znajdują się tu wykonywane instrukcje, dopiero później znajduje się sprawdzany warunek. Wynika z tego jedna podstawowa różnica, a mianowicie, instrukcje znajdujące się w bloku do zostaną wykonane przynajmniej raz. Reszta działa w sposób identyczny z pętlą while.
Dwa przykłady. Pierwszy obrazujący działanie samej pętli, program wypisujący liczby 1-10, podobnie jak wyżej:
int a=1; do{ cout<<a<<endl; a++; } while (a<=10)
Wynik działania:
1
2
3
4
5
6
7
8
9
10
Drugi obrazujący, że mimo nie spełnienia warunku, instrukcje wykonają się przynajmniej raz:
int a=11; do{ cout<<a<<endl; a++; } while (a<=10)
Wynik działania:
1