8.9 Instrukcje iteracyjne (pętle)
Dalej: 8.10 Instrukcje zaniechania i kontunuacji
W górę: 8. Instrukcje
Wstecz: 8.8 Instrukcja wyboru (switch)
Podrozdziały
8.9.1 Pętla while
8.9.2 Pętla do
8.9.3 Pętla for
8.9 Instrukcje iteracyjne (pętle)
Instrukcje iteracyjne,
zwane pętlami (ang. iterative statement, loop)
mają charakter
cykliczny: wykonanie instrukcji jest powtarzane dopóki
spełniony jest pewien warunek logiczny.
Programista powinien zapewnić, że wykonanie pętli skończy
się, a więc że warunek logiczny, od którego zależy dalsze
powtarzanie instrukcji, będzie kiedyś niespełniony.
Inną możliwością przerwania pętli jest zastosowanie
instrukcji powrotu (
return),
zaniechania (
break)
lub skoku (
goto), co omówimy dalej.
Instrukcje iteracyjne występują w trzech odmianach, przy czym
każda forma może być przekształcona do każdej z pozostałych;
wybór jednej z tych form zależy tylko od wygody i upodobań
programisty.
Przebieg każdej pętli może być modyfikowany lub przerwany
instrukcjami
break i
continue.
8.9.1 Pętla while
Pętla
while
ma postać
while ( b ) stmt
gdzie wyrażenie
b ma wartość logiczną
a
instr jest instrukcją. Składnia wymaga jednej
instrukcji instr, więc jeśli ma ich być więcej, to należy
wprowadzić instrukcję grupującą
(patrz rozdział o instrukcjach złożonych ),
tak jak to było w przypadku
instrukcji warunkowych. Wykonanie instrukcji polega na cyklicznym
powtarzaniu następujących czynności:
wyznaczenie wartości
b,
jeśli wartość
b jest
false:
zakończenie wykonywania instrukcji,
jeśli wartość
b jest
true:
wykonanie instrukcji
instr,
powrót do początku pętli.
Na przykład poniższy fragment programu wyznaczy pierwszą liczbę
naturalną postaci 2n, która jest większa od zadanej
liczby
lim:
int liczba = 1;
while ( liczba <= lim ) liczba *= 2;
Natomiast fragment poniższy spowoduje, że
program będzie wczytywał dane od użytkownika aż
do chwili, gdy poda on liczbę w zakresie [5, 100]:
int wiek = 0;
while ( wiek < 5 || wiek > 100) cin >> wiek;
8.9.2 Pętla do
Pętla
do
ma postać
do instr while ( b )
gdzie wyrażenie
b ma wartość logiczną (orzecznikową),
a
instr jest pewną instrukcją. Składnia wymaga jednej
instrukcji
instr, więc jeśli ma ich być więcej, to należy
wprowadzić instrukcję grupującą (tak jak to było w przypadku
instrukcji warunkowych i pętli
while).
Wykonanie instrukcji polega
na cyklicznym powtarzaniu następujących czynności:
wykonanie instrukcji
instr,
wyznaczenie wartości
b,
jeśli wartość
b jest
false:
zakończenie wykonywania instrukcji,
powrót do początku pętli.
Jak widać, instrukcja
do...while różni się od instrukcji
while tym, że warunek kontynuowania pętli sprawdza się
po wykonaniu instrukcji
instr, a nie przed. Wynika
z tego w szczególności, że instrukcja
instr będzie
zawsze wykonana chociaż raz, nawet jeśli wartość
b
wynosi
false (w pętli
while, jeśli
b
ma wartość
false, instrukcja
instr nie byłaby
wykonana ani razu).
Poniższy program symuluje serię rzutów dwiema kostkami do gry i
kończy się, gdy wyrzucone zostaną dwie szóstki. Użyto tu
standardowego generatora liczb losowych
(
rand
inicjowana jednokrotnym wywołaniem
funkcji
srand z nagłówka
cstdlib)
do losowania wyrzucanej liczby oczek na każdej z obu kostek
(linie 9, 12 i 13).
Ponieważ liczba prób (rzutów) nie jest z góry znana, a żeby
zakończyć grę, zawsze trzeba i tak wykonać co najmniej jeden rzut,
forma
do...while stanowi tu najbardziej naturalny wybór dla
realizacji pętli:
Wyszukiwarka
Podobne podstrony:
node51 1node51node51 NPQJB35E4NBCZPRZOGPFJB7E3CZF6IJA5VUKCZAnode51 K7MFSTMOONEVK2SX3KH5YLVSTEGL2EUX2V5NJ7Ynode51node51node51 6USRY6ENSVW44GHI34INTYHNIYFXCIEPZX3NRTAnode51więcej podobnych podstron