Koło informatyczne

Przyspieszony kurs języka C++

 

Pętle warunkowe

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:

 

W grze uczestniczą człowiek i komputer. Rozpoczyna człowiek. Do dyspozycji graczy jest 13 żetonów. Każdy gracz musi zabrać od 1 do 3 żetonów. Przegrywa ten, który będzie zmuszony zabrać ostatni żeton.

 

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   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

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

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