You are on page 1of 18

SVEUILITE/UNIVERZITET VITEZ TRAVNIK

FAKULTET POSLOVNE INFORMATIKE


STUDIJ II CIKLUSA; GODINA STUDIJA: II CIKLUS: I GODINA
SMIJER: INFORMACIONE TEHNOLOGIJE

PROGRAMSKE PETLJE

SEMINARSKI RAD

Travnik, April.2013. godine


SVEUILITE/UNIVERZITET VITEZ TRAVNIK
FAKULTET POSLOVNE INFORMATIKE
STUDIJ II CIKLUSA; GODINA STUDIJA: II CIKLUS: I GODINA
SMIJER: INFORMACIONE TEHNOLOGIJE

PROGRAMSKE PETLJE

SEMINARSKI RAD

IZJAVA: Ja, Davor Damjanovi, student Sveuilita/Univerziteta Vitez Travnik,


Indeks broj: 0137-12/DIT odgovorno i uz moralnu i akademsku
odgovornost izjavljujem da sam ovaj rad izradio potpuno samostalno uz
koritenje citirane literature i pomo profesora odnosno asistenata.

Potpis studenta:

STUDENT: Davor Damjanovi


PREDMET: Strukture podataka i algoritmi
PROFESOR: Doc.dr Sinia Mini
ASISTENT: Mr. Kenan Bradi
1. UVOD ................................................................................................................... 2
1.1. PROBLEM, PREDMET I OBJEKT ISTRAIVANJA .......................... 2
1.2. SVRHA I CILJEVI ISTRAIVANJA ...................................................... 2
1.3. RADNA HIPOTEZA I POMONE HIPOTEZE .................................... 3
1.4. ZNANSTVENE METODE ......................................................................... 3
1.5. STRUKTURA RADA ................................................................................. 3
2. UOPTENO O PROGRAMSKIM PETLJAMA............................................. 4
3. TIPOVI PROGRAMSKIH PETLJI ................................................................. 6
3.1. FOR PETLJA .............................................................................................. 6
3.2. WHILE PETLJA ......................................................................................... 7
3.3. USPOREDBA FOR I WHILE PETLJE ................................................... 8
3.4. DO WHILE PETLJA .................................................................................. 9
3.5. USPOREDBA WHILE I DO WHILE PETLJE ..................................... 10
4. UGNJEDENA PETLJA................................................................................. 12
5. BESKONANA PETLJA ................................................................................ 13
6. ZAKLJUAK.................................................................................................... 15
7. LITERATURA .................................................................................................. 16

1
1. UVOD

1.1. PROBLEM, PREDMET I OBJEKT ISTRAIVANJA

Programiranje ili raunarsko programiranje (engl. programming) je vjetina pomou


koje programer stvara i izvrava algoritme koristei odreene programske jezike da bi
napravio raunarski program. Programiranje sadri elemente umjetnosti, nauke,
matematike i konstruisanja. Programer pie programski kd u nekom programskom
jeziku. Razliiti programski jezici podravaju razliite stilove programiranja. Razliiti
programski jezici zahtjevaju razliite nivoe znanja, umijea i detalja koje programer
treba posjedovati.1

U tom procesu kreiranja programa, odnosno izvravanja algoritma kroz kd, programer
mora sa kdom opisati algoritam, bilo da se radi o linijskoj, razgranatoj ili ciklinoj
strukturi algoritma.

U ovom seminarskom radu upravo elimo obraditi ciklinu strukturu, odnosno strukturu
petlje, kroz primjere implementacije u programskom jeziku C++, a poseban naglasak
kroz ovaj rad elimo staviti na znaaj petlje u programiranju kao i njenu kompleksnost
u smislu implementacije ali i samog odabira tipa petlje u odreenom programskom
problemu.

1.2. SVRHA I CILJEVI ISTRAIVANJA

Osnovni cilj ovog rada i istraivanja je prikazati petlje u njihovom prirodnom


okruenju, te pokazati kako se koriste i dokazati koliko je bitno znati odabrati tip
programske petlje da bi se rijeio odreeni problem. Upravo iza toga se krije smisao
kreativnosti implementacije programskih petlji u programskim jezicima, a na kraju i
kvalitet samog programa, to je i glavna hipoteza ovog seminarskog rada.

1
Wikipedia, http://bs.wikipedia.org/wiki/Programiranje, (27.03.2013)

2
Dakle, cilj rada jeste:
- dokazati ogroman znaaj programskih petlji u jednom programu,
- dokazati kompleksnost pri odabiru tipa petlje i primjeni petlje u programiranju.

A da bi uspjeli u tom pokuaju potrebno je detaljno obraditi svaki aspekt ove teme,
upoznati petlje, njihovu svrhu i nain na koji se koriste.

1.3. RADNA HIPOTEZA I POMONE HIPOTEZE

Na temelju problema i predmeta istraivanja postavlja se glavna hipoteza:


Implementacija petlji u programiranju direktno utie na mogunost realizacije
veine postavljenih problema, koji se na drugi nain ne mogu rijeiti pa zato moemo
konstatovati da programiranje bez upotrebe petlji kao takvo ne bi postojalo.

Polazei od svrhe i ciljeva istraivanja postavljaja se i pomona hipoteza:


Odabir odgovarajueg tipa petlje utie na kvalitet programa kojeg kreiramo.

1.4. ZNANSTVENE METODE

U ovom seminarskom radu koriste se naune (strune) metode:


- Metoda analize i sinteze.
- Metoda klasifikacije,
- Metoda poreenja,
- Matematika metoda,
- Metoda modeliranja.

1.5. STRUKTURA RADA

Struktura seminarskog rada je usklaena sa Uputstvom za pisanje seminarskog rada


na prvom ciklusu studija kao i temi seminarskog rada. On sadri pet poglavlja.
Prvo poglavlje, Uvod, sadri pet podpoglavlja, koje smo u tekstu iznad ve obradili:
- Problem, predmet i objekt istraivanja,
- Svrha i ciljevi istraivanja,
- Radna hipoteza i pomone hipoteze,

3
- Znanstvene metode,
- Struktura rada.

Drugo poglavlje, g o v o r i uopteno o programskim petljama, o tome ta su


programske petlje, o vrstama programskih petlji, te o njihovom razvoju kroz istoriju
programiranja.

Tree poglavlje, je primjena programskih petlji, a tretira pojam programske petlje i


njihovu svrhu, nain na koji rade.

etvrto poglavlje, Primjena programskih petlji u programskim jezicima, te njihova


implementacija u programskom jeziku C++.

Peto poglavlje, Zakljuak, daje generalnu ocjenu o programskim petljama kao i odgovor
na prihvatanje radne i pomone hipoteze.

2. UOPTENO O PROGRAMSKIM PETLJAMA

Programskim petljama moemo smatrati dio programskog kda, ili algoritamske


strukture, koje slue kako se mogu izvravati unaprijed zadane operacije zadani broj puta
ili sve dok je odreeni uslov ispunjen. Svaki prolaz podatka kroz petlju zovemo iteracija.

Da bi shvatili ta su programske petlje, moraemo se osvrnuti i ukratko opisati osnovne


algoritamske strukture.

Algoritamske strukture se dijele u tri osnovne grupe:

- Linijska (sekvencija)
- Razgranata (selekcija)
- Ciklina (iteracija)

Karakteristika linijske strukture je da se svi elementi izvravaju samo jednom i koraci

4
se odvijaju u nizu jedan za drugim bez ponavljanja ili "skretanja".
Slika 1. Linijska struktura
Algoriram C++ kd
#include<iostream>
using namespace std;
int main()
{
int A,B,C;
cin >> A >> B;
C=A+B;
cout << C;
system("Pause");
}

Razgranata struktura e se pojaviti kod algoritma koji ima blok odluivanja kao to su
IF i CASE, pri emu se vri testiranje odreenog uslova, a prema rezultatu (obino
TRUE ili FALSE), algoritam se grana i nastavlja tok jednom od grana - opcija.
Primjer na slici (Slika 2.) je tipian, gdje se vri provjera da li je prvi broj vei od drugog
broja (A>B). Ako je uslov istinit, to jeste ako je prvi uneseni broj vei od drugog
unesenog broja, onda e se izvriti ono to je u tijelu funkcije IF, u suprotnom e se
ispisati poruka: Ne mogu izvrsiti radnju!.
Slika 2. Razgranata struktura
Algoriram C++ kd
#include<iostream>
using namespace std;
int main()
{
int A,B,C;
cin >> A >> B;
C=A-B;
if (A>B)
{
cout << C;
}
else
{
cout << "Ne mogu
izvrsiti ovu radnju!";
}
system("Pause");
}

5
3. TIPOVI PROGRAMSKIH PETLJI

Ciklini algoritam e se pojaviti kada treba isti posao uraditi vie puta i odavde ve
govorimo o programskim petljama, ili o strukturi petlje, odnosno ciklinoj strukturi.
Slika 3. Ciklina struktura (Struktura for petlje)
Algoriram C++ kd
#include <iostream>
using namespace std;
int main()
{
int A;
cin >> A;
for (A; A<=10; A++)
{
cout << A << endl;
}
system("Pause");
}

Postoji vie varijanti struktura petlje, a podijelu bi mogli svesti na tri osnovne:
- FOR
- WHILE
- DO WHILE

3.1. FOR PETLJA

FOR petlju koristimo kada je broj iteracija (ponavljanja) unaprijed poznat. Primjer
ove petlje je na slici iznad (Slika 3.).

Kada govorimo o tipu petlje FOR u programskom jeziku C++, onda je to petlja sa tri
izraza, to je zajedniko svim programskim jezicima koji dijele zajedniku batinu sa C
programskim jezikom.

6
Slika 4. Izrazi u FOR petlji

Sve dok je izraz istinit, izvravae se naredbe unutar petlje.

Prvi izraz je inicijalizacija i u njemu moemo deklarisati varijablu i dati joj vrijednost,
drugi izraz je u stvari jedini pravi uslov, a definiemo ga pomou poredbenih operatora,
dok je trei izraz korak, a njega definiemo sa aritmetikim operatorima. Znak A++ na
primjeru u stvari znai A=A+1 i ovo je takozvani inkrement, dok A-- ili A=A-1
predstavlja dekrement.

Izrazi su odvojeni sa znakom taka-zarez, a dozvoljeno je da se neki od izraza, pa i svi


izrazi izostave. U tom sluaju je potrebno ostaviti znak taka-zarez kao na primjeru:

for (;A<=10;)

Izostavljanje srednjeg izraza, koji je uslov, podrazumjeva da onda uslov dobije vrijednost
1, pa bi onda for (;;), predstavljao beskonanu petlju.

3.2. WHILE PETLJA

Kod WHILE tipa petlje iteracija se vri dok se ne zadovolji odreeni uslov koji je
definisan izrazom, sa provjerom na poetku petlje.

Kod provjere istinitosti na ulazu u petlju postoji mogunost da se ne izvri ni jedno


ponavljanje. Razlog je jednostavan, ako uslov nije ispunjen odmah se "preskae" na
sljedeu liniju kda izvan petlje.

U ovom tipu petlje kao uslov koji se treba ispuniti dozvoljeno je koristiti samo jedan izraz
i to poredbeni izraz, odnosno izraz sa poredbenim operatorima, kao na primjer:
while (A<=10)

7
3.3. USPOREDBA FOR I WHILE PETLJE

Za poetak usporedbe moemo predstaviti tri implementacije istog problema sa ova dva
tipa petlji u C++ programskom jeziku.

Tabela 5. Slinost FOR i WHILE petlje

1. FOR petlja 2. FOR petlja 3. WHILE petlja


#include <iostream> #include <iostream> #include <iostream>
using namespace std; using namespace std; using namespace std;
int main() int main() int main()
{ { {
int A; int A; int A;
cin >> A; cin >> A; cin >> A;
for (A; A<=10; A++) for (; A<=10 ;) while (A<=10)
{ { {
cout << A << endl; A++; A++;
} cout << A << endl; cout << A << endl;
system("Pause"); } }
} system("Pause"); system("Pause");
} }

- U tabeli iznad (Tabela 5), u prvoj koloni vidimo klasian primjer FOR petlje
sa sva tri izraza. Primjeujemo da je prvi izraz samo A varijabla, jer smo je
deklarisali prije petlje, a nismo joj odredili vrijednost jer smo ostavili mogunost
da to unese korisnik programa.
- U drugoj koloni je primjer FOR petlje u kom smo izostavili prvi i trei izraz,
prvi kao nepotreban jer ne daje nikakvu vrijednost, a trei smo izostavili, ali smo
u tijelo petlje unijeli A++; koja je u ovom sluaju naredba.
- U treoj koloni vidimo WHILE petlju koja je gotovo identina FOR petlji iz
prvog primjera sa jedinom razlikom u sedmoj liniji kda u kljunoj rijei poetka
petlje i izostavljenim znakovima taka-zarez.

8
WHILE petlja ima oblik:

while (izraz) naredba;

Naredba e se izvravati sve dok izraz ima vrijednost istine. Naredba moe biti i blok
naredbi koje se onda stavljaju izmeu vitiastih zagrada i to je tijelo petlje.

FOR petlja ima oblik:

for (izraz_1; izraz_2; izraz_3)


naredba;

i ekvivalentna je konstrukciji WHILE petlje:

izraz1;
while (izraz_2)
{
naredba;
izraz_3;
}

3.4. DO WHILE PETLJA

Kod DO WHILE tipa petlje iteracija se vri dok se ne zadovolji odreen uslov, sa
provjerom na kraju petlje.
DO WHILE petlja ima oblik:
do
naredba;
while (izraz);

Kod provjere istinitosti na kraju petlje, ne postoji mogunost da se ne izvri ni jedno


ponavljanje. Razlog je jednostavan, provjera se vri u posljednjem redu bloka kda, te se

9
mora proi barem jedanput kroz itav blok. Za ovu vrstu petlje u veini programa se
koristi kljuna rije "DO WHILE" prilagoena sintaksi programskog jezika.

Ovaj tip petlje koristimo ukoliko broj ponavljanja petlje nije unaprijed poznat, nego ovisi
o ispunjenju zadanog uslova i ukoliko elimo bar jednom provjeriti, odnosno uporediti
unesenu vrijednost sa uslovom u izrazu.

3.5. USPOREDBA WHILE I DO WHILE PETLJE

Tabela 6. Usporedba WHILE i DO WHILE petlje u C++


WHILE petlja DO WHILE petlja
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int A; int A;
cin >> A; cin >> A;
while (A > 0) do
{ {
cout << " * \n"; cout << " * \n";
A--; A--;
} }while (A > 0);
cout << "Kraj brojanja! Ostalo cout << "Kraj brojanja! Ostalo
je " << A << " zvijezdica." << endl; je " << A << " zvijezdica." << endl;
system("Pause"); system("Pause");
return 0; return 0;
} }

Na primjeru tabele iznad (Tabela 6.) moemo vidjeti jasnu razliku WHILE i DO
WHILE petlje. Obje petlje na primjeru iznad, daju isti rezultat, a jedina razlika u
rezultatu je ukoliko je ulazni podatak nula (0).

- U prvom primjeru WHILE u sluaju da je ulazni podatak nula (0), izlazni


podatak e biti poruka koja se nalazi odmah iza petlje: Kraj brojanja! Ostalo je
0 zvijezdica.
- U drugom primjeru DO WHILE petlje u sluaju da je ulazni podatak nula (0)
izlazni podatak e biti takav da e se na ekranu ipak ispisati jedna zvijezdica i
tekstualna poruka: Kraj brojanja! Ostalo je -1 zvijezdica..

10
Dakle. iako smo kao ulazni podatak upisali broj nula (0) izvrila se jedna iteracija,
odnosno jedan prolaz kroz petlju, jer se provjera izvrava na izlazu iz petlje, to je
karakteristika DO WHILE petlji..

Meutim ukoliko budemo htjeli napraviti situaciju u kojoj elimo da nam se prvo izvede
neka operacija te da se, ovisno o njenom ishodu, ta operacija eventualno ponavlja, u tu
svrhu e svakako posluiti DO WHILE petlja.

Tabela 7. Konkretna primjena DO WHILE petlje


#include<iostream>
#include<string>
using namespace std;
void main()
{
string lozinka;
do
{
cout << "Upisi ispravnu lozinku!" << endl;
cin >> lozinka;
}while (lozinka != "123");
cout << "Uspjesno ste ulogovali sa lozinkom: " << lozinka << endl;
system("Pause");
}

11
4. UGNJEDENA PETLJA

FOR petlje se mogu pisati jedna unutar druge, onda takve petlje zovemo ugnijeene
FOR petlje. Naveden je primjer (Slika 8.) jedne ugnjedene FOR petlje i detaljno
opisano ta se deava kada pokrenemo ovaj dio programa.

Slika 8. Ugnjedena FOR petlja

Algoritam C++ kd

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int kolona,red;
for(red=1;red<=10;red++)
{

for(kolona=1;kolona<=5;kolona++
)
{
cout<<setw(5)<<red*stup;
}
cout<<endl;
}
system("Pause");
return 0;
}

- Kako vidimo na primjeru iznad, odmah na ulazu u vanjsku petlju, varijabla


red poprima poetnu vrijednost. Provjerava se uslov vanjske petlje, pa ako je
ispunjen, ulazi se u unutranju petlju.
- Pri ulazu u unutranju petlju, varijabla kolona poprima poetnu vrijednost,
provjerava se uslov unutranje petlje, pa ako je ispunjen izvrava se blok
naredbi unutranje petlje.
- Po zavretku bloka naredbi unutranje petlje mijenja se vrijednost varijable
unutranje petlje za (inkrement) vrijednost kolona++ unutarnje petlje. Sve
dok je zadovoljen uslov unutranje petlje, njen blok naredbi se stalno ponavlja uz
stalnu vrijednost varijable vanjske petlje.

12
- Kada uslov unutranje petlje nije ispunjen izlazi se iz unutranje petlje i ponovo
se pone izvravati vanjska petlja. Vrijednost varijable vanjske petlje se mijenja
za vrijednost inkrementa red ++, provjerava se uslov vanjske petlje pa ako je
ispunjen, ulazi se u unutranju petlju. Sada se ponovo ponavlja opisan postupak
izvravanja unutranje petlje.
- Sve se ponavlja do trenutka kada uslov vanjske petlje vie nije ispunjen. Moe se
vidjeti da se za svaku vrijednost varijable vanjske petlje izvodi cjelokupna
unutranja petlja.

5. BESKONANA PETLJA

Moe se dogoditi da je uslov petlje uvijek ispunjen. Petlja e se tom sluaju izvoditi
beskonano. To su beskonane petlje.

Ako se dogodi da se pokrene program u kom je beskonana petlja, njegovo izvravanje


e se prekinuti ako zatvorimo prozor programa.

Tabela 9. Beskonana FOR petlja

Primjer beskonane petlje


#include<iostream> Vrijednost varijable b je uvijek manja od
using namespace std;
int main() 10 pa e se petlja ponavljati neogranien
{
for(int b=3;b<10;) broj puta, ili dok ne zatvorimo program.
cout<<"beskonacna petlja";
}

Ukoliko se prilikom programiranja desi nenamjerna beskonana petlja, to je logika


greka i na to programer mora paziti jer kompajler to naravno ne prijavljuje.

Da bi se izbjegla beskonana petlja, moe se slijediti par pravila:


- Postaviti uslov koji garantuje konaan broj ponavljanja petlje.
- Navesti sva tri izraza u zagradi iza naredbe for.

13
- Izbjegavati promjenu vrijednosti kontrolne varijable petlje unutar bloka naredbi
petlje.

Slika 10. Primjer posljedice beskonane petlje

Blok naredbi unutar tijela petlje izvodi se beskonano mnogo puta, ako taj blok naredbi
ne sadri neku od naredbi za izlazak iz petlje kao to je recimo naredba break.

Naredba break se koristi kad treba prekinuti izvoenje bloka naredbi unutar petlje.
Nakon naredbe break program prelazi na prvu naredbu iza programske petlje.
Naredba break je i sastavni dio switch-case naredbe.

Ponekad je potrebno preskoiti dio bloka naredbi do kraja programske petlje pa nakon
toga nastaviti petlju. U tu se svrhu koristimo naredbu continue. Nepaljiva upotreba
naredbe continue moe izazvati beskonanu petlju, zato preporuka da kao zamjenu
ove naredbe koristimo naredbu grananja.

14
6. ZAKLJUAK

Na kraju zakljuujemo, da prilikom rjeavanja programskih problema gotovo je


neizbjena situacija u kojoj moramo vie puta ponoviti neki dio programa, odnosno slijed
naredbi, to moemo raditi runo, ali ukoliko to treba uraditi vie puta, taj posao bi postao
u najmanju ruku zamoran. Sebi emo olakati posao, upotrijebimo li naredbe koje
omoguavaju automatsko ponavljanje slijeda naredbi odreeni broj puta ili do ispunjenja
zadanog uslova. Ovakve naredbe pronalazimo u svim programskim jezicima, a kako smo
naveli u ovom radu nazivamo ih programske petlje.

Programske petlje nam u ovakvim situacijama uveliko olakavaju posao programiranja i


dozvoljavaju nam da vrijeme iskoristimo racionalnije, radei drugi posao, dok one rade
posao ponavljanja.

Vidjeli smo da u procesu programranja, kombinacijom vie petlji ili petlji sa drugim
naredbama, operatorima, drugim petljama, petljama u petljama itd., moemo kreirati
sloene programske procese u kojima e se program izvravati i raditi odreene radnje,
ako, ili dok se ispune odreeni uslovi.

Sve ovo nas navodi na zakljuak da su petlje neizostavni i neminovni dio programiranja,
te bi bez upotrebe petji posao programiranja bio sveden na runo upisivanje narebi, to
na kraju ne bi rezultiralo uspjehom i u krajnjem sluaju ne bi imalo smisla.

Ukoliko smo proitali rad i shvatili smisao i nain na koji fumkcioniu programske petlje,
shvatili smo i to koliko su bitne. Dakle, dokazali smo glavnu hipotezu da implementacija
petlji u programiranju direktno utie na mogunost realizacije veine postavljenih
problema, koji se na drugi nain ne mogu rijeiti pa zato moemo konstatovati da
programiranje bez upotrebe petlji kao takvo ne bi postojalo.

Takoer, ono to moemo rei o tipovima petlji je da su to tri tipa koja se ne razlikuju
mnogo. Recimo, FOR petlja moe biti WHILE i obrnuto, DO WHILE petljom
moemo rijeiti neke programske probleme, koje moemo rijeiti i sa WHILE, petljom,
ali sa DO WHILE petljom moemo provjeriti neki podatak barem jednom, to nije
izvodivo sa WHILE petljom. Dakle, njihove velike slinosti, ali i specifine razliitosti
su veoma bitne, jer utiu na krajnji odabir tipa petlje za odreenu vrstu programskog

15
problema. Sam odabir petlje je posao i odluka programera, pa je utoliko i ovaj posao
donoenja odluke vaan i kompleksan, jer od ovog odabira zavisi u kom smjeru e tei
posao programiranja. I iz ovoga moemo zakljuiti da smo potvrdili i nau drugu,
postavljenu sporednu hipotezu, u kojoj smo istakli da primjena odgovarajueg tipa petlje
utie na kvalitet programa kojeg kreiramo.

7. LITERATURA

Knjige :

1.) Skripte sa vjebi Sveuilita univerziteta Vitez Travnik 2013.godina


2.) J. ribar, B. Motik: Demistificirani C++ (2. izdanje), Element, Zagreb, 2003.

Tekstovi s interneta :
1.) http://bs.wikipedia.org/wiki/Programiranje

16

You might also like