PETLJE U PROGRAMSKOM JEZIKU C
Uvod u cikluse u programskom jeziku C - programiranje
Često je u programiranju potrebno jednu naredbu ili više naredbi ponoviti odrećen broj puta. Yamislimo sada kada bi morali da određene naredbe ispisujemo 100, 1000 ili 10000 puta. To bi bio težak, gotovo nemoguć posao. Posao bi bio olakšan kada bi ove naredbe, koje želimo da ponavljamo napisali samo jednom, a pomoću neke druge naredbe vršili ponavljanje.
Te naredbe, kojima omogućavamo kontrolisano ponavljanje, nazivamo ciklusima. U C, C++ jeziku se za to koriste for, while i do-while naredba. Npr. Zamislite da želimo da ispišemo neki znak 20 puta. To možemo uraditi komandom cout koju treba ponoviti 20 puta, dakle: |
Ponavljanje naredbi upotrebom ciklusa-petlji. U videu je objašnjena upotreba for ciklusa
|
cout << "*" << endl; cout << "*" << endl; cout << "*" << endl; . . . |
For naredba na primerima 1) Sabiranje datog niza brojeva 2) Računanje prosečne ocene
|
Umesto toga za ponavljanje ćemo koristiti naredbu for. Sintaksa bi izgledala nešto slično ovome:
for(int i=0; i<20; i++)
cout<< "*" << endl;
Izrazi u maloj zagradi služe da obezbede odgovarajući broj ponavljanja, u ovom slučaju 20.
Prvi izraz služi da se uvede neka promenljiva kojoj se zada neka početna vrednost i čija će se vrednost menjati tokom ciklusa.
Drugi izraz je zapravo uslov petlje od koga zavisi da li se ide u sledeći ciklus ili ne. To je zapravo logički izraz čija je vrednost logički podatak tipa bool, dakle može imati vrednost true, ako je vrednost izraza tačna, ili false, ako je netačna. U slučaju da je vrednost true, izvršiće se naredni ciklus.
Npr. ako smo uveli promenljivu " i " i zadali joj početnu vrednost nula u prvom izrazu, a drugi izraz glasi i < 20, to znači da će se ispisivanje ponavljati sve dok taj izraz bude tačan. Ako se vrednost promenljive "i" ne bi menjala tokom ciklusa, to bi značilo da će taj uslov uvek biti zadovoljen, što znači da će biti beskonačno ciklusa(program se neprekidno izvršava).
Za promenu promenljive je zadužen treći izraz. Tu se definiše za koliko se menja promenljiva koja je uvedena u prvom izrazu. U našem primeru i++ znači promenu za 1 i to povećanje.
Dakle ako je početno i = 0, korak povećanja 1, a uslov petlje i < 20, to znači da će ovaj uslov biti zadovoljen sve dok vrednost promenljive " i " ne dostigne vrednost 20. Dakle 20< 20 više nije tačno i ciklus se prekida.
Izraz tri je mogao da bude napisan i kao i=i+1. Ovo znači da se memoriji označenoj sa i dodeljuje vrednost koja je prethodno bila u toj memoriji uvećanoj za 1.
U opštem slučaju sintaksa for naredbe bi bila
for u c jeziku
for(izraz_1; izraz_2; izraz_3)
{
{
NAREDBE
}Ovde vidimo da su naredbe obuhvaćene vitičastim zagradama. U slučaju da je u pitanju samo jedna naredba zagrade mogu da se izostave.
Primer 1: Ispisati niz brojeva od -100 do 100 koji su deljivi sa 3
Za ispisivanje 1 broja upotrebićemo naredbu printf za C programski jezik, ili cout ako je c++ jezik. Koristićemo for ciklus da bi ponovili naredbu. Promenljivu koju unutar for uvodimo da bi ostvarili potreban broj ciklusa, označićemo sa a i iskoristiti je da bi prikazali vrednosti brojeva u nizu.
for(int a=-100; a<100; a++)
{
{
printf("%2d",broj);
}Ovo bi odštampalo sve brojeve između - 100 i +100. Da bi program štampao samo one brojeve koji su deljivi sa 3, uradićemo sledeće.
- Pomerićemo početnu vrednost broja a na prvi sledeći broj koji je deljiv sa 3, tj. na -99
- Korak promene promenljive a staviti na 3, jer svaki treći broj, počev od -99 je takođe deljiv sa 3, dakle a=a+3
for(int a=-99; a<100; a=a+3)
{
{
printf("%2d ",x);
}Slično tome u C++ programskom jeziku kod bi bio:
for(int a=-99; a<100; а=а+3)
{
{
cout<<x<<" ";
}Posle pokretanja, na ekranu će se ispisati:
-99,-96,-93, ....0,3,6,........99
-99,-96,-93, ....0,3,6,........99
Izrada simulacija pomoću ciklusa
Posmatrajmo sledeći problem:
Želimo da simuliramo promenu položaja s[m] pri ravnomernom kretanju za promenu vremena.Ovde se neće praviti vizuelna simulacija, nego samo ispisivanje trenutnih vrednosti položaja tela za svaku promenu vremena za interval dt.
Posmatraćemo promene položaja za svaki mali porast vremena od dt[s]
Uzmimo da je ta promena za dt=0.05s
Želimo da simuliramo promenu položaja s[m] pri ravnomernom kretanju za promenu vremena.Ovde se neće praviti vizuelna simulacija, nego samo ispisivanje trenutnih vrednosti položaja tela za svaku promenu vremena za interval dt.
Posmatraćemo promene položaja za svaki mali porast vremena od dt[s]
Uzmimo da je ta promena za dt=0.05s
Uvod u cikluse-simulacija ravnomernog kretanja
Neka se vreme menja tokom 1s 20 promena po 0.05s = 1s
Početne vrednosti su s=0; t=0; v unosi korisnik
Dakle 20 puta bi ponavljali sledeće naredbe:
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl; //Ispisivanje vrednosti pređenog puta. Više o naredbi cout pogledajte u lekciji stringovi
Ovakav kod nije dobar:
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl;
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl;
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl;
...
Vidimo da se 3 naredbe ponavljaju 20 puta. Umesto toga treba napisati 3 naredbe jedan put a onda koristiti neku drugu naredbu koja će ih ciklično ponoviti onoliko puta koliko mi želimo.
To su naredbe koje zovemo ciklusi(petlje):
Početne vrednosti su s=0; t=0; v unosi korisnik
Dakle 20 puta bi ponavljali sledeće naredbe:
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl; //Ispisivanje vrednosti pređenog puta. Više o naredbi cout pogledajte u lekciji stringovi
Ovakav kod nije dobar:
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl;
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl;
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< “s=“<<s<<endl;
...
Vidimo da se 3 naredbe ponavljaju 20 puta. Umesto toga treba napisati 3 naredbe jedan put a onda koristiti neku drugu naredbu koja će ih ciklično ponoviti onoliko puta koliko mi želimo.
To su naredbe koje zovemo ciklusi(petlje):
- for
- while
- do-while
Petlje (ciklusi)u JAVI imaju vrlo sličnu sintaksu pisanja naredbi. Više o tome pročitajte u lekciji: Petlje u programskom jeziku JAVA
for ciklus
Sada bi prethodnu simulaciju rešili na sledeći način:
for(int i=0; i<20; i++)
{
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< "s=" << s << endl;
}
{
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
cout<< "s=" << s << endl;
}
for ciklus se koristi kada unapred znamo broj ciklusa.
Ako ne znamo unapred broj ciklusa?
Tada broj ciklusa zavisi od nekog uslova i onda koristimo
while naredbu ili,
do-while
Ako ne znamo unapred broj ciklusa?
Tada broj ciklusa zavisi od nekog uslova i onda koristimo
while naredbu ili,
do-while
while ciklus
Ova naredba se za razliku od for naredbe koristi kad ne znamo unapred broj ciklusa.
Primetimo da u maloj zagradi samo imamo jedan izraz logičkog tipa ili logičku promenljivu tipa bool. Naredbe u telu while naredbe će se ponavljati sve dok je taj izraz tačan tj. dok ima vrednost true. Pošto se uslov nalazi na početku while petlje, on se ispituje pre izvršenja naredbi. Može se desiti slučaj da u prvom ispitivanju vrednost bool izraza bude false, to znači da se u tom slučaju naredbe ne bi izvršile ni jedan put.
Ukoliko nam je iz bilo kog razloga važno da se naredbe izvrše bar jedan put, onda je pogodnije da uslov bude na kraju, što je slučaj kod do-while naredbe.
Primetimo da u maloj zagradi samo imamo jedan izraz logičkog tipa ili logičku promenljivu tipa bool. Naredbe u telu while naredbe će se ponavljati sve dok je taj izraz tačan tj. dok ima vrednost true. Pošto se uslov nalazi na početku while petlje, on se ispituje pre izvršenja naredbi. Može se desiti slučaj da u prvom ispitivanju vrednost bool izraza bude false, to znači da se u tom slučaju naredbe ne bi izvršile ni jedan put.
Ukoliko nam je iz bilo kog razloga važno da se naredbe izvrše bar jedan put, onda je pogodnije da uslov bude na kraju, što je slučaj kod do-while naredbe.
while, sintaksa
Ponavljanje naredbi dok je zadovoljen uslov u zagradi
while( true )
{
while( true )
{
NAREDBE
}Primer: Uneti ceo broj N. Ukloniti mu nule sa desne strane. Npr. za uneto N=12000, na ulazu treba da bude 12
Ovaj zadatak je pogodan za primenu while ciklusa. Uklanjanje nula ćemo vršiti deljenjem sa 10 onoliko puta dokle broj koji transformišemo bude bio deljiv sa 10. Ne znamo koliko će to biti puta jer se ne zna unapred koji je unet broj. Dakle nije pogodan for, nego while ciklus kod koga će se izvršenje ciklično ponavljati sve dok bude bio zadovoljen uslov deljivosti, da ostatak deljenja N i broja 10 bude jednak nuli:
int N;
cin >> N; //Učitavanje celog broja
while(N % 10 == 0)
{
cout << "N=" << N << endl;
cin >> N; //Učitavanje celog broja
while(N % 10 == 0)
{
N=N/10; //Nova vrednost broja N je stara podeljena sa 10
}cout << "N=" << N << endl;
Više o učitavanju brojeva cin naredbom pročitajte u lekciji stringovi.
Više o određivanju ostatka deljenja pročitajte u lekciji operatori.
Više o određivanju ostatka deljenja pročitajte u lekciji operatori.
Primer: Simulacija slobodnog pada
Tekst: Uneti početnu visinu tela i napraviti simulaciju slobodnog pada tako što se na svakih 0.05s ispisuju vreme, trenutna brzina i trenutna visina
Na slici vidimo različite položaje tela posle svakih dt=0.05s.
Za to vremene promeni se visina h kao i brzina v.
Za to vremene promeni se visina h kao i brzina v.
- Vreme se promeni za dt: t=t+dt;
- Visina za v*dt+g*dt*dt/2. Dakle h=h-(v*dt+g*dt*dt/2)
- Brzina za g*dt. Dakle, v=v+g*dt
U prethodnom primeru: Simulacija slobodnog pada pogodnije je da se koristi while petlja. U svakom ciklusu dolazi do promene vremena, trenutne visine tela i trenutne brzine tela. Ciklus se ponavlja sve dok visina bude veća od nule, tj. dok telo ne padne na zemlju.
double h;
cin >> h;
while(h>=0)
{
cin >> h;
while(h>=0)
{
t=t+dt; //promena vremena za 0.05s
h=h-v*dt-g*dt*dt/2; //promena položaja u toku 0.05s
v=v+g*dt; //promena brzine u toku 0.05s
cout << "h=" << h << "m" << endl;
}h=h-v*dt-g*dt*dt/2; //promena položaja u toku 0.05s
v=v+g*dt; //promena brzine u toku 0.05s
cout << "h=" << h << "m" << endl;
do-while ciklus
Koristimo umesto while ciklusa kada se naredbe moraju bar jednom odraditi, a onda, ako je uslov zadovoljen naredbe se ponavljaju, sve dok je uslov petlje zadovoljen, tj. ima vrednost true.
Prethodni primer bi se mogao odraditi i sa do-while ukoliko bi znali početne uslove pre nego što uđemo u ciklus, npr.
ako znamo da je sigurno h0>0 i
Početni uslovi:
h=h0; t=0;
tada bi kod izgledao:
Prethodni primer bi se mogao odraditi i sa do-while ukoliko bi znali početne uslove pre nego što uđemo u ciklus, npr.
ako znamo da je sigurno h0>0 i
Početni uslovi:
h=h0; t=0;
tada bi kod izgledao:
Ponavljanje naredbi dok je zadovoljen uslov u zagradi
do
{
while(h>=0);
do
{
t=t+dt; //promena vremena za 0.05s
h=h-v*dt-g*dt*dt/2; //promena položaja u toku 0.05s
v=v+g*dt; //promena brzine u toku 0.05s
cout << "h=" << h << "m" << endl;
}h=h-v*dt-g*dt*dt/2; //promena položaja u toku 0.05s
v=v+g*dt; //promena brzine u toku 0.05s
cout << "h=" << h << "m" << endl;
while(h>=0);
Ako bi početno h bilo jednako nuli, onda ovaj način nema smisla jer bi se odradila iteracija koja ne treba da se izvrši, pošto je telo već na zemlji.
Ako znamo da je sigurno h0>0
Tada se uslov postavlja na krajui zato koristimo do-while naredbu.
Ako znamo da je sigurno h0>0
Tada se uslov postavlja na krajui zato koristimo do-while naredbu.
do - while , sintaksa
Ponavljanje naredbi dok je zadovoljen uslov u zagradi
do
{
while( true );
do
{
NAREDBE
}while( true );
Sledeće
Ugnježdene petlje >| |
Srodni članci
Petlje u c/c++ programskom jeziku-primeri
Petlje u programskom jeziku JAVA
Nizovi-primeri
Fibonačijev niz
Podaci u C/C++ jeziku
Petlje u programskom jeziku JAVA
Nizovi-primeri
Fibonačijev niz
Podaci u C/C++ jeziku