Informatyka dla klas II – pętle warunkowe

Pętla (ang. loop) to cykliczne powtarzanie wykonywania wybranej instrukcji lub grupy instrukcji w programie. Obiegiem pętli (ang. loop pass) nazywamy pojedynczy cykl wykonania powtarzanej instrukcji lub grupy instrukcji. Pętla warunkowa (ang. conditional loop) wykonuje powtarzanie obiegów w zależności od wybranego warunku. W języku C++ mamy dwie podstawowe instrukcje pętli warunkowych. Pierwsza z nich to pętla typu while:

 

while(warunek) instrukcja;

while      - słowo kluczowe języka C++ oznaczające instrukcję pętli warunkowej
warunek    - dowolne wyrażenie arytmetyczne. Warunek jest prawdziwy (true), jeśli ma wartość różną od zera. Warunek jest fałszywy (false), jeśli ma wartość zero.
instrukcja - powtarzana w pętli instrukcja.

 

Pętla typu while działa następująco. Na początku każdego obiegu komputer oblicza wartość warunku. Jeśli wynik jest różny od zera, to zostaje wykonana instrukcja i komputer rozpoczyna nowy obieg od ponownego obliczenia wartości warunku. Jeśli warunek  ma wartość równą zero, instrukcja w pętli nie zostaje wykonana i pętla kończy działanie.

 

// Kolejne liczby naturalne od 1 do 100
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int i;

    i = 1;

    while(i <= 100) cout << i++ << " ";

    cout << "\nKONIEC\n";

    return 0;
}

 

Ponieważ warunek  jest sprawdzany na początku każdego obiegu pętli przed wykonaniem instrukcji zawartej w pętli, to jeśli jest on już od początku fałszywy, pętla nie wykona ani jednego obiegu.

 

// Fałszywy warunek
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int i;

    i = 101;

    while(i <= 100) cout << i++ << " ";

    cout << "\nKONIEC\n";

    return 0;
}

 

Drugi rodzaj pętli warunkowej to pętla do while:

 

do instrukcja; while(warunek);

do         - słowo kluczowe języka C++ oznaczające początek pętli warunkowej
instrukcja - powtarzana w pętli instrukcja. Zwróć uwagę, że musi ona kończyć się średnikiem.
while      - słowo kluczowe oznaczające sekcję sprawdzania warunku.
warunek  
 - dowolne wyrażenie arytmetyczne. Warunek jest prawdziwy (true), jeśli ma wartość różną od zera. Warunek jest fałszywy (false), jeśli ma wartość zero.

Pętla typu do...while nieznacznie różni się od pętli while. W każdym obiegu najpierw wykonywana jest instrukcja, a dopiero po jej wykonaniu komputer oblicza i sprawdza warunek. Jeśli ma on wartość różną od zera, to wykonywany jest następny obieg pętli, Jeśli warunek  ma wartość zero, pętla nie wykonuje dalszych obiegów i jest przerywana.

 

// Kolejne liczby naturalne od 1 do 100
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int i;

    i = 1;

    do cout << i++ << " "; while(i <= 10);

    cout << "\nKONIEC\n";

    return 0;
}

 

Ponieważ warunek kontynuacji jest sprawdzany w pętli do...while na końcu obiegu po wykonaniu powtarzanej instrukcji, to pętla wykonuje zawsze przynajmniej jeden obieg bez względu na wartość warunku - czyli inaczej niż pętla while, która przy fałszywym warunku nie wykonywała się ani jeden raz.

 

// Fałszywy warunek
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int i;

    i = 101;

    do cout << i++ << " "; while(i <= 10);

    cout << "\nKONIEC\n";

    return 0;
}

 

Jeśli w pętli chcemy powtarzać więcej niż jedną instrukcję, to stosujemy instrukcję blokową (po klamerce zamykającej nie musimy wstawiać średnika):

 

while(warunek)
{

    ciąg instrukcji
}

          do
{
    ciąg instrukcji
} while(warunek);

 

// Kolejne liczby parzyste od 2 do n
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int i,n;

    cin >> n;

    i = 2;

    while(i <= n)
    {
        cout << i << " ";
        i += 2;
    }

    cout << endl;

    return 0;
}
// Kolejne liczby nieparzyste od 2 do n
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int i,n;

    cin >> n;

    i = 1;

    while(i <= n)
    {
        cout << i << " ";
        i += 2;
    }

    cout << endl;

    return 0;
}
// Sumy kolejnych liczb od 1 do n
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    int i,n,s;

    cin >> n;

    i = 1; s = 0;

    while(i <= n)
    {
        s += i++;
        cout << s << endl;
    }

    return 0;
}

 

// Kolejne potęgi liczby 2
// (C)2013 I LO w Tarnowie
//------------------------

#include <iostream>

using namespace std;

int main()
{
    unsigned long long i,n;

    cin >> n;

    i = 1;

    while(i <= n)
    {
        cout << i << endl;
        i *= 2;
    }

    return 0;
}

 

Zadania

  1. Napisz program obliczający pierwszą potęgę liczby 3, która przekracza wartość smax.
  2. Napisz program, który oblicza sumę kolejnych potęg liczby 3 (30 + 31 + 32 + ...) aż do momentu, gdy suma ta przekroczy zadaną wartość smax, którą program powinien odczytać z klawiatury
  3. Napisz program, który wczyta liczby a i b, a następnie wyliczy w przedziale <a,b> ilość liczb podzielnych przez 3 lub 5.

 


   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