Pętla for

Kiedy poznawałeś algorytmy, jeden rodzaj z nich różnił się od pozostałych. Algorytm iteracyjny. Pozwalał na powtarzanie kilkakrotnie tej samej czynności, zwiększając licznik, która wykonywała się dopóki warunek był prawdziwy.

Oto ogólny algorytm pętli.



Pierwszą rzeczą jaką należy omówić jest inkrementacja i dekrementacja.

Inkrement(przyrost) – dodanie do zmiennej jedynki

W jaki sposób do zmiennej możemy dodać jedynkę. Jeden sposób już znasz:

int iZmienna = 0;
iZmienna = iZmienna + 1;

Jednak zapis jest długi, więc w języku C++ powyższe polecenie możemy zastąpić poniższym:

int iZmienna = 0;
iZmienna++;

Jeśli pamiętasz, użyłem już takiego skróconego zapisu przy tłumaczeniu zagrożeń jakie niesie alternatywa w if. Jednak to nie wszystko C++ oferuje nam 4 skrócone zapisy:

Preinkrementacja     ++a
Postinkrementacja    a++

Dekrementacja – odjęcie od zmiennej jedynki.

Predekrementacja     --a
Postdekrementacja    a--


Czym więc różni się pre od postinkrementacji? W przypadku gdy znaki są przed naszą zmienną, najpierw zostanie ona zwiększona/zmniejszona o jeden, a następnie wyświetlona lub użyta w pętli do sterowania. Gdy znaki są po prawej stronie, zmienna wyświetli lub użyje swojej obecnej wartości, po czym zwiększy/zmniejszy się o jeden.


Jest to dosyć zawiłe, przeanalizuj poniższy program.

10.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      int a = 12;
8:      cout<<a<<endl;
9:      cout<<++a<<endl;
10:      cout<<a++<<endl;
11:      cout<<a<<endl;
12:
13: }


Program akurat wykorzystuje inkrementację. Zwróć uwagę na wyniki, które pojawią się na konsoli.

12
13
13
14


Najpierw wyświetlamy liczbę a = 12, następnie program dodaje do niej jeden, po czym wyświetla a = 13. W 10. linijce do zmiennej dodana zostanie jedynka, lecz najpierw zmienne zostanie wyświetlona więc a = 13. W kolejnej linijce wyświetlamy a, które wynosi teraz 14.

Zadania
8. Napisz program, który powyższą zasadę pokaże z dekrementacją.


Skoro już wiesz jak zwiększyć zmienną o jeden. Czas poznać składnię pętli for.

for(licznik; warunek; licznik++)
{
     Dzialanie;
}

Na początku słowo kluczowe for, a następnie w nawiasach okrągłych oddzielone średnikami trzy elementy.

Licznik jest zmienną, którą wykorzystujemy w warunku.

Warunek najczęściej w pętli for jest zależny od licznika np. licznik < 10, czyli pętla wykona się tyle razy, aż zmienna licznik nie osiągnie wartości 10.

Następnie zwiększamy licznik o jeden. Możemy go również zmniejszyć. Przeanalizuj poniższe programy, w jednym będziemy zwiększać licznik, a w drugim zmniejszać. W pętli for najczęściej wykorzystuje się post inkrementację.

11.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      for(int i=0; i<10; i++)
8:      {
9:           cout<<i;
10:           cout<<"* ";
11:      }
12:
13: }


Wynikiem działania programu będzie ciąg:
0* 1* 2* 3* 4* 5* 6* 7* 8* 9*

Jak widzimy nasza pętla wyświetla nam zmienną i oraz gwiazdkę. Możemy zauważyć, że nasza pętla wykonała się 10 razy.

Dokładne omówienie linijki 7.

Naszym licznikiem jest zmienna i. Tworzymy ją następująco:

typ_zmiennej nazwa_licznika = wartość;

Możemy stworzyć tą zmienną poza pętlą, lecz w pętli jest wygodniej:

int i = 0;
for(i; warunek; i++)

Warunek. Zazwyczaj oparty na liczniku. Pętla wykonuje się dopóki warunek jest prawdziwy – true. Oto kilka przykładowych warunków:

i < 10 //w przypadku zwiększania licznika
i > 6 //w przypadku zmniejszania licznika

int iLiczba1 = 10;
i < iLiczba1

int iLiczba2 = 2;
i > iLiczba2

Przykładowy program z dekrementacją:

12.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      for(int i=10; i>10; i--)
8:      {
9:           cout<<i;
10:           cout<<"* ";
11:      }
12:
13: }


Wynik działania programu:
10* 9* 8* 7* 6* 5* 4* 3* 2* 1*

Poznałeś już dwa sposoby sterowania pętlą for poprzez inkrementację i dekrementację. Teraz wyświetlmy na konsoli, tyle gwiazdek, ile zażyczy sobie użytkownik.

13.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      int iLiczbaGwiazdek;
8:      cout<<"\t Podaj ile gwiazdek chcesz wyswietlic: \n\t Chce ... ";
9:      cin>>iLiczbaGwiazdek;
10:
11:      for(int i = 1; i <= iLiczbaGwiazdek; i++)
12:      {
13:           cout<<"*";
14:      }
15:
16: }


Wynik działania programu:
Podaj ile gwiazdek chcesz wyswietlic:
Chce … 6
******

Instrukcji w petli for może być więcej niż jeden. Wtedy oddzielamy je przecinkami np.

for(int i = 0, int b = 3; i < 10; i++, b--)

W pętli for można pominąć instrukcję, lecz wtedy jest to pętla nieskończona. Przykład takiej pętli zatrzymanej przez break, które możemy stosować także do przerywania pętli.

14.cpp


1: #include<iostream>
2:
3: using namespace std;
4:
5: int main()
6: {
7:      for(int i=1; ; i++)
8:      {
9:           cout<<i<<endl;
10:           if(i == 5) break;
11:      }
12:           cout<<"Petla przerwana!!!";
13: }


Pętla przerwie swoje działanie, gdy licznik osiągnie wartość 5. Stosujemy tutaj to samo słowo kluczowe co w przypadku switch. Break możemy także używać w innych rodzajach pętli.

Wynik działania programu:
1
2
3
4
5
Petla przerwana!!!

© Mateusz Ratajczak         www.commitcode.pl