Naredbe ponavljanja

3. Ponavljanje koje ovisi o uvjetu

3.2. Petlja s provjerom uvjeta na kraju

PONAVLJATI ... DOK JE (UVJET)

Ovu naredbu koristimo kada nam nije unaprijed poznat broj ponavljanja, a uvjet se provjerava na kraju.

Tipični su primjeri programi kod kojih se naredbe unutar petlje moraju izvršiti najmanje jednom, čak i ako uvjet nije ispunjen.

Zadatak:

Omogućiti unos ocjena za učenike sve dok to želi korisnik. Izračunati i ispisati srednju ocjenu.

Za rješavanje ovakvih problema možemo koristiti petlju s provjerom uvjeta na kraju. Njezin je opći oblik:

ponavljati
 
naredbe;
dok je
uvjet;

Naredbe unutar ove petlje također se ponavljaju se sve dok je uvjet istinit.

Pokušajmo sada riješiti zadatak.

Podsjetimo se!
Srednja ocjena dobije se tako da se zbroje sve ocjene i taj broj se podijeli sa brojem ocjena.

Algoritam koji rješava problem sa početka:

ponavljati
unos (ocjena)
   zbroj:=zbroj+ocjena;
   broj:=broj+1;
   izlaz ("Želite li još unositi podatke?");
   unos (odgovor);
dok je (odgovor<>"ne");
srednja:=zbroj/broj;
izlaz (srednja);

Primjer:

Koju će vrijednost ispisati sljedeći algoritam za n = 1235?

ulaz ( n );
k := 1;
ponavljati
  ako je n MOD 2 = 0
  onda k := k + 1;
  n := n DIV 10;
do n = 0;
izlaz (k);

Rješenje:

Ispisat će se broj 2.

Zbog čega?

Na početku je vrijednost varijable k jednaka 1.
Sada ulazimo u petlju i izvršavaju se redom naredbe:
ako je n mod 2 = 0 onda k:=k+1;
n mod 2 = 1235 mod 2 = 1 => uvjet nije ispunjen, vrijednost varijable k se ne mijenja.
Sljedeća naredba je n:= n DIV 10 => n:=1235 div 10 = 123;
Sada se provjerava uvjet zaustavljanja. Kako je n=123 i nije jednak nuli, program se vraća na početak naredbe ponavljanja.

n mod 2 = 123 mod 2 = 1 => uvjet nije ispunjen, vrijednost varijable k se ne mijenja.  n:= n DIV 10 => n:=123 div 10 = 12; => n nije jednak nuli, program se vraća na početak naredbe ponavljanja.

n mod 2 = 12 mod 2 = 0 => uvjet je ispunjen, vrijednost varijable k se povećava za 1 (k=2).
n:= n DIV 10 => n:=12 div 10 = 1; => n nije jednak nuli, program se vraća na početak naredbe ponavljanja.

n mod 2 = 1 mod 2 = 1 => uvjet nije ispunjen, vrijednost varijable k se ne mijenja.
n:= n DIV 10 => n:=1 div 10 = 0; => n je jednak nuli, program ide na sljedeću naredbu => izlaz (k) i na zaslon se ispisuje broj 2
 

Zadatak:

Napravite algoritam za program koji traži unos brojeva sve dok se ne unese 0. Program treba na zaslon ispisati koliko je unesenih brojeva (bez nule).