Pętle warunkowe i iteracyjne

Pętla while

Składnia pętli while jest następująca:

while(warunek) instrukcja;

lub z wykorzystaniem instrukcji złożonej:

while(warunek)
{
   inst1;
   inst2;
   ...;
}

warunek - wyrażenie dające w wyniku wartość różną od 0, gdy warunek jest spełniony, lub wartość równą 0, gdy warunek jest niespełniony.

Działanie pętli while jest następujące:

Najpierw obliczany jest warunek. Jeśli w wyniku dostajemy wartość różną od 0 (prawdziwą), to wykonana zostaje instrukcja pętli (lub instrukcje wewnątrz klamerek instrukcji złożonej). Po wykonaniu instrukcji następuje powrót na początek pętli i znów jest sprawdzany warunek kontynuacji. Pętla powtarza swoje instrukcje dotąd, aż warunek stanie się fałszywy, czyli jego wartością będzie 0. W takim przypadku pętla przestaje wykonywać swoją instrukcję i następuje przejście do dalszej części programu leżącej za pętlą.

Przykład:

Poniższa pętla while dodaje do zmiennej a liczbę 5 dopóki zawartość a jest mniejsza od 1000. Gdy zmienna a osiągnie wartość większą lub równą 1000, to warunek kontynuacji pętli stanie się fałszywy i dodawanie zostanie przerwane:

...
while(a < 1000) a += 5;

...

Ponieważ warunek kontynuacji jest sprawdzany w pętli while na samym początku przed rozpoczęciem obiegu, to może się zdarzyć, iż będzie on fałszywy przy wejściu do pętli. W takim przypadku pętla while nie wykona ani jednego obiegu.

Warunek pętli powinien być uzależniony w pewien sposób od wykonywanych instrukcji lub od czynników zewnętrznych. W przeciwnym razie możemy otrzymać tzw. pętlę nieskończoną (ang. infinite loop), która nigdy normalnie się nie kończy.

Przykład:

Poniższy przykład w nieskończoność wypisuje na ekranie tekst - Witaj w C++:

...
while(1) cout << "Witaj w C++ ";

Pętla do...while

Składnia pętli  do...while jest następująca:

do instrukcja; while(warunek);

lub z wykorzystaniem instrukcji złożonej:

do
{
   inst1;
   inst2;
   ...;
} while(warunek);

warunek - wyrażenie dające w wyniku wartość różną od 0, gdy warunek jest spełniony, lub wartość równą 0, gdy warunek jest niespełniony.

Działanie pętli do...while jest następujące:

Najpierw wykonywana jest instrukcja powtarzana w pętli. Po wykonaniu tej instrukcji obliczany jest warunek. Jeśli wynik jest różny od 0, to instrukcja jest powtarzana. W przeciwnym razie gdy warunek ma wartość 0, pętla zostaje przerwana i program przechodzi do wykonywania instrukcji leżących za pętlą.

Przykład:

Poniższa pętla do...while odejmuje od zmiennej a 5 dotąd, aż wynik tego odejmowania będzie liczbą ujemną. Zwróć uwagę, iż odejmowanie wykonywane jest zawsze przynajmniej jeden raz!

...
do a -= 5; while(a >= 0);

...

 

W pętli do...while warunek kontynuacji jest sprawdzany na końcu, po wykonaniu biegu. Zatem pętla do...while zawsze wykonuje przynajmniej jeden obieg - tym różni się od pętli while, która może nie wykonać ani jednego obiegu, gdy warunek jest fałszywy.

Jeśli warunek jest zawsze prawdziwy, to otrzymujemy pętlę nieskończoną.

Przykład:

Poniższy przykład w nieskończoność wypisuje na ekranie tekst - Witaj w C++:

...
do cout << "Witaj w C++ "; while(1);
...

Pętla for

Obiegi wykonywane przez pętlę można numerować. Obieg numerowany nazywamy iteracją. Iteracja wymaga dodatkowej zmiennej, która przechowuje numer wykonywanego przez pętlę obiegu. Zmienna ta nosi nazwę licznika pętli (ang. loop counter). Pętlą iteracyjną w języku C++ jest najczęściej pętla for o następującej składni:

for(prolog;kontynuacja;epilog) instrukcja;

lub z instrukcją złożoną:

for(prolog;kontynuacja;epilog)
{
   ...;
}

 

prolog  -  instrukcja wykonywana przed rozpoczęciem pierwszej iteracji. Najczęściej służy do inicjalizacji licznika pętli.
Przykład:

for(i = 1;...

kontynuacja  - warunek kontynuacji pętli. Jeśli wyrażenie to ma wartość różną od 0, to pętla wykona obieg. Warunek jest sprawdzany na początku każdej iteracji.
Przykład:

for(i = 1; i <= 10;...

epilog  - instrukcja wykonywana po zakończeniu każdej iteracji. Najczęściej wykorzystuje się ją do modyfikacji licznika pętli.
Przykład:

for(i = 1; i <= 10; i++)...

instrukcja  - instrukcja powtarzana w każdej iteracji pętli.
Przykład:

for(i = 1; i <= 10; i++) cout << i << endl;

Działanie pętli for jest następujące:

Instrukcja zdefiniowana w prologu zostaje wykonana przed rozpoczęciem powtarzania. Na początku każdego obiegu sprawdzany jest warunek kontynuacji - jeśli warunek ten jest prawdziwy (różny od 0), to zostaje wykonana instrukcja powtarzana w pętli. Jeśli nie, pętla przerywa powtarzanie. Na końcu obiegu zostaje wykonana instrukcja zawarta w epilogu.

Pętlę for można zrealizować przy pomocy pętli warunkowej while:

for(prolog;kontynuacja;epilog) instrukcja;  → prolog;
while(kontynuacja)
{
    instrukcja;
    epilog;
}

Pętlę nieskończoną tworzymy z pętli for w sposób następujący:

for(;;) instrukcja;

Przykład:

for(;;) cout << "Witaj w C++ ";

Przerwanie pętli

Wykonywanie pętli while, do...while i for można w każdej chwili przerwać za pomocą instrukcji break. Ze sposobu tego korzysta się, jeśli w trakcie wykonywania pętli zajdzie przypadek, gdy musimy ją przerwać pomimo poprawnego warunku kontynuacji - np. w grze o 7 turach okazuje się, iż gracz wygrał już w trzeciej turze - kontynuowanie rozgrywki nie ma sensu.

Kontynuacja od następnego obiegu

Czasami występuje sytuacja, gdy musimy przerwać wykonywanie bieżącego obiegu pętli i rozpocząć następny obieg od początku pętli. Do tego celu mamy w języku C++ instrukcję contnue.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.