Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

"pojasnjenje petlje while"

[es] :: C/C++ programiranje :: C/C++ za početnike :: "pojasnjenje petlje while"

[ Pregleda: 2053 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sammo

Član broj: 127354
Poruke: 64
193.170.62.*



Profil

icon "pojasnjenje petlje while"15.11.2007. u 00:06 - pre 200 meseci

dali mi neko moze na sledece odgovoriti a nakon toga reci ukratko svoje shvatanje,i najvaznije o while, naravno ako niste na pitanje previse cesto odgovorili (; ,ja sam citao u starim odgovorima ali mi nisu bas potpuno dali ogovore.
puno hvala.
#include<iostream>
using namespace std;
int main(){
int n,i=1,s=0;
cout<<"Input,N:";
cin>>n; // input n=3
while(i<=n){
cout<<"i:"<<i<<endl; // i ide 1 pa 2 pa3,sto razumim.
cout<<"s="<<s<<endl;// redosljed od s je:0,2,3 sta je bilo sa jedinicom?
s=s+i; //koja je pocetna vrijednost od "i"?pretpostavljam prve operacije su u prvoj formuli.
i=i+1;
i neko vase generalno objasnjenje ovog code ,hvala (;.
}

cout<<"Output,S="<< s<<endl;//output s=6
system("PAUSE");
return 0;
}
 
Odgovor na temu

virtualVoid

Član broj: 161084
Poruke: 698



+28 Profil

icon Re: "pojasnjenje petlje while"15.11.2007. u 07:47 - pre 200 meseci
Naredba „while“
U jeziku C++ odgovarajuća upravljačka struktura koja vrši ponavljanje naredbi sve dok je
neki uslov ispunjen predstavljena je naredbom „w h i l e“. Ona se koristi u sljedećem
obliku:
Code:
while (neki_uslov)
{
naredba_1;
naredba_2;
naredba_3
...
}

Smisao naredbe „while“ je u sljedećem: uslov (izraz) u zagradi se izračunava, i ako je on
tačan (preciznije, različit od 0), izvršavaju se naredbe u bloku navedenom unutar vitičastih
zagrada neposredno iza naredbe while, slično kao i kod naredbe if. Nakon što se čitav blok
izvrši, uslov se ponovno provjerava, i ako je on i dalje tačan, blok naredbi se ponovo
izvršava, itd. Dakle, blok naredbi se izvršava sve dok je navedeni uslov tačan. Tek kada
uslov postane netačan, program se nastavlja izvršavati od sljedeće naredbe iza while-bloka.
U slučaju kada se blok sastoji od samo jedne naredbe, vitičaste zagrade koje određuju
pripadni blok se ne moraju pisati.
Kao ilustraciju naredbe while napišimo sekvencu naredbi koja će ispisivati sve brojeve od 1
do 100 (svaku u novi red):
Code:
int i=1;
while (i<= 100)
{cout<<i<<endl;
i++;
}
Ili:
int i =1;
while (i<=100)
cout<<i++<<endl;

Kako se kod naredbe while blok izvršava sve dok je naznačeni uslov ispunjen, slijedi da bi
petlja imala smisla, mora se nalaziti, makar negdje unutar petlje, neka od naredbi koja će
promijeniti vrijednost neke od varijabli koje se javljaju unutar uslova. U suprotnom, ako je
uslov na početku bio tačan, takav će sigurno i ostati, pa se petlja nikad neće završiti. U
ekstremnijim slučajevima, čak i samo uslov može mijenjati vlastite varijable, kao u
slijedećem primjeru, koja radi što i prethodna dva:
Code:
int i=0;
while (++i<=100)
cout<<i<< endl;

Sljedeći program omogućava korisniku da unosi nenegativne brojeve i pamti ukupnu sumu
unesenih brojeva. Kada se unese negativni broj, program ispisuje izračunatu sumu (ne
računajući i taj negativni broj) i završava sa radom. Ideja je u tome da uvedemo neku
varijablu, nazovimo je suma čija će početna vrijednost biti nula. Svaki put kada unesemo
novi broj, njega samo nadodajemo na trenutnu vrijednost sume. Postupak se ponavlja sve
dok su uneseni brojevi nenegativni:
Code:
#include <iostream>
using namespace std;
void main (void)
{
int suma =0; //Suma unesenih brojeva
int broj; //Broj unijet od strane korisnika
cout<<"Unesi brojeve koji ce se sabirati ";
cout<<" negativan broj oznacava prekid.\n ";
cout<<"Unesi broj ";
cin>>broj;
while (broj>=0)
{
suma+=broj;
cout<< "Unesi broj: ";
cin>> broj;
}
cout<< "\nSuma unesenih brojeva: "<<suma;
system ("PAUSE");
}

Primjećujete da smo ovdje istu naredbu za unos morali pisati 2 puta, jednom ispred petlje,
a drugi put unutar petlje. Razlog je u činjenici da se uslov kod naredbe while ispituje na
početku petlje, tako da odmah na početku moramo znati kakav je broj da bismo znali da li
petlja treba uopće da se izvrši ili ne. Taj problem možemo riješiti sljedećim, funkcionalno
ekvivalentnim, ali logički elegantnijm programom:
Code:
#include <iostream>
using namespace std;
void main (void)
{
int suma=0, broj=0;
cout<<"Unesi brojeve koji ce se sabirati ";
cout<<" negativan broj oznacava prekid.\n ";
while (broj>=0)
{
cout<<"Unesi broj:";
cin>>broj;
if (broj>=0)
suma+=broj;
}
cout<<"\nSuma unesenih brojeva je: "<<suma;
system ("PAUSE");
}

Primjećujete da smo ovdje, na prvi pogled nepotrebno, inicijalizirali i varijablu broj. Ovo je
neophodno iz sljedećeg razloga: ako varijablu broj ne inicijaliziramo, njena početna
vrijednost će biti slučajna (nepredvidiva).
Česta greška prilikom korištenja naredbe while je stavljanje tačka-zareza iza naredbe
while. Najgore je što u tom slučaju kompajler neće javiti grešku, nego će program raditi, ali
neispravno, jer će računar smatrati da je tijelo petlje prazno, a naredbe koje smo željeli da
budu u petlji izvršit će se izvan nje! Vjerojatno će se program „zaglaviti u mrtvoj petlji, jer
ako je uslov bio ispunjen na početku, takav će ostati zauvijek, jer su se naredbe koje
mijenjaju vrijednost varijabli koje učestvuju u izrazu najvjerojatnije nalazile unutar bloka,
koji nije shvaćen kao pripadni blok while petlje.
Zašto kompjaler ne otkriva grešku s tačka-zarezom?
Formalno gledajući, ovo nisu jezičke nego logičke greške: petlje bez tijela nisu zabranjene
u jeziku C++ i nekad čak imaju i smisla.

[Ovu poruku je menjao virtualVoid dana 16.11.2007. u 09:38 GMT+1]
...
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.234.*

ICQ: 208550327


+14 Profil

icon Re: "pojasnjenje petlje while"15.11.2007. u 23:38 - pre 200 meseci
Let the "[CODE] [/CODE]" force be with you! :)
EOF
 
Odgovor na temu

virtualVoid

Član broj: 161084
Poruke: 698



+28 Profil

icon Re: "pojasnjenje petlje while"16.11.2007. u 08:39 - pre 200 meseci
Citat:
glorius: Let the "[CODE] [/CODE]" force be with you!


voila
...
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: "pojasnjenje petlje while"

[ Pregleda: 2053 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.