node51






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 1
node51
node51 NPQJB35E4NBCZPRZOGPFJB7E3CZF6IJA5VUKCZA
node51 K7MFSTMOONEVK2SX3KH5YLVSTEGL2EUX2V5NJ7Y
node51
node51
node51 6USRY6ENSVW44GHI34INTYHNIYFXCIEPZX3NRTA
node51

więcej podobnych podstron