Petlja while se najčešće rabi ako broj ponavljanja petlje nije unaprijed poznat, nego ovisi o ispunjenju zadanog uvjeta.
Osnovni oblik petlje while je:
while (uvjet)
{
blok naredbi
}
naredba iza bloka
-
Kod ove se vrste petlje uvjet ispituje na početku, a blok naredbi petlje ponavlja se sve dok je uvjet ispunjen.
-
Uvjet je logički izraz čiji rezultat mora biti logički podatak (tip bool). Kada rezultat postane logička neistina (false, 0), preskače se blok naredbi petlje i program se nastavlja od prve naredbe nakon bloka naredbi petlje.
-
Pošto se kod petlje while uvjet ispituje na početku može se dogoditi da se blok naredbi u petlji ne izvrši niti jednom.

|
Zadatak:
|
Treba unijeti N realnih brojeva (N nije unaprijed poznat!) pa izračunati i prikazati njihovu srednju vrijednost (brojeve upisuje korisnik). Nakon posljednjeg broja treba unijeti nulu. Ispis neka bude oblika:
Nakon posljednjeg broja unesi nulu.
Unesi broj:
Unesi broj:
...
Uneseno je ... brojeva. Srednja vrijednost je ....
|
-
Na početku programa, prije petlje, od korisnika se očekuje unos prve vrijednosti x (naredba cin>>x) čime se određuje hoće li se petlja uopće pokrenuti.
-
Petlja će se ponavljati sve dok se unose vrijednosti različite od 0. To određuje uvjet: while(x!=0).
-
Po ulasku u petlju treba uneseni broj x pribrojiti pomoćnoj varijabli zbroj. Uz to, treba prebrojiti koliko je brojeva uneseno tako da se sadržaj pomoćne varijable broj uveća za 1. Zatim treba unijeti sljedeći broj x koji će biti provjeren uvjetom petlje. Taj će broj odrediti hoće li petlja stati ili će nastaviti s izvršavanjem.
-
Po završetku petlje računa se srednja vrijednost (zbroj/broj).
Rješenje:
|
#include<iostream>
using namespace std;
int main()
{
cout<<" Program racuna srednju vrijednost N unesenih brojeva."<<endl;
float x,broj,zbroj;
broj=0;
zbroj=0;
cout<<"Nakon posljednjeg broja unesi nulu"<<endl;
cout<<"Unesi broj:"<<endl;
cin>>x;
while(x!=0)
{
broj++;
zbroj+=x;
cout<<"Unesi broj:";
cin>>x;
}
cout<<"Uneseno je "<<broj<<" brojeva. Srednja vrijednost je "<<zbroj/broj<<endl;
return 0;
} |
Rezultat:
|
Program racuna srednju vrijednost N unesenih brojeva. Nakon posljednjeg broja unesi nulu.
Unesi broj:
234
Unesi broj:
13
Unesi broj:
345
Unesi broj:
65
Unesi broj:
77
Unesi broj:
0
Uneseno je 5 brojeva. Srednja vrijednost je 146.8
|
|
|
Zadatak:
|
Potrebno je unesenom prirodnom broju prebrojiti znamenke. U slučaju da je broj manji ili jednak nula, upis se ponavlja. Ispis neka bude oblika:
Upisi prirodni broj:
Broj znamenka je: ...
|
-
Broj znamenaka upisanog broja nije unaprijed poznat. Pomoći će petlja while:
-
Za prebrojavanje znamenaka uvodi se pomoćna varijabla br čija je početna vrijednost 0 (br=0).
-
Početna vrijednost varijable koja se koristi u uvjetu je uneseni broj (b).
-
Petlja će se ponavljati sve dok je vrijednost varijable b veća od 0. Zato je uvjet: while(b>0).
-
Da bi se znamenke prebrojale od vrijednosti varijable b valja odvojiti znamenku najmanje težinske vrijednosti pa dobiveni rezultat vratiti u varijablu b (b=b/10). Zatim treba varijablu koja prebrojava znamenke (br) uvećati za 1 (br=br+1).
-
Nakon toga treba provjeriti uvjet petlje. Ako je uvjet: while (b>0) ispunjen, blok naredbi se ponavlja.
-
Kada se prebroji posljednja znamenka (znamenka najveće težinske vrijednosti), uvjet više neće biti ispunjen pa će se petlja prekinuti.
-
Npr. za broj 345, broj znamenaka je 3:
|
345710=34 |
br=br+1=0+1=1 |
34>0 ? |
DA |
|
34/10=3 |
br=br+1=1+1=2 |
3>0 ? |
DA |
|
3/10=0 |
br=br+1=2+1=3 |
0>0 ? |
NE |
Rješenje:
|
#include<iostream>
using namespace std;
int main()
{
int br,b;
cout<<"Program unesenom prirodnom broju prebrojava znamenke."<<endl;
upis:cout<<"Upisi prirodni broj: ";
cin>>b;
if (b<=0)
{
goto upis;
}
br=0;
while(b>0)
{
b=b/10;
br=br+1;
}
cout<<"Broj znamenki je: "<<br<<endl;
return 0;
}
|
Rezultat za broj 67432:
|
Program unesenom prirodnom broju prebrojava znamenke.
Upisi prirodni broj: 67432
Broj znamenki je: 5
|
|
|
|