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 zmiennej i nadaniu jej 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++.
Ż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ę:
Dla przykładu zrealizujmy następujące zadanie:
Wyświetl n kolejnych liczb parzystych, gdzie n podajemy z klawiatury.
#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;
return 0;
}
#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;
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.