Pętle
Pętle służą do wykonywania wielokrotnie tego samego bloku instrukcji.
Pętla while
Składnia:
while(
<warunek> )
{
instrukcja1;
instrukcja2;
//...
}
Po słowie kluczowym
while w nawiasach podajemy
warunek
warunek a następnie instrukcje zawarte w
bloku.
Na początku sprawdzany jest
warunek.
Jeżeli jest on spełniony to wykonywane są instrukcje zawarte w
bloku.
Następnie ponownie jeśli
warunek
jest spełniony wykonywanie są te same instrukcje z
bloku.
UWAGA:
Warunek nie jest spełniony wtedy i tylko wtedy gdy jego wartość logiczna wynosi
false co liczbowo odpowiada 0 (zeru). W przeciwnym wypadku warunek
jest spełniony.
Pętla kończy się jeżeli
warunek
nie zostanie jest spełniony (możliwe jest, że instrukcje nie zostaną wykonane ani raz jeżeli warunek
nie zostanie spełniony już przy pierwszym sprawdzaniu).
Istnieją jeszcze inne możliwości przerwania pętli:
- Jeżeli wewnątrz bloku pętli wystąpi słowo kluczowe break to kolejne
instrukcje zawarte w tym bloku nie zostaną już wykonane i pętla kończy swoje działanie.
- Instrukcja goto zawarta w bloku może spowodować skok to etykiety
znajdującej się poza blokiem pętli tym samym powodując jej przerwanie.
- Wewnątrz bloku pętli może znajdować się także instrukcja continue, która
co prawda nie powoduje natychmiastowego przerwania pętli ale sprawia, że kolejne instrukcje
zawarte w bloku nie zostaną już wykonane i nastąpi ponowne sprawdzenie warunku pętli.
Pomijam słowo kluczowe
return, które oczywiście przerywa wykonywanie pętli
i całej funckji ;D.
A teraz przykłady:
int i = 5;
while(i < 10) i++; //po wykonaniu pętli i = 10
while(i++) if(i==15) break; //jeśli i wynosi 15 to przerywamy wykonywanie pętli
while(true) goto etykieta1; //skok do etykiety
etykieta1:
while(i <= 20) //wyswietla liczby 15, 16, 17, 19 i 20
{
if(i==18) { i++; continue; }
cout << i++ << endl;
}
Pętla do - while
Składania:
do {
instrukcja1;
instrukcja2;
//...
}
while(
<warunek> );
Zwracam uwagę, że po nawiasach w których zawarty jest
warunek
musimy postawić średnik!
Pętla
do-while bardzo przypomina pętlę
while.
Działa ona niemal tak samo z tą różnicą, że instrukcje zawarte w
bloku
są wykonane minimum jeden raz! Dopiero po ich wykonaniu sprawdzany jest
warunek
i zależnie od jego spełnienia pętla ponownie wykonuje dane instrukcje bądź jest przerywana.
Pętlę tą możemy przerywać tymi samymi sposobami co pętlę
while.
Pętla for
Tradycyjnie zacznę od przedstawienia składni:
for(
intrukcja1 ;
<warunek> ;
instrukcja2)
{
//instrukcje
}
Na początku wykonywana jest
instruckcja1
(może być to kilka instrukcji oddzielonych przecinkami). Następnie sprawdzany jest
warunek.
Jeżeli jest spełniony to wykonywane są instrukcje zawarte w
bloku
a jeśli nie to pętla kończy swoje
działanie. Po wykonaniu tych instrukcji (oczywiście jeżeli pętla nie została zakończona :-) wykonywana jest
instruckcja2
(znowu może to być kilka instrukcji oddzielonych przecinkami) po której ponownie sprawdzany jest
warunek.
Podsumowując:
Instruckcja1
wykonywana jest zawsze tylko raz na samym początku. Następnie sprawdzany jest warunek i wykonywane
są instrukcje zawarte w
bloku
(war. spełniony).
Instruckcja2
wykonywana jest zawsze po wykonaniu instrukcji z bloku (przed sprawdzeniem warunku) - wykonuje się
zatem tyle razy ile wykonane zostały instrukcje z bloku chyba, że pętla została przerwana wewnątrz
bloku (
break,
goto czy
return).
Jeśli wewnątrz bloku wystąpi instrukcja
continue to instrukcje w tym
bloku
występujące dalej zostaną pominięte i wykonana zostanie
instruckcja2
po której sprawdzony zostanie ponownie warunek.
Chyba nieco zagmatwałem opis ostatniej pętli, ale w rzeczywistości jest to bardzo proste.
Dla formalności jeszcze krótki przykład:
for(int i=1; i<=10 ;i++) cout << i << endl;
//pętla wypisze liczby od 1 do 10 włącznie