C++: Pętla for
Składnia:
for ( wyrażenie1 ; warunek ; wyrażenie2 ) { instrukcje;}
wyrażenie1 – instrukcja wykonana na samym początku pętli, zazwyczaj ustawienie wartości początkowej licznika pętli
wyrażenie2 – instrukcja wykonana na końcu każdego obiegu pętli, zazwyczaj zmiana wartości licznika
warunek – sprawdzany jest przed każdym kolejnym obiegiem pętli, jeżeli warunek jest spełniony (jego logiczna wartość jest TRUE) to wykonywane są instrukcje, jeśli nie, kończymy wykonywanie pętli, a program przechodzi do kolejnej linijki kodu, za pętlą
Przykład:
Wypisanie na ekranie liczb od 0 do 10, jedna pod drugą:
for ( int i = 0; i<=10; i++ ){ cout<<i<<endl; }
Instrukcje na jakie możemy się natknąć wewnątrz pętli:
break; – kończy wykonywanie pętli, powoduje przejście do linijki kodu położonej bezpośrednio za pętlą
continue; – przerywa obieg pętli, nie zostaną wykonane pozostałe linie danego obiegu pętli, przechodzimy od razu do kolejnego obiegu
exit(0); – kończy działanie całego programu, wartość w nawiasie mówi nam czy program kończymy po wystąpieniu błędu, czy w sposób prawidłowy, jeśli wystąpi tu 0 lub z EXIT_SUCCESS – program zakończył się prawidłowo, każda inna wartość lub EXIT_FAILURE – z błędem.
Przykład działania instrukcji continue, break oraz funkcji exit:
while(1){ cout<<"Wprowadz a:\n"; int a; cin>>a; if(a == 1) break; cout<<"tekst po break`u\n"; if(a == 2) continue; cout<<"tekst po continue\n"; if(a == 3) exit(0); cout<<"no i cos na koniec − tylko jesli a bylo rozne od 1, 2, 3\n\n"; } cout<<"Wyszedlem z petli\n";
For od kuchni
Jak już pisałem część znajdująca się w nawiasie okrągłym pętli for składa się z 3 bloków. Nie oznacza to, że znajdą się tam tylko pojedyncze instrukcje i warunek.
Zazwyczaj myśląc pętla for mamy przed oczami taki widok:
for (int i=0; i<3;i++){ cout<<i<<endl; }
(program wypisujący liczby 1, 2 i 3)
Przyjrzyjmy się jednak poniższemu przypadkowi pętli:
for(int a=0, b=14; a<20; a++, b+=7){ cout<<b<<” ”; }
Jak widzicie mamy tu więcej jak 2 instrukcje i jeden warunek. W pierwszym bloku (do pierwszego średnika) znajdują się wartości początkowe 2 zmiennych, a oraz b. Wartości takie przyjmą te zmienne zaraz po wejściu do pętli. W trzecim bloku mamy natomiast w instrukcje, które wykonają się na koniec każdego obiegu pętli – a zwiększy się o 1, natomiast b o 7.
A co robi ten program ? Wypisuje na ekran 20 liczb – dlaczego 20 ? Bo zmienna a odpowiada nam za „licznik” obiegów. Jako pierwsza wypisze się liczba 14, bo taką wartość początkową przyjmie nasza zmienna b. W każdym kolejnym obiegu pętli wypisze się na ekran zmienna o 7 większa niż w poprzednim, a więc kolejno wypiszą się liczby: 14, 21, 28, 35, itd.
Jeszcze rzadziej spotykaną i prawie nigdy nie omawianą odmianą pętli for jest pętla nieskończona.
Nie zawiera ona warunku zakończenia, a w swojej ekstremalnej wersji nie zawiera też wartości wyrażeń z pierwszej i trzeciej grupy nawiasu okrągłego. Czyli coś takiego:
for(;;){ cout<<”Wypisuję to sobie w nieskończoność. A co.”; }
No dobrze, tylko po co nam coś takiego ? Podam Wam prosty przykład zastosowania.
Załóżmy że chcemy koniecznie za pomocą pętli for stworzyć program wczytujący od użytkownika liczbę. W zależności od tego – jaką liczbę poda wykonamy określoną akcję – czyli coś w rodzaju prostego, zapętlonego menu wyboru.
int a; for(;;){ cout<<”Wprowadz liczbe”; cin>>a; if(a<>0){ cout<<a; continue; } else{ break; } }
Wyjaśnienie:
Użytkownik wprowadza liczbę. Jeśli wpisze 0 wyjdzie z pętli, jeśli wpisze jakąkolwiek inną liczbę, zostanie poproszony o jej podanie ponownie.