PETLJE U PROGRAMSKOM JEZIKU C
Te naredbe, kojima omogućavamo kontrolisano ponavljanje, nazivamo ciklusima. U C, C++ jeziku se za to koriste for, while i do-while naredba.
Video lekcija 1: Petlje Uvod
To možemo uraditi komandom cout koju treba ponoviti 20 puta, dakle:
printf("*"); printf("\n"); printf("*"); printf("\n"); printf("*"); printf("\n"); . . .
for (int i = 0; i < 20; i++) {printf("*\n");}
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.
for u c jeziku
{
Video lekcija 2: petlje 2. deo
Primer 1: Ispisati niz brojeva od -100 do 100 koji su deljivi sa 3
{
- 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
{
-99,-96,-93, ....0,3,6,........99
Nizovi u jeziku C i C++
Primer 2: Sabrati niz prirodnih brojeva od 1 do 10
printf( "zbir=%d", zbir );
Prvo je potrebno uvesti promenljivu koja će predstavljati zbir:
int zbir=0;
Zatim bi trebalo u zbir dodavati jedan po jedan broj. Napisano bez ciklusa to bi izgledalo:
zbir = zbir + 1;
zbir = zbir + 2;
zbir = zbir + 3;
zbir = zbir + 4;
...
zbir = zbir + i;
...
zbir = zbir + 10;
ali umesto toga koristimo ciklus:
{
int zbir = 0; for (int i = 1; i <= 10; i = i + 1) {zbir = zbir + i;} printf("zbir=%d", zbir); // Štampa zbir
Primer 3: Određivanje proseka
Rešenje prethodnog primera bi bilo:
#include <stdio.h> int main() {// Deklaracija promenljivih int broj, suma = 0; float prosek; // Učitavanje 5 brojeva od korisnika for (int i = 1; i <= 5; i++) {}printf("Unesite broj %d: ", i); scanf("%d", &broj); suma += broj; // Dodavanje broja na sumu} // Izračunavanje proseka prosek = suma / 5.0; // Ispis rezultata printf("Srednja vrednost je: %.2f\n", prosek); return 0;
- Deklaracija promenljivih:
- broj: Za unos trenutnog broja.
- suma: Za akumulaciju unetih brojeva.
- prosek: Za izračunavanje srednje vrednosti kao float.
- Petlja za unos:
- Koristi se for petlja za unos pet brojeva.
- scanf unosi svaki broj, koji se zatim dodaje na suma.
- Izračunavanje proseka:
- prosek se računa deljenjem sume sa 5.0 (koristi se decimalni broj za preciznost).
- Ispis rezultata:
- Koristi se printf za prikaz proseka sa dve decimale.
Dodatni resursi za vežbanje petlji u C
Za dalje učenje i vežbu, možete se osloniti na sledeće resurse:
Na ovim stranicama ćete pronaći detaljne primere sa objašnjenjima koji će vam pomoći da još bolje razumete upotrebu različitih vrsta petlji u C/C++.
Izrada simulacija pomoću ciklusa
Ž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
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
printf("s=%f\n",s); //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
printf("s=%f\n",s);
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
printf("s=%f\n",s);
t=t+dt; //promena vremena za 0.05s
s=s+v*dt; //promena položaja za 0.05s
printf("s=%f\n",s);
...
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
for ciklus
#include <stdio.h> int main() {float t = 0.0; // Početno vreme float s = 0.0; // Početni položaj float v = 5.0; // Brzina (pretpostavimo konstantnu) float dt = 0.05; // Promena vremena u sekundama 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 printf("s = %.2f\n", s); // Ispis položaja sa dve decimale} return 0;
Ako ne znamo unapred broj ciklusa?
Tada broj ciklusa zavisi od nekog uslova i onda koristimo
while naredbu ili,
do-while
While ciklus(ciklus sa uslovom na početku)
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
while(uslov)
{
While algoritam
Primer 4: Uklanjanje nula sa desne strane.
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:
#include <stdio.h> // Uključivanje biblioteke za standardne I/O funkcije int N; // Deklaracija promenljive N kao celobrojne scanf("%d", &N); // Učitavanje celog broja sa tastature while (N % 10 == 0) { // Proverava da li je poslednja cifra broja 0N = N / 10; // Deljenje broja N sa 10 kako bi se uklonio poslednji nulti broj} printf("N=%d", N); // Štampa vrednost N nakon što su svi nulti brojevi uklonjeni
Više o određivanju ostatka deljenja pročitajte u lekciji operatori.
Brojanje Ciklusa
Da bi program sam odredio broj ciklusa uvešćemo brojač ciklusa. To je ceo broj inicijalizovan na nulu.
int broj=0;
Pogledajmo primer koji to ilustruje:
Brojanje ciklusa u while
petlji
U C jeziku, brojanje ciklusa u while
petlji može se postići korišćenjem brojača. Brojač je promenljiva celobrojnog tipa, inicijalizovana na nulu, koja se uvećava pri svakom prolasku kroz petlju.
Primer ispod ilustruje ovu tehniku.
#include <stdio.h> int main() {int broj = 0; int x = 10; while (x > 0) {}broj++; x -= 2; printf("Vrednost x: %d, Broj ciklusa: %d\n", x, broj);} printf("Ukupan broj ciklusa: %d\n", broj); return 0;
Primer 5: Trening
Rešenje:
#include <stdio.h> int main() { int ukupno = 0; // Ukupan broj pretrčanih kilometara int dan = 0; // Brojač dana int km; // Pretrčani kilometri u jednom danu while (ukupno < 40) { // Petlja traje dok ne dostignemo 40 km printf("Unesite kilometre pretrčane za dan %d (1-5): ", dan + 1); scanf("%d", &km); if (km >= 1 && km <= 5) { // Provera unosa u opsegu ukupno += km; // Dodavanje kilometara na ukupan zbir dan++; // Povećavanje broja dana } else { printf("Neispravan unos! Molimo unesite vrednost od 1 do 5.\n"); } } printf("Sportista je dostigao 40 km posle %d dana.\n", dan); return 0; }
- Promenljive:
- ukupno: Služi za praćenje ukupnog broja pretrčanih kilometara.
- dan: Brojač dana treninga.
- km: Broj kilometara unesenih za tekući dan.
- Petlja while:
- Izvršava se dok ukupan broj pretrčanih kilometara (ukupno) ne dostigne ili pređe 40.
- Na svakom ciklusu se unosi broj kilometara za tekući dan.
- Provera unosa:
- Ako je uneseni broj kilometara u opsegu [1, 5], dodaje se na ukupni zbir i povećava broj dana.
- Ako unos nije validan, ispisuje se poruka o grešci i ponavlja unos za isti dan.
- Ispis rezultata:
- Kada se dostigne 40 km, ispisuje se poruka sa brojem dana potrebnih za postizanje cilja.
Primer 6: Simulacija slobodnog pada
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
#include <stdio.h> double h; scanf("%lf", &h); // Učitavanje realnog broja sa tastature 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
printf("h=%lf m", h); // Ispisivanje nove visine
do-while ciklus
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:
do
{
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 znamo da je sigurno h0>0
Tada se uslov postavlja na krajui zato koristimo do-while naredbu.
do-while naredba - sintaksa
do
{
while( uslov);
Algoritam do-while petlje
Primeri sa upotrebom do-while naredbe
Primer 7: Unos brojeva dok korisnik ne unese 0
Rešenje:
#include <stdio.h> // Uključivanje biblioteke za standardne I/O funkcije int broj, zbir = 0; // Deklaracija promenljivih broj (unos korisnika) i zbir (inicijalizovan na 0) do { // Početak do-while petljeprintf("Unesite broj (0 za kraj): "); // Poruka korisniku da unese broj. Unos 0 završava petlju scanf("%d", &broj); // Učitavanje broja unetog sa tastature zbir += broj; // Dodavanje unetog broja u zbir} while (broj != 0); // Petlja se ponavlja dok korisnik ne unese 0 printf("Zbir unesenih brojeva je: %d\n", zbir); // Ispisivanje konačnog rezultata, tj. zbira svih unetih brojeva return 0; // Završavanje programa i vraćanje vrednosti 0 operativnom sistemu
- do-while petlja omogućava da korisnik unese brojeve, a unosi se ponavljaju sve dok se ne unese broj 0.
- S obzirom na to da je 0 signal za kraj, program dodaje unesene brojeve u zbir i nastavlja unos dok se ne unese nula.
- Kada korisnik unese 0, petlja se završava i program ispisuje zbir brojeva.
Primer 8: Ispis brojeva od 1 do n, gde n unosi korisnik
Rešenje:
#include <stdio.h> /* Uključivanje biblioteke za standardne I/O funkcije */ int n, i; /* Deklaracija promenljivih n (broj koji unosimo) i i (brojač u petlji) */ do { /* Početak do-while petlje koja se ponavlja dok broj n nije veći od 0 */printf("Unesite broj n (veći od 0): "); /* Ispisivanje poruke korisniku da unese broj n */ scanf("%d", &n); /* Unos broja n sa tastature */ if (n <= 0) { /* Provera da li je broj manji ili jednak 0 */} while (n <= 0); /* Petlja se ponavlja dok broj n nije veći od 0 */ printf("Brojevi od 1 do %d:\n", n); /* Ispisivanje poruke sa vrednošću n, koja označava koliko brojeva treba ispisati */ for (i = 1; i <= n; i++) { /* For petlja za ispis brojeva od 1 do n */printf("Broj mora biti veći od 0. Pokušajte ponovo.\n"); /* Ako broj nije veći od 0, ispisuje se poruka greške */}printf("%d ", i); /* Ispisivanje broja i u svakom prolazu petlje */} printf("\n"); /* Novi red nakon ispisa svih brojeva */ return 0; /* Završavanje programa i vraćanje vrednosti 0 kao uspešan izlaz */
- do-while petlja osigurava da korisnik unese broj veći od 0.
- Ako korisnik unese broj manji ili jednak nuli, program će ponovo tražiti unos.
- Kada je unos validan, program koristi petlju za ispis brojeva od 1 do n.
Primer 9: Provera validnosti unosa lozinke
Rešenje:
#include <stdio.h> int lozinka; do {printf("Unesite lozinku (broj): "); scanf("%d", &lozinka); if (lozinka != 1234) {} while (lozinka != 1234); printf("Lozinka je tačna!\n"); return 0;printf("Pogrešna lozinka. Pokušajte ponovo.\n");}
- Program koristi do-while petlju da bi omogućio korisniku unos lozinke u obliku broja.
- Ako korisnik unese netačnu lozinku, program traži ponovni unos.
- Kada korisnik unese tačnu lozinku (u ovom slučaju broj "1234"), petlja se završava i ispisuje se poruka o uspešnom unosu lozinke.
Beskonačne petlje i kako ih izbeći
Šta su beskonačne petlje?
Ovo se često događa zbog grešaka u kodu, kao što su:
- Zaboravljanje ažuriranja uslova.
- Pogrešni logički operatori.
Primer beskonačne petlje:c
while (1) {printf("Ovo je beskonačna petlja.\n");}
Kako ih izbeći?
- U petljama while i do-while, osigurajte da se uslov menja tokom iteracija.
- Koristite break ako postoji šansa za beskonačnu petlju.
- Uverite se da su inicijalizacija, uslov, i inkrement/dekrement ispravno napisani.
Primer rešenja za izbegavanje beskonačne petlje:
#include <stdio.h> int main() {int i = 0; while (i < 5) {}printf("%d ", i); i++;} return 0;
Kada su beskonačne petlje korisne?
- U nekim slučajevima, beskonačne petlje se namerno koriste (npr. server aplikacije).
- U tom slučaju, break ili uslov za izlazak iz petlje treba biti pažljivo implementiran.
Još primera beskonačnih petlji
#include <stdio.h> while (1) {printf("Ova petlja nikad ne prestaje!\n");} for (int i = 0; ; i++) {printf("Iteracija broj: %d\n", i);} do {printf("Ova petlja se ponavlja zauvek!\n");} while (1);
Naredbe break i continue
Upotreba break u ciklusima
Naredba break se koristi za trenutni izlazak iz ciklusa, bez obzira na to da li je uslov ciklusa još uvek ispunjen. Ova naredba se često upotrebljava u kombinaciji sa if naredbom kako bi se prekinuo ciklus kada se ispuni određeni uslov. Može se koristiti u beskonačnim ili konačnim ciklusima da bi se kontrolisao tok izvršenja.
#include <stdio.h> int main() {int broj; printf("Unesite brojeve (0 za prekid):\n"); while (1) {}scanf("%d", &broj); if (broj == 0) {} printf("Ciklus je prekinut.\n"); return 0;break;} printf("Uneli ste: %d\n", broj);
- Ciklus while (1) pravi beskonačnu petlju.
- Svaki broj koji korisnik unese se štampa.
- Ako korisnik unese 0, if naredba detektuje uslov i break izlazi iz ciklusa.
- Nakon izlaska iz ciklusa, ispisuje se poruka da je ciklus završen.
Upotreba continue u ciklusima
Kada koristiti continue?
- Kada određeni uslov treba da preskoči deo koda u ciklusu.
- Za efikasnije upravljanje iteracijama u složenim petljama.
Primer:
#include <stdio.h> for (int i = 1; i <= 10; i++) {if (i % 2 == 0) { continue; } printf("Neparan broj: %d\n", i);}
- Petlja prolazi kroz brojeve od 1 do 10.
- Kada je broj paran (i % 2 == 0), naredba continue preskače ispis.
- Na ekranu se prikazuju samo neparni brojevi: 1, 3, 5, 7, 9.
Dodatni resursi
Dodatni resursi za vežbanje petlji u C/C++
-
Petlje u C/C++ - primeri
Detaljni primeri petlji sa objašnjenjima za C i C++. -
Dodatni primeri iz petlji
Dodatni primeri i zadaci koji pokrivaju razne vrste petlji. -
Petlja.org - Platforma za učenje programiranja
Platforma koja nudi besplatan kurs i izazove za vežbanje programiranja, uključujući petlje. -
Learn-C.org - Besplatan vodič za učenje C programiranja
Praktični vodič sa primerima za učenje programiranja u C jeziku. -
LearnCpp.com - Besplatan vodič za učenje C++ programiranja
Sveobuhvatan vodič za učenje C++ sa posebnim odeljkom o petljama. -
Petlje u jeziku C - Škola koda
Detaljna objašnjenja kako koristiti petlje u C programskom jeziku. -
Petlje u C++ programskom jeziku - Manuel Radovanović
Stranica sa objašnjenjima i primerima korišćenja petlji u C++. -
Petlje u C++ (for, while i do while) - YouTube
Video koji objašnjava različite vrste petlji u C++.
Za dodatna pitanja i objašnjenja, kontaktirajte nas putem formi za kontakt.
Sledeće
Ugnježdene petlje >| |
Srodni članci
Petlje u programskom jeziku JAVA
Nizovi-primeri
Fibonačijev niz
Podaci u C/C++ jeziku