Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych Autor artykułu: mgr Jerzy Wałaszek |
©2014 mgr
Jerzy Wałaszek
|
Pętla (ang. loop) jest konstrukcją programową, która pozwala powtarzać wybraną instrukcję. Pętla warunkowa wykonuje to powtarzanie w zależności od warunku. W języku C++ mamy dwie pętle warunkowe. Składnia pierwszej z nich jest następująca:
while(warunek) instrukcja;
Najpierw komputer oblicza warunek. Jeśli wynik jest różny od zera (jak pamiętamy, w C++ oznacza to prawdę), to zostaje wykonana instrukcja i następuje powrót na początek pętli, gdzie warunek jest ponownie obliczany i sprawdzany. Powtarzanie odbywa się tak długo, aż warunek przybierze wartość zero (w C++ oznacza to fałsz). W takim przypadku instrukcja nie zostanie wykonana i komputer przejdzie do instrukcji pod pętlą.
Jeśli w ramach pętli musimy wykonywać więcej niż jedną instrukcję, to zastępujemy ją blokiem:
while(warunek) { dowolna liczba instrukcji; }
Pętlę zawsze można natychmiast przerwać za pomocą polecenia break.
Z kolei polecenie continue wykonuje natychmiastowy powrót na początek pętli do obliczania i sprawdzania warunku. Można je potraktować jako zakończenie bieżącego obiegu pętli i rozpoczęcie następnego.
Cechą charakterystyczną pętli while jest to, że pętla nie wykona ani jednego obiegu, jeśli warunek będzie na początku fałszywy.
Dla przykładu napiszemy program, który obliczy pierwszą sumę kolejnych liczb naturalnych przekraczającą zadaną wartość:
Code::Blocks |
// Instrukcja pętli warunkowej // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int suma,granica,i; cout << "Podaj granicę: "; cin >> granica; cout << endl; i = 1; suma = 0; while(suma < granica) cout << (suma += i++) << " "; cout << "\n\nSuma wynosi: " << suma << endl; } |
A teraz przykład z poleceniem break. Program ma obliczać sumę nie większą od granicy:
Code::Blocks |
// Instrukcja pętli warunkowej // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int suma,granica,i; cout << "Podaj granicę: "; cin >> granica; cout << endl; i = 1; suma = 0; while(true) { if(suma + i > granica) break; cout << (suma += i++) << " "; } cout << "\n\nSuma wynosi: " << suma << endl; } |
W programie zastosowano tzw. pętlę nieskończoną. Pętla nieskończona nigdy się nie kończy samoistnie. Musi zostać przerwana z wnętrza pętli za pomocą break. Tutaj pętlę przerywamy, gdy dodanie kolejnej liczby naturalnej do sumy spowodowałoby przekroczenie granicy.
Składnia drugiej pętli jest następująca:
do instrukcja while(warunek);
Najpierw jest wykonywana instrukcja, a następnie komputer wylicza warunek i sprawdza jego wartość. Jeśli warunek ma wartość różną od zera (w C++ oznacza prawdę), to następuje powrót do instrukcji i zostanie ona wykonana ponownie, itd. Jeśli warunek ma wartość zero (w języku C++ oznacza to fałsz), to pętla zostanie zakończona.
Jeśli w pętli mamy wykonać więcej niż jedną instrukcję, to stosujemy blok:
do { dowolna liczba instrukcji; } while(warunek);
Zwykle pętle while i do while są sobie równoważne. Istnieje jednak różnica: ponieważ warunek kontynuacji pętli jest obliczany i sprawdzany na końcu, to instrukcja w pętli zawsze wykona się przynajmniej jeden raz.
Napiszmy prostą grę logiczną. Zasady gry są następujące:
Strategia w tej grze jest bardzo prosta. W liczbie 13 mieszczą się trzy czwórki i zostaje jeden żeton. Aby zatem wygrać, komputer musi zawsze brać 4 - żetony wzięte przez człowieka. W ten sposób po trzech ruchach zostanie jeden żeton, który będzie musiał wziąć człowiek.
Code::Blocks |
// Instrukcja pętli warunkowej // Koło informatyczne // (C)2015 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int main() { int n = 13, rcz, i; cout << "Witaj w grze!\n" "=============\n\n" "Zabierasz od 1 do 3 żetonów.\n" "Przegrywa ten, któremu zostanie ostatni żeton.\n\n"; while(n > 0) { // Wyświetlamy żetony i = 1; while(i++ <= n) cout << "*"; cout << endl << endl; if(n > 1) { do { cout << "Ile żetonów? (1,2 lub 3) : "; cin >> rcz; } while((rcz < 1) || (rcz > 3)); cout << "Ja zabieram " << 4 - rcz << endl << endl; n -= 4; } else { cout << "Pozostał ci ostatni żeton. Przegrałeś!\n\n"; n--; } } } |
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe