16.1.2012 dvije godine postojanja naših stranica

Petlja while

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