« Pętla for, lekcja »
Rozdział 22. Omówienie pętli for. (lekcja)
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!
Autor: Piotr Szawdyński
Kurs C++

Pętla for

[lekcja] Rozdział 22. Omówienie pętli
for
.

Kolejny rozdział, kolejne wyzwanie. Tym razem zajmiemy się omówieniem pętli
for
. Pętle w programowaniu są najpotężniejszym narzędziem w ręku programisty. Na chwilę obecną powinieneś umieć posługiwać się jednym rodzajem pętli oraz rozumieć ich zasadę działania - znasz już bowiem pętlę
do...while
, którą powinieneś rozwiązywać wszystkie dotychczasowe zadania.

Za pomocą pętli
for
 możemy wykonywać dokładnie te same rzeczy co za pomocą znanej nam pętli
do...while
. Znajomość działania wszystkich pętli ułatwia znacznie czytanie kodu - różnią się one bowiem drobnymi detalami, które sprawiają, że każda pętla jest znacznie wygodniejsza od pozostałych w określonych sytuacjach.

Składnia pętli for

Skoro już wiesz jaka idea przyświeca różnym rodzajom pętli to możemy teraz zapoznać się ze składnią pętli for:
C/C++
for( _A_; _B_; _C_ )
     _D_;

//lub:
for( _A_; _B_; _C_ )
{
    //blok instrukcji
}
Budowa pętli
for
 jak łatwo można zauważyć jest podzielona na cztery części. Są to:
  • nadawanie początkowych wartości zmiennym (oznaczona wyżej jako _A_);
  • warunek kończący pętlę for (oznaczony jako _B_);
  • zwiększenie (zmniejszenie) licznika pętli (_C_);
  • powtarzana instrukcja (_D_) bądź blok instrukcji.

Przykład użycia pętli for

Skoro teorię już znamy to zobaczmy teraz jak pętle for wyglądają w praktyce:
C/C++
int i;
for( i = 1; i <= 10; i++ )
{
    //Powtarzany blok instrukcji
}
Jeżeli mamy jedną instrukcję do wykonania w pętli to zapis może wyglądać następująco:
C/C++
int i;
for( i = 1; i <= 10; i++ )
     jedna_powtarzana_instrukcja;

Jeżeli uważnie przeanalizowałeś powyższy kod oraz opis składni pętli
for
 to powinieneś wiedzieć, że powtarzana instrukcja (bądź blok instrukcji) wykona się 10 razy.

Typowe zastosowania pętli for

Pętlę for używamy praktycznie zawsze, gdy znamy ilość danych, jaką mamy wczytać, wypisać lub zmienić. Jeśli chcemy policzyć średnią z określonej liczby liczb, wczytać określoną ilość danych z pliku lub wypisać określoną ilość danych na ekran, pętla for jest do tego po prostu idealna.

Inicjalizacja zmiennych w pętli for

W języku C++ w sekcji _A_ możliwe jest utworzenie tymczasowej zmiennej, która będzie widoczna tylko i wyłącznie wewnątrz pętli for. Wspomniana własność jest bardzo wygodna dla programisty i korzystanie z niej w C++ jest praktycznie rzecz biorąc na porządku dziennym. W praktyce kod, który został wcześniej zaprezentowany można zapisać następująco:
C/C++
for( int i = 1; i <= 10; i++ )
{
    //Powtarzany blok instrukcji
}

for( int i = 1; i <= 10; i++ )
     jedna_powtarzana_instrukcja;

Pętla for zapisana przy pomocy pętli do ... while

Aby zobrazować różnicę w długości kodu napisanego za pomocą pętli
for
 oraz pętli
do...while
 zobaczmy jak będzie wyglądał kod pętli
for
 zapisany za pomocą pętli
do...while
:
C/C++
_A_;
if( _B_ )
do
{
    //powtarzany blok instrukcji (albo jedna instrukcja oznaczona jako _D_)
   
    _C_;
} while( _B_ );

Trochę praktyki

Teoria ma to do siebie, że bywa trudna jeżeli nie jest poparta przykładami. Zobaczmy więc teraz kilka prostych przykładów zastosowania pętli
for
.

Wypisywanie tablicy pętlą for

C/C++
#include <iostream>

void wypiszTablice( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         std::cout << tablica[ indeks ] << std::endl;
   
}

int main()
{
    int dane[ 5 ];
    dane[ 0 ] = 123;
    dane[ 1 ] = 321;
    dane[ 2 ] = 333;
    dane[ 3 ] = 222;
    dane[ 4 ] = 111;
    wypiszTablice( dane, 5 );
    return 0;
}

Wypisywanie tablicy pętlą do ... while

C/C++
#include <iostream>

void wypiszTablice( int tablica[], int ile )
{
    int indeks = 0;
    if( indeks < ile )
    do
    {
        std::cout << tablica[ indeks ] << std::endl;
        indeks++;
    } while( indeks < ile );
   
}

int main()
{
    int dane[ 5 ];
    dane[ 0 ] = 123;
    dane[ 1 ] = 321;
    dane[ 2 ] = 333;
    dane[ 3 ] = 222;
    dane[ 4 ] = 111;
    wypiszTablice( dane, 5 );
    return 0;
}

Wczytywanie liczb pętlą for

C/C++
#include <iostream>

void wypiszTablice( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         std::cout << tablica[ indeks ] << std::endl;
   
}

void wczytajLiczby( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
    {
        std::cout << "Podaj liczbe " <<( indeks + 1 ) << ": ";
        std::cin >> tablica[ indeks ];
    } //for
}

int main()
{
    int dane[ 5 ];
    wczytajLiczby( dane, 5 );
    wypiszTablice( dane, 5 );
    return 0;
}

Sumowanie liczb pętlą for

C/C++
#include <iostream>

void wypiszTablice( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         std::cout << tablica[ indeks ] << std::endl;
   
}

int sumujLiczby( int tablica[], int ile )
{
    int oblicz = 0;
    for( int indeks = 0; indeks < ile; indeks++ )
         oblicz += tablica[ indeks ];
   
    return oblicz;
}

int main()
{
    int dane[ 5 ];
    dane[ 0 ] = 11;
    dane[ 1 ] = 5;
    dane[ 2 ] = 7;
    dane[ 3 ] = 8;
    dane[ 4 ] = 2;
    wypiszTablice( dane, 5 );
    int wynik = sumujLiczby( dane, 5 );
    std::cout << "Suma liczb wynosi = " << wynik << std::endl;
    return 0;
}

Zadanie domowe

  • Napisz sumowanie liczb pętlą
    do...while
     działające tak samo jak sumowanie wykonane za pomocą pętli
    for
    , które zostało przedstawione w niniejszym rozdziale.
  • Napisz program, który za pomocą pętli
    for
     wypełni 20 elementową tablicę następującym ciągiem liczb: {1, 6, 11, ... , (1 + n*5)}. Zawartość wypełnionej tablicy wypisz na ekran.
  • Napisz program który wykona wszystkie poniższe kroki w podanej kolejności:
    • Losuje 10 liczb z przedziału od 10 do 30 włącznie i zapisuje je do tablicy;
    • Wypisuje 10 wylosowanych liczb od początku do końca;
    • Wypisuje 10 wylosowanych liczb od końca do początku;
    • Znajduje najmniejszą oraz największą wylosowaną liczbę.
    • Wypisuje najmniejszą i największą wylosowaną liczbę.
    Program nie może używać pętli innych niż pętla
    for
    .

Uwaga!
Wszystkie programy mają wykorzystywać funkcje. Przykładowo: kod funkcji main dla ostatniego programu powinien wyglądać następująco:
C/C++
int main()
{
    int tablica[ 10 ];
    wylosujLiczby( tablica, 10 );
    wypiszTablice( tablica, 10 );
    wypiszTabliceOdTylu( tablica, 10 );
    int iMin = znajdzMinimum( tablica, 10 );
    int iMax = znajdzMaksimum( tablica, 10 );
    wypiszMinMax( iMin, iMax );
    return 0;
}
Pozostałe programy powinny mieć zbudowaną funkcję main analogicznie do powyższego przykładu.
Poprzedni dokumentNastępny dokument
Losowanie bez powtórzeńPoziom 3