Pętla for

pętla for c/c++

Pętla for

Zaczniemy od pętli for. Charakteryzuje się ona tym że z góry wiemy ile razy się wykona.  Zanim jednak zaczniemy warto umówić jak to wygląda for(start; stop; krok). Jak zauważyłeś składa się ona z 4 elementów. Słowa kluczowego for wartości początkowej (start) kroku czyli o ile wartość początkowa będzie się zmieniała za każdym powtórzeniem oraz stopu czyli kiedy należy przestać. Najłatwiej będzie wytłumaczyć jej działanie na jakimś prostym przykładzie.

#include <iostream>

using namespace std;
int main()
{
    int i;
    for(i = 1; i <= 10; i++) // start, do kiedy się wykonywać, krok
    {
        cout<<i<<endl; //wypisanie zmiennej i oraz przejście do nowej linii
    }

    return 0;
}

Program wypisuje kolejno liczby od 1 do 10 każdą w nowej linii. Jak widzisz to wcale nie jest takie trudne. Wartość początkowa pętli to 1. Pętla wykonuje się dopóki jest mniejsze lub równe 10. Na końcu jest krok i++ w języku C i C++ jest  to równoważne z zapisem i = i + 1. Częściej jednak korzystać się z zapisu skróconego ponieważ jest on bardziej czytelny. Oczywiście i– będzie równoważne z i = i – 1 co mam nadzieję jest logiczne. Warto dodać że ciało pętli czyli to wszystko co jest pomiędzy klamrami może zawierać dużo bardziej skomplikowane instrukcje. Przejdźmy do kolejnego przykładu.

#include <iostream>

using namespace std;
int main()
{
    cout<<"Podaj 5 liczb"<<endl;
    int liczba, suma = 0; //tworzymy dwie zmienne int
    float srednia; //tworzymy zmienną ułamkową
    for(int i = 5; i > 0; i--) //wewnątrz nawiasów pętli tworzymy zmienną początkową
    {
        cout<<i<<". "; //wypisujemy zmienną i 
        cin>>liczba;
        suma = suma + liczba; //sumujemy pobrane wartości
    }
    srednia = suma / 5.0; //obliczamy średnią
    cout<<"Srednia wynosi "<<srednia; //wyświetlamy zmienną float 

    return 0;
}

Ten przykład może być troszeczkę bardziej skomplikowane ale to dlatego że jest w nim zmienna typu float. Myślę że to jest dobry moment żeby przyjrzeć się jej trochę bardziej i wytłumaczyć pewne sprawy. Zacznijmy jednak od początku. Tym razem pętla for odlicza od 5 do 1 zwróć uwagę na skrócony zapis i- –. W ciele pętli obliczamy wartość zmiennej suma jest to zabieg dozwolony i jak najbardziej poprawny. Pętla wykonuje się 5 razy a później już poza jej ciałem liczmy wartość zmiennej srednia. Aby uzyskać poprawny wynik wartość zmiennej suma jest podzielona przez 5.0 (czyli też przez zmienną float). Dla nas nie ma to różnicy czy liczbę podzielmy przez 5 czy przez 5.0 ale dla komputera jak najbardziej ma. Dzięki temu uzyskujemy dokładny wynik a nie liczbę całkowitą. Jest to pewien niuans o którym musimy pamiętać. Następnie coutem wypisujemy średnią na ekranie. Rzućmy okiem teraz na jeszcze jeden przykład.

#include <iostream> 

using namespace std;
int main()
{
    int k, suma=0;
    cout<<"Program się zakonczy gdy suma = 13"<<endl;
    cout<<"Podaj zmienna k"<<endl;
    for(int i = 0; suma!=13; i++) //ciekawy warunek kończący
    {
        cin>>k;
        suma += k; //skrócony zapis suma = suma + k
        cout<<"Suma wnosi: "<<suma<<endl;
    }

    return 0;
}

Ten przykład pokazuje że warunek kończący nie musi być taki oczywisty i jasny. Program działa dopóki zmienna jest różna od 13 (!= różny od). Teoretycznie ta pętla może trwać w nieskończoność to od użytkownika zależy kiedy się zakończy. Warty uwagi jest również zapis suma += k jego znaczenie jest wytłumaczone w komentarzu. Zapis suma -= k oznaczałby suma = suma – k.  Oczywiście im więcej przećwiczysz samodzielnie tym lepiej zrozumiesz pewne mechanizmy działania. Do czego bardzo Cię zachęcam. Poniżej fragment kodu z instrukcją warunkową.

#include <iostream>

using namespace std;
int main()
{
    int liczba, licznik = 0;
    cout<<"Podaj liczby parzyste"<<endl;
    for(int i = 0; i<5; i++)
    {
        cin>>liczba;
        if(liczba%2 == 0) //modulo (reszta z dzielenia)
        {
            cout<<":)"<<endl;
            licznik++;
        }
        else
        {
            cout<<":("<<endl;
        }
    }
    cout<<"Podales "<<licznik<<" parzystych i "<<5-licznik<<" nieparzystych";
    
    return 0;
}

Taki prosty fragment kodu. Być może zastanawiasz się co oznacza zapis liczba%2 == 0. Należy czytać to w ten sposób. Jeżeli reszta z dzielenia zmiennej liczba przez 2 wynosi 0 to. Modulo jest bardzo przydatne podczas  pisania algorytmów i nie tylko.

Instrukcja break i continue

Bardzo ważne i przydane instrukcje które są nierozłącznym elementem pętli. Słowo kluczowe break „kończy” pętle. Bezwarunkowo kończy jej działanie wychodząc z niej. Continue zaś przechodzi do kolejnego obiegu pętli pomijając wszystkie następne instrukcje które są w kolejce. Aby lepiej to zrozumieć warto spojrzeć na ilustracje pomocnicze. Czerwona strzałka wskazuje miejsce do którego kompilator „przeskakuje” po natknięciu się na instrukcje break lub continue.

pętla for c/c++

 

#include <iostream>

using namespace std; 
int main()
{
    int wybor;
    cout<<" 0 - BREAK 1 - CONTINUE";
    for(int i=1; i<=999; i++)
    {
        cout<<"Obieg petli "<<i<<endl;
        cin>>wybor;
        if(wybor==1) continue; //przejście do 9 linijki kodu
        if(wybor==0) break; //przejście do 19 linijki kodu
        cout<<"Instukcja nr.1"<<endl;
        cout<<"Instukcja nr.2"<<endl;
        cout<<"Instukcja nr.3"<<endl;
       
        
    }
    cout<<endl<<"Koniec petli";
    
    return 0;
}

Przetestuj działanie tego kodu. Lepiej zrozumiesz jak działają te instrukcje i jaki mają potencjał w programowaniu. Na zakończenie ciekawostka.

#include <iostream>

using namespace std;
int main()
{
    for(;;)
    {
        cout<<"Never gonna give you"<<endl;
    }

    return 0;
}

Zapis for(;;) oznacza nieskończoną pętle. Ten sam efekt można uzyskać ustalając odpowiedni warunek kończący oraz krok na przykład for(int i=0; i<1; i–) jednak nigdy nie należy tego robić.

Podsumowanie

Warto abyś zapamiętał że kolejność składni w pętli jak najbardziej ma znaczenie. Zawsze na początku jest start później warunek i na końcu krok. Nie wiem czy zwróciłeś uwagę na to że średnik występuje po starcie i warunku po kroku już nie ma średnika. Mówię to ponieważ na początku możesz o tym zapominać i ciężko będzie Ci znaleźć błąd w kodzie. Pętla for użyta w odpowiedni sposób potrafi ułatwić nam mnóstwo pracy i daje niesamowite możliwości a niewłaściwy może zawiesić komputer. Na samym końcu pokazałem Ci jak z niej nie korzystać.