Programowanie i algorytmy

Instrukcja iteracyjna for

powrót

Instrukcja iteracyjna for jest bardzo elastyczną instrukcją (tak jak cała struktura języka C++). Złożona jest  z trzech części oddzielonych średnikami:

for(część a; część b; część c)

{

//blok instrukcji, który będzie powtarzany

}

W części pierwszej najczęściej inicjujemy licznik lub liczniki pętli for. Inicjacja licznika, w tym przypadku polega na stworzeniu i nadaniu wartości początkowej. Popatrzmy na przykład, gdzie "i" jest licznikiem:

//inicjalizajca jednego licznika
for(int i = 0; i < 100 ; i++)
{
        //ciąg instrukcji
}
 
//inicjalizacja dwóch liczników - separatorem jest znak przecinka
for(int i = 0, j = 10; i < j; i++, j--)
{
        //ciąg instrukcji
}
 
 

 

W części drugiej definiujemy warunek, lub warunki, które wpływają na ilość powtórzeń pętli. Instrukcja for będzie powtarzać ciąg instrukcji tak długo, jak długo zdefiniowane warunki będą  prawdziwe.

Źle sformułowane warunki mogą spowodować zapętlenie instrukcji for, to znaczy, że pętla będzie wykonywać się w nieskończoność. Np:

for(unsigned int i = 5; i >= 0; i++)
{
     //ta pętla nigdy się nie zakończy, ponieważ
     //warunek będzie zawsze prawdziwy
}

Część c określa operacje (najczęściej na liczniku), od których zależy zachowanie się pętli. Jeśli chcemy, aby licznik zwiększał się o jeden, wtedy ustawiamy operację w trzeciej części na i++.

Ważne!!!

Żeby dobrze operować na pętli for należy wiedzieć w jakiej kolejności wykonują się poszczególne jej części. W pierwszej kolejności i tylko raz wykona się część inicjująca liczniki, czyli część a. Następnie cyklicznie wykonują się:

  1. najpierw część b, która sprawdza poprawność warunku
  2. następnie instrukcje należące do pętli for
  3. a na samym końcu część c, wykonująca operacje na liczniku.

 pętla for

Dla przykładu zrealizujmy następujące zadanie:

 

Przykład. Wyświetl n kolejnych liczb parzystych, gdzie n podajemy z klawiatury.

Rozwiązanie - sposób pierwszy
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
 
    unsigned int n;
    cout<<"Podaj ile liczb parzystych chcesz wyświetlić: ";
    cin>>n;
 
    //licznik "i" kontroluje ilość wykonań pętli - 
    //pętla musi wyświetlić "n" liczb parzystych, 
 
    //przy każdym przejściu pętli zwiększamy "i" o 1 (i++),
 
    //licznik "j" przechowuje kolejne liczby parzyste, 
    //dlatego w tym przypadku zwiększenie
 
    //jest o 2 (i+=2)
 
    for(int i = 0, j=0; i < n; i++, j+=2)
    //przy każdym przejściu pętli wyświetlamy wartość licznika "j"
    cout<<j<<" "; 
 
    cout<<endl; 
 
    system("PAUSE");
    return 0;
}

 

Rozwiązanie - sposób drugi
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
    unsigned int n;
    cout<<"Podaj ile liczb parzystych chcesz wyświetlić: ";
    cin>>n;
 
    for(int i = 0; i<2*n; i++) 
    // gdybyśmy sformułowali warunek i<2, to
    //program wyświetliłby o połowę mniej liczb 
    if(i%2==0) //lub if(!(i%2))
               cout<<i<<" ";
 
    cout<<endl;  
 
    system("PAUSE");
    return  0;
}
 

 

Konstrukcja pętli for dopuszcza sytuację, w której, jakaś część (a, b lub c) pętli może być pusta np.:

 

int i = 0;
 
for(; i < 10; ) // w tym przypadku część a i c są puste
{
    i+=2;
    cout<<i-1;
}

 

Zauważmy, że inicjacja licznika następuje przed pętlą for (wtedy ma ona większy zasięg - patrz. zasięg zmiennych), natomiast operacje na liczniku wykonywane są w bloku należącym do for.

Więcej przykładów w części - zadania.