Programska petlja for

1. Petlja for

1.1. Primjeri

Primjer 1.

Petljom

            for (i=1;i<=10;i++)
               printf("\nDanas je ponedjeljak.");

na zaslonu će se deset puta ispisati rečenica „Danas je ponedjeljak.”, svaki put u novi red /*zbog konstante \n ispred početka rečenice*/.

Zašto?

Varijabla i je kontrolna varijabla, čija se vrijednost najprije postavlja na 1. Nakon toga se provjeri uvjet (i<=10). S obzirom na to da je zadani uvjet istinit (jer 1 je manji od 10), na zaslonu se ispiše zadana rečenica. Zatim se, zbog promjene vrijednosti kontrolne varijable (i++), ta vrijednost  poveća za 1 (postavi na 2) i izvođenje se vraća na početak. Naredba će se posljednji put izvršiti kada se vrijednost kontrolne varijable postavi na 10. Nakon što se vrijednost kontrolne varijable postavi na 11, uvjet neće biti ispunjen i program počinje izvršavati prvu naredbu nakon for bloka.

NAPOMENA: Ako program zahtijeva blok naredbi za ponavljanje, a oznake početka i kraja bloka ({ i }) se izostave, program će dati pogrešan rezultat. U tom slučaju C ponavlja samo prvu naredbu nakon for. Preostale naredbe iz bloka izvršavaju se izvan naredbe ponavljanja! 

 

Primjer 2.

Petljom

for(i=100;i<=110;i++)
     printf("%d ",i);

na zaslonu će se ispisati brojevi 100, 101, 102, 103, 104, 105, 106, 107, 108, 109 i 110 odvojeni razmakom.

Primjer 3.

Petljom

for(i=100;i<=110;i+=2)
     printf("%d ",i);

na zaslonu će se ispisati brojevi  100, 102, 104, 106, 108 i 110 odvojeni razmakom.

                                                                                 

Naredbe ponavljanja mogu se kombinirati sa svim naredbama koje se koriste u programiranju. Razmislite kako bi ovaj primjer riješili kombinacijom sa naredbom grananja. Neka vam pomogne ovaj pseudokod:

za b = 100 do 110 činiti
    ako je b mod 2 = 0 onda ispis (b);

Primjer 4.

Dio programa

s = 0;
scanf("%d", &n);
for (i=1; i<=n; i++)
    s = s + i;
printf ("%d", s);

na zaslon će ispisati zbroj brojeva od 1 do n.

Provjerimo!
Neka je n=4;
za b=1 => s=0+1=1;
za b=2 => s=1+2=3;
za b=3 => s=3+3=6;
za b=4 => s=6+4=10;
A to je upravo 1+2+3+4!

Primjer 5.

Dio programa

scanf("%d",&broj)
for (i=1; i<=4; i++)
{
     znam=broj%10;
     printf("%d",znam);
     broj=broj/10;
}

će na zaslon ispisati znamenke unesenog četveroznamenkastog broja.

Provjerimo!
Neka je broj=2314;

Za b=1 => znam = 2314 % 10 = 4 => ispis 4 => broj = 2314 / 10 =231;
Za b=2 => znam = 231 % 10 = 1 => ispis 1 => broj = 231 / 10 =23;
Za b=3 => znam = 23 % 10 = 3 => ispis 3 => broj = 23 / 10 =2;
Za b=4 => znam = 2 % 10 = 2 => ispis 2 => broj = 2 / 10 =0;
 

Na isti način možemo ispisivati znamenke troznamenkastog, peteroznamenkastog ili bilo kojeg broja kojem znamo broj znamenki. Samo mijenjamo završnu vrijednost kontrolne varijable.

Ali, što kada želimo napraviti općeniti program? Za broj kojemu ne znamo unaprijed broj znamenki?

U tom slučaju ne možemo koristiti petlju s poznatim brojem ponavljanja, već jednu od petlji kod kojih ponavljanje ovisi o uvjetu! Iako je i petlja for uvjetna petlja, u takvim zadacima prikladnije je upotrijebiti pelju while. 


Primjer 6.

U ovom su programu učinjene tri pogreške. Pronađite ih bez uporabe računala.

#include <stdio.h>
int main()
{
     int br,a,i;
     float s=0,ars;
     printf("\n Koliko imate ucenika? ");
     scanf("%d",&br);
     for(i=1,i<=br,i++);
     {
           printf("\nUpisite ocjenu %d. ucenika: ",i);
           scanf("%d",&a);
           if ((a<1)||(a>5))
                i--;
           else
                s+=a;
     }
     ars=s/br;
     printf("\n Srednja ocjena razreda je %.2f",ars);
     return 0;
}

Rješenje

  • unutar petlje for, početna vrijednost i uvjet ponavljanja odvajaju se znakom ;
  • uvjet ponavljanja i promjena vrijednosti kontrolne varijable odvajaju se znakom ;
  • iza naredbe for ne smije se pisati ; jer se blok koji slijedi neće ponavljati u petlji