You are on page 1of 57

Programiranje

Nositelj:
Izv.prof.dr.sc. Ivica Lukić

Predavanje 4
2. Algoritmi
Pojam algoritma i osnovna svojstva
algoritama
• riječ algoritam– dolazi od imena arapskog matematičara Muhamed ibn Musa al
Khwarizmi (IX.st.)
• al Horezmi = Algorizmi = Algorithmus = Algoritam
• U prvo su vrijeme algoritmima nazivana samo pravila računanja s brojevima
zapisanim u dekadskom sustavu, da bi se kroz naredna stoljeća taj naziv počeo
upotrebljavati za pravila obavljanja raznovrsnih zadataka.
• Pojavom računala pojam algoritma se rasprostranio u područje računarstva, a zatim i
u druge djelatnosti.
• Matematička teorija algoritama bavi se mogućim oblicima algoritama i istražuje
svojstva samih algoritama.
• Algoritmi se koriste za jasno utvrđivanje pravila dostizanja nekog postavljenog cilja.
Zbrajanje dvaju ili više decimalnih
brojeva
Primjer 1: Napisati decimalne brojeve jedan ispod drugog tako da znamenke iste težine budu u istom vertikalnom stupcu
(decimalne točke su pritom jedna ispod druge). Ako kod nekih brojeva lijevo ili desno nedostaju znamenke, zamisliti da
su na tim mjestima zapisane nule. Zatim zbrajati znamenke u istom stupcu i pribrajati im eventualni prijenos s nižeg
mjesta. Počinje se zbrajanjem zdesna (brojevnim mjestom najmanje težine) i smatra se da je tu prijenos jednak nuli.
Postupak se zaustavlja kada se dosegne krajnji lijevi stupac.

Tako je, primjerice:

3.14159
.52
+ 27.
___________________
30.66159
Svojstva algoritama
1.konačnost – napisanim postupkom trebamo doći do
konačnog rješenja
2.preciznost (determiniranost) – pojedini koraci algoritma
propisuju točno što trebamo izvršiti u pojedinim
uvjetima
3.učinkovitost (efektivnost) – algoritam treba trošiti što
manje kapaciteta procesora, memorije računala i
ostalih resursa
Svojstva algoritama
Uz svaki algoritam moraju jasno biti definirani početni objekti nad kojima
se obavljaju operacije.
Kao ishod provođenja algoritma pojavljuju se završni objekti ili rezultati.
Algoritam mora biti sastavljen od konačnog broja koraka koji ukazuju na
slijed operacija koje treba obaviti nad početnim objektima kako bi se
dobili završni objekti ili rezultati.
Svaki korak opisuje se instrukcijom.
Obavljanje algoritma naziva se algoritamskim procesom. Tijekom
odvijanja algoritamskog procesa i postupne izgradnje završnog
objekta mogu se pojaviti i neki među rezultati.
Za obavljanje algoritma potreban je izvoditelj algoritma koji razumije
algoritam i zna točno obaviti svaki korak algoritma.
Vrste algoritama
• SPECIJALIZIRANI – primjenjuju se samo na pojedine početne objekte (primjer: recept
za baklavu, površina kruga...)
• OPĆENITI – dozvoljavaju različite vrijednosti početnih objekata (primjer: algoritam za
zbrajanje bilo kojih decimalnih brojeva, površina bilo kojeg lika...). Kod općenitih
algoritama definira se klasa ulaznih objekata koji su dozvoljeni u izvođenju.
• Djelovanje algoritma je ispravno samo nad dozvoljenom klasom ulaznih objekata i
rezultira klasom izlaznih objekata.
• Algoritam je upotrebljiv ako se za bilo koji član iz početne klase objekata može dobiti
rezultat iz klase dozvoljenih završnih objekata u konačnom vremenu, tj. uz konačni
broj koraka u algoritamskom procesu.
• Neki teorijski uporabljivi algoritmi su krajnje neprikladni za uporabu jer trajanje
njihovog izvođenja može biti neprihvatljivo dugo. Uvođenjem ograničenja takvi
algoritmi mogu postati upotrebljivi što znači da se algoritam zaustavlja kada se pojavi
prepreka ili nakon određenog broja koraka.
Primjer 2.
Promotrimo primjer algoritma čiji algoritamski proces mora biti prekinut zbog prepreke u jednom od koraka. Početni objekt je prirodni
broj. Algoritam je opisan sa slijedećih pet koraka:

1. Početni prirodni broj s brojem 2 i prijeći na drugi korak

2. Dobivenom broju dodati broj 1 i prijeći na treći korak

3. Naći ostatak dijeljenja te sume s brojem 3 i prijeći na 4. korak

4. Podijeliti početni broj s dobivenim ostatkom iz koraka 3. Taj kvocijent je završni objekt. Prijeći na peti korak.

5. Zaustaviti algoritamski proces.

Ako je početna vrijednost jednaka 6, tada će se u pojedinim koracima dobivati slijedeći rezultati:

korak 1. 6 × 2 = 12;

korak 2. 12 + 1 = 13;

korak 3. ostatak dijeljenja s 3 je 1;

korak 4. 6 ÷ 1 = 6;

korak 5. kraj.
Primjer 2. nastavak
Međutim, ako je početna vrijednost jednaka 7, tada se u pojedinim koracima dobiva:

korak 1. 7 × 2 = 14;

korak 2. 14 + 1 = 15;

korak 3. ostatak dijeljenja s 3 je 0;

korak 4. 7 ÷ 0, dijeljenje s nulom nije dozvoljeno i algoritamski proces se ne može završiti.

Ovaj neupotrebljivi algoritam se može pretvoriti u upotrebljivi, ako se u trećem koraku ugradi ograničenje koje dozvoljava prijelaz u
četvrti korak samo ako je ostatak dijeljenja različit od nule, a u protivnom javlja nastalu iznimku i prelazi na peti korak.

Modificirani algoritam bi glasio:

1. Početni prirodni broj pomnožiti s brojem 2 i prijeći na drugi korak.

2. Dobivenom broju dodati broj 1 i prijeći na treći korak.

3. Naći ostatak dijeljenja te sume s brojem 3. Ako je ostatak jednak nuli, javiti nastalu

iznimku i prijeći na peti korak, inače prijeći na četvrti korak.

4. Podijeliti početni broj s ostatkom. Taj kvocijent je završni objekt. Prijeći na peti korak

5. Završiti algoritamski proces.


Jezik za zapisivanje algoritama –instrukcije za
obavljanje operacija
• Izvođenje algoritama može se događati potpuno mehanički što znači da
izvoditelji ne moraju biti ljudi nego strojevi (računala).
• Algoritme je moguće opisati na bilo kojem govornom jeziku ili umjetnim
jezicima. Algoritmi zapisani dobro oblikovanim umjetnim jezikom mogu biti
mnogo sažetiji, obično su mnogo pregledniji i mogu se jednoznačno tumačiti.
U tom slučaju algoritmi se nazivaju programima, a jezici programskim
jezicima. Objekti se tada nazivaju podacima, a klase objekata tipovima
podataka.
• Ako se želi da algoritme automatski obavljaju računala, onda algoritme treba
prevesti u program sastavljen od instrukcija koje služe za upravljanje strojem.
Računala mogu obavljati samo vrlo jednostavne korake, pa se algoritmi
moraju zapisati jezikom u kojem postoje samo vrlo jednostavne instrukcije. U
tom slučaju govorimo o strojnom jeziku računala.
Jezici za zapisivanje algoritama
• STROJNI JEZICI – teško razumljivi i vrlo neprikladni za čovjeka

• VIŠI PROGRAMSKI JEZICI – razumljiviji čovjeku

• Primjeri viših programskih jezika :


• FORTRAN( FORmula TRANslator )
• BASIC( Beginner’s All – purpose SymbolicInstructionCode )
• ALGOL( ALGOrithmicLanguage )
• Pascal
• Ada
• C...

• S obzirom da su vrste osnovnih objekata u takvim jezicima relativno jednostavne i da najčešće poprimaju oblik
brojki ili slova, objekti se najčešće nazivaju podacima, a klase objekata tipovima podataka.

• Pojedini koraci u algoritmu zapisuju se instrukcijama koje su sastavljene od simbola operatora (kazuje koju
operaciju treba provesti s odabranim operandima - argumentima).
Jezici za zapisivanje algoritama
• Početne vrijednosti objekata nazivaju se ulaznim podacima, a završne vrijednosti objekata izlaznim podacima
programa.

• Stvaranje programa započinje njegovim zasnivanjem u jeziku zasnivanja programa (engl. Program Desing
Language – PDL), a zatim se tako zapisan algoritam prepisuje u konačni oblik u nekom višem programskom
jeziku.

• Instrukcije se grubo mogu podijeliti na tri vrste:


• instrukcije za obavljanje operacija;
• instrukcije za određivanje toka programa;
• instrukcije za ulaz i izlaz podataka;

• Argumente zovemo ulaznim varijablama, a rezultate izlaznim varijablama i svaku od njih označavamo svojim
simbolom – imenom.

• Primjer operatori za izvođenje aritmetičkih operacija:


• + za zbrajanje, - za oduzimanje, * za množenje, / za dijeljenje
Jezici za zapisivanje algoritama
• Zagrade su samo okrugle. Pomoću njih se mijenja uobičajeni redoslijed obavljanja operacija.
• Rezultat obavljene operacije neke instrukcije zapisuje se u varijablu rezultata.
• Simbol operatora pridruživanja rezultata varijabli: :=
• Na primjer instrukcija koja zbroj dvaju brojeva a i b zapisuje kao rezultat c
C := A+B; čitamo: varijabli C pridružiti vrijednost zbroja varijabli A i B

• Za označavanje simbola varijabli koriste se velika slova ili više uzastopno napisanih velikih slova i
znamenki, s tim da prvi znak uvijek bude slovo.
• Napomena! Znak pridruživanja ne smije se zamijeniti sa znakom jednakosti u matematici.
• Argumenti (ulazne varijable) nepromjenjive veličine nazivaju se konstantama.
Primjer 3.
funkcija instrukcija
____________________________________
y=x Y := X;
y=a*x+b Y := A * X + B;
y=x*y Y := X * Y;
y=1/x Y := 1 / X;
y=x*x+1 Y := X * X + 1;
y = x * ( x –1 ) Y := X * ( X – 1 )
y=a*(x*(x–1)+b) Y := A * ( X * ( X – 1 ) + B );
Primjer 4.
• Sljedeći slijed instrukcija određuje redom prvih pet potencija ulazne varijable X:
Y := 1;
Y := Y * X;
Y := Y * X;
Y := Y * X;
Y := Y * X;
Y := Y * X;
• Nakon prve instrukcije varijabla Y poprima vrijednost 1. Nakon obavljanja druge
instrukcije Y poprima vrijednost X, a nakon treće vrijednost X * X = X2. Sljedeće
instrukcije redom izračunavaju slijedeće potencije varijable X. Nakon zadnje
instrukcije varijabla Y poprima vrijednost X5.
• Napomena! Svaki broj različit od nule na nultu potenciju ima vrijednost 1, tako da se
prvo pridruživanje Y := 1 može smatrati nultom potencijom varijable X
Grupe instrukcija i programi
• Grupiranje instrukcija označava se vertikalnom crtom ispred cijele grupe.
• U nekim višim programskim jezicima početak i kraj grupe označava se
posebnim znacima ili posebnim riječima:
Pascal: početak – begin
kraj – end
C: početak – {
kraj – }
• Ključne ili rezervirane riječi – odabrane riječi ili kratice za označavanje
nekog djelovanja u algoritmu (obično se tiskaju masnim slovima ili se
podcrtavaju)
Grupe instrukcija i programi
• Početak programa označava se riječju početak, a njegov završetak riječju kraj i točkom iza te riječi.
Instrukcije programa se pišu jedna ispod druge, te se pretpostavlja da će one biti obavljane onim
redom kojim su zapisane.
• Program pisan jezikom zasnivanja ima slijedeći izgled:

početak
instrukcija 1;

instrukcija 2;

instrukcija 3;

instrukcija N;

kraj.
Instrukcije za određivanje toka programa, slikovni
prikaz programa
Jedna od važnih instrukcija za određivanje toka programa određena je ključnim riječima: “ ako je… onda… inače“.

Ona služi za donošenje odluke o obavljanju jedne od dviju alternativnih grupa instrukcija koje se može nazvati granama. Tri ključne riječi instrukcije ako je, onda i
inače (engleski if, then, else)

U zapisivanju algoritama ova se instrukcija piše na slijedeći način:


ako je uvjet

onda

prva instrukcija grane 1;

zadnja instrukcija grane 1;

inače

prva instrukcija grane 2;

zadnja instrukcija grane 2;


Instrukcije za određivanje toka programa, slikovni
prikaz programa
• Kada se piše “uvjet” podrazumijeva se da se ispituje njegova ispunjenost
• Vertikalne crte ispred niza instrukcija jedne grane označavaju da se čitava grana može smatrati jednom grupnom
instrukcijom.
• Ako se pojedina grana sastoji samo od jedne instrukcije, ona se može pisati u istom retku s ključnom riječi onda,
odnosno inače, i tada se ispred nje ne piše vertikalna crta:

ako je uvjet
onda instrukcija grane1
inače instrukcija grane2;

• Napomena! Kada neposredno iza instrukcije u programu dolazi ključna riječ(primjerice iza “instrukcija grane1” piše
inače) nije potrebno upotrijebiti razdjelnik “;”, jer ključna riječ istovremeno služi i kao razdjelnik.
Instrukcije za određivanje toka programa, slikovni
prikaz programa
Kada postoji samo jedna grana koja se obavlja uz ispunjeni uvjet, tada otpada ključna riječ inače i njezina
grana, pa struktura složene instrukcije izgleda ovako:

ako je uvjet
onda
prva instrukcija grane ;
:
zadnja instrukcija grane;
ili, ako se uz ispunjenje uvjeta obavlja samo jedna instrukcija:

ako je uvjet
onda instrukcija grane
Primjer 5.
Neka se za vrijednosti x < 5 želi izračunavati funkcija y = 2x2+ 3, a za vrijednosti x>= 5 funkcija y = (2x+3)2–1,
Program koji obavlja taj zadatak bi mogao glasiti ovako:

početak

ako je X < 5

onda

Y := X * X ;

Y := 2 * Y ;

Y := Y + 3

inače

Y := 2 * X ;

Y := Y + 3 ;

Y := Y * Y ;

Y := Y - 1 ;

kraj.
Primjer 6.
Funkcija apsolutne vrijednostivarijable /x/ definirana je ovako:
y = { /x/ = x ako je x >= 0;
y = { /x/ = - x ako je x < 0
Složena instrukcija koja za danu vrijednost nezavisne varijable X određuje apsolutnu vrijednost i pridružuje je varijabli Y,
glasila bi ovako:
ako je X < 0
onda Y := - X;
inače Y := X;
Uz pretpostavku da se varijabla X kasnije više neće upotrebljavati u izvornom obliku, pa prema tome ne smeta ako se
njezina vrijednost promijeni, algoritam se može modificirati u:
ako je X < 0
onda X := - X;
Y := X;
Slikovni prikazi algoritma
• Dijagram toka programa

Slijed instrukcija Instrukcije odlučivanja


Slikovni prikazi algoritma
• Instrukcije za obavljanje operacija – pravokutnici s podebljanim strelicama koje
označavaju redoslijed njihova izvođenja;
• Ulazni priključci argumenata – označeni su s gornje strane pravokutnika crticom koja
na vrhu ima mali kružić;
• Rezultat – crtica s kružićem s donje strane pravokutnika;
• Uz oznake priključaka mogu se napisati imena varijabli.
• Argumenti se dovode na ulazne priključke, a na izlaznim priključcima se pojavljuje
rezultat.
• Izlazni priključci jedne instrukcije mogu biti spojeni na ulazne priključke drugih
instrukcija.
• Za slikovni prikaz instrukcije odlučivanja koristi se romb koji ima dvije izlazne strelice
koje određuju daljnji tok odvijanja programa ovisno o ispunjenju uvjeta koji se
ispituje.
Slikovni prikazi algoritma
• Argumenti instrukcija mogu se definirati na dva načina:

1. instrukcije koje pridružuju pojedinim varijablama konstantne vrijednosti (pridruživanje unutar samog programa)

X := 10; - vrijednosti varijabli se utvrđuju prilikom pisanja programa

Y := 2; - varijable poprimaju zadane vrijednosti tijekom izvođenja

Z := 10.3; programa i to u trenutku završetka instrukcije pridruživanja

2. instrukcije za zadavanje vrijednosti varijabli tijekom odvijanja algoritamskog procesa (dovođenje varijabli izvana)

ulaz(X) ; - varijable poprimaju vrijednosti u trenutku nakon završetka

ulaz(X, Y) ; - instrukcije koja prihvaća te vrijednosti iz okoline

ulaz(X, Y, Z) ; - vrijednosti “ulaze” izvana u varijable programa ulazna instrukcija

izlaz (X) ; - neke od rezultata je potrebno prenijeti u okolinu u kojoj će se koristiti

izlaz (X, Y) ; - vrijednosti “izlaze“ u okolinu – izlazne instrukcije

izlaz (X, Y, Z) ;
Instrukcije pridruživanja konstante i načini crtanja ulaznih i
izlaznih instrukcija

• Instrukcija pridruživanja konstante i ulazna instrukcija nemaju ulaznih priključaka, dok izlazna
instrukcija nema izlaznih priključaka.
• Napomena! Podebljane crte koje povezuju instrukcije označavaju redoslijed njihova obavljanja, a
vertikalne dvostruke crte s horizontalnim ograncima simboliziraju varijable. Horizontalne strelice koje
vode od izlaznih priključaka instrukcija prema crti varijable “stavljaju” na crtu varijable novu vrijednost.
Horizontalne strelice usmjerene od crte dovode na ulazne priključke instrukcije vrijednosti varijable.
• Tijekom odvijanja algoritamskog procesa vrijednost na vertikalnoj crti varijable se mijenja samo onda
kada neka instrukcija na nju postavlja novu vrijednost.
Instrukcije za ponavljanje dijelova
programa
Izračunavanje prvih deset potencija varijable X može se zapisati kao cjeloviti
program na slijedeći način:
početak izlaz (Y) ;
ulaz (X) ; Y := Y * X ;
Y := 1 ; izlaz (Y) ;
Y := Y * X ; Y := Y * X ;
izlaz (Y) ; izlaz (Y) ;
Y := Y * X ; Y := Y * X ;
izlaz (Y) ; izlaz (Y) ;
Y := Y * X ; Y := Y * X ;
izlaz (Y) ; izlaz (Y) ;
Y := Y * X ; Y := Y * X ;
izlaz (Y) ; izlaz (Y) ;
Y := Y * X ; kraj
Instrukcije za ponavljanje dijelova
programa
Program bi mogao biti kraći kada bismo ga mogli
napisati na ovaj način:
početak
ulaz (X) ;
Y := 1;
10 puta ponoviti
Y:= Y * X ;
izlaz (Y) ;
kraj .
Instrukcije za ponavljanje dijelova
programa
U hrvatskom jeziku za zasnivanje programa to možemo napisati na sljedeći način:
početak
ulaz (X) ;
Y := 1;
za I := 1 do 10 činiti
Y:= Y * X ;
izlaz (Y) ;
kraj .
• Kako bismo nadzirali broj ponavljanja petlje, uvodimo upravljačku varijablu I (iterator). Njezina je početna vrijednost
jednaka 1 i pri svakom ponavljanju vrijednost joj se povećava za 1. Ponavljanje se zaustavlja kada ona dosegne
vrijednost 10.
• Taj se postupak naziva inkrementiranje (povećavanje za 1). Suprotan postupak naziva se dekrementiranje(smanjivanje
za 1).
• Na temelju ovog primjera može se uvesti općenita algoritamska konstrukcija koja omogućuje ponavljanje dijelova
programa s unaprijed zadanim brojemponavljanja.
Instrukcije za ponavljanje dijelova
programa
• Uvodimo upravljačku varijablu I koja poprima vrijednosti iz skupa prirodnih brojeva i
mijenja se od neke početne vrijednosti PV do neke konačne vrijednosti KV. Varijabla
se pri svakom ponavljanju povećava za 1. Ponavljanje prestaje kada upravljačka
varijabla poprimi svoju konačnu vrijednost.
Ponavljanje se zapisuje ovako:

za I := PV do KV činiti
instrukcija 1 ;
instrukcija 2 ;
.
:
instrukcija N ;
Instrukcije za ponavljanje dijelova
programa
Djelovanje instrukcije ponavljanja može se razjasniti sljedećim programom:
I := PV ;
instrukcija 1 ;
instrukcija 2 ;
.
:
instrukcija N ;
I := I +1 ;
ako je I<= KV
onda “vrati se na instrukciju 1” ;
Instrukcije za ponavljanje dijelova
programa
Slikovni prikaz ovog programa prikazan je na slijedećoj slici:
- PV i KV su konstante
Ponavljanje s ispitivanjem uvjeta
Koriste se dvije vrste petlje:
1.) petlje s ispitivanjem uvjeta prije izvođenja niza instrukcija
2.) petlje s ispitivanjem uvjeta nakon izvođenja niza instrukcija

Petlja s ispitivanjem uvjeta prije izvođenja niza instrukcija prikazuje se slijedećom konstrukcijom:
dok je uvjet činiti
instrukcija 1 ;
instrukcija 2 ;
.
:
instrukcija N ;
odrediti uvjet
• Na početku se ispituje uvjet, ako je uvjet ispunjen obavlja se niz instrukcija ispred kojih je vertikalna crta.
Pretpostavlja se da se tijekom izvođenja instrukcija mijenjaju vrijednosti varijabli koje određuju moguću promjenu
uvjeta.
Ponavljanje s ispitivanjem uvjeta
• Nakon niza instrukcija vraća se na početak niza instrukcija i ispituje uvjet. Kada se ustanovi da uvjet nije ispunjen, instrukcije se
prestaju ponavljati. Instrukcija “odrediti uvjet” samo simbolički označava to djelovanje i ne mora se posebno pojavljivati u petlji.
Važno je samo da se unutar petlje nekako dogodi promjena uvjeta. Ako se nizom instrukcija uvjet nikada ne bi promijenio, petlja
bi se ponavljala trajno. Petlja s ispitivanjem uvjeta nakon izvođenja niza instrukcija prikazuje se sljedećom konstrukcijom.:

ponavljati

instrukcija 1 ;

instrukcija 2 ;

instrukcija N ;

odrediti uvjet

do uvjet

• Uvjet se ispituje nakon obavljanja niza instrukcija. Niz instrukcija se ponavlja sve dok uvjet nije ispunjen. Kada se
djelovanjem instrukcija dogodi ispunjenje uvjeta, ponavljanje prestaje i program počinje izvoditi instrukciju koja slijedi
iza petlje.
Ponavljanje s ispitivanjem uvjeta
Ponavljanje s ispitivanjem uvjeta
Slika a) prikazuje petlju “dok je”. Zbog pravilne uporabe ove petlje treba znati sljedeće:
• uvjet se ispituje na početku petlje
• prije ulaska u petlju mora biti poznata početna vrijednost uvjeta UV
• instrukcije u petlji bit će ponavljane dok je uvjet ispunjen, tj. petlja se napušta kada uvjet prestaje biti ispunjen
• može se dogoditi da pri ulasku u petlju uvjet nije ispunjen, pa se instrukcije petlje tada neće obaviti nijednom

Slika b) prikazuje petlju “ponavljati”. Zbog pravilne uporabe ove petlje treba znati sljedeće:
• uvjet se ispituje na kraju petlje
• nije potrebno poznavati vrijednost uvjeta UV pri ulasku u petlju
• instrukcije u petlji bit će ponavljane dok uvjet nije ispunjen, tj. petlja se napušta kada se uvjet ispuni
• instrukcije petlje obavit će se sasvim pouzdano barem jedanput

• Algoritmi se uvijek mogu prilagoditi tako da je moguća uporaba ili jedne ili druge vrste petlje. Petlja
“za” može se prevesti u petlju “dok je” ili u petlju ”ponavljati”.
Primjer 7.
• Množenje dvaju prirodnih brojeva x i y može se svesti na uzastopno pribrajanje
množenika y onoliko puta kolika je vrijednost množitelja x. Množenje se može
ostvariti pomoću petlji “dok je” ili “ponavljati”:

ulaz ( X , Y ) ; ili ulaz ( X , Y )


Z := 0 ; Z := 0 ;
dok je X > 0 činiti ponavljati
Z := Z + Y ; Z := Z + Y ;
X := X - 1 ; X := X - 1 ;
izlaz (Z) ; do X > 0
izlaz (Z) ;
Složene instrukcije –programske
funkcije
• Složeni operatori kao što su izračunavanje rezultata dijeljenja – div(X, Y) ili određivanje ostatka mod(X, Y) koriste se
višestruko u nekom programu pa ih pišemo u obliku programskih funkcija.
• Funkcija je složena instrukcija koja dobiva svoje ime. Uz ime funkcije navode se u zagradama ulazne varijable –
argumenti funkcije, a vrijednost koja se izračunava istaknuta je instrukcijom vratiti (rezultat). Opis funkcije završava
ključnom riječi kraj.
• Funkcije div i mod mogu se opisati na sljedeći način:
div ( X , Y ) mod ( X , Y )
R := Y ; R := Y ;
Q := 0 ; Q := 0 ;
dok je R >= X činiti dok je R >= X činiti
R := R – X ; R := R – X ;
Q := Q + 1; Q := Q + 1;
vratiti (Q) ; vratiti (R) ;
kraj. kraj.
Složene instrukcije –programske
funkcije
• sličnost funkcija div i mod – istovremeno izračunavaju kvocijent i ostatak
• različitost funkcija div i mod – rezultat koji vraćaju
• riječi div i mod mogu se smatrati oznakama, tj. simbolima operacija, jednako
kao i simboli +, -, *, /, samo što se pišu ispred argumenata, a ne između njih.
• Primjer: za određivanje najveće zajedničke mjere M ( X, Y ) dvaju prirodnih
brojeva postoji jedan od najstarijih zapisanih algoritama. Opisao ga je Euklid
(grčki matematičar, 3 st.p.n.e.) i utemeljio na sljedećim razmatranjima:
• ako su dva prirodna broja X i Y jednaka, njihov je najveći zajednički djelitelj Z
jednak jednom od njih
• ako su X i Y različiti, tada razlika većeg i manjeg broja i manji broj imaju jednak
najveći zajednički djelitelj kao i zadani par brojeva
Složene instrukcije –programske
funkcije
Euklidov se algoritam može zapisati sljedećim programom:

ulaz ( X, Y ) ;
U := X ;
V := Y ;
dok je U ≠ V činiti
ako je U> V
onda U := U – V
inače V := V – U ;
Z := U ;
izlaz (Z)
Složene instrukcije –programske
funkcije
• Provjera algoritma može se načiniti s nekim odabranim parovima vrijednosti X i Y. Na primjer, ako je X
= 24, a Y = 18, tada su međurezultati prikazani tablicom.
• Dakle, najveći zajednički djelitelj je Z = 6.

• Euklidov algoritam se može modificiratitako da se umjesto višestrukog odbijanja obavi dijeljenje


prirodnih brojeva, te da se ostatak dijeljenja uspoređuje s većim brojem
Složene instrukcije –programske
funkcije
Taj algoritam glasi:

ulaz ( X, Y ) ;

U := X ;

V := Y ;

R := 1 ;

dok je R ≠ 0 činiti

ako je U > V

onda

U := mod ( U, V )

R := U ;

W := V

inače

V := mod ( V, U )

R := V ;

W := U ;

izlaz ( W )
Složene instrukcije –programske
funkcije
Početna vrijednost varijable R određena je s R := 1. Međutim, to bi mogla biti i bilo koja druga vrijednost
različita od nule.
Važno je samo osigurati da se pokrene prvi prolaz kroz petlju. Provjera algoritma s vrijednostima varijabli X
= 24 i Y = 18 i dalje.

Treba zapaziti da je drugu varijantu algoritma složenije zapisati, ali da se ona kod većine slučajeva obavlja
u manje prolaza kroz petlju. Međutim, kada je funkcija mod ( u, v ) ostvarena uzastopnim odbijanjem,
tada je broj osnovnih operacija koje treba obaviti podjednak u obje varijante
Neke praktične funkcije
• Funkcija za određivanje apsolutne vrijednosti cijelog broja, funkcija za određivanje većeg, odnosno manjeg od dvaju
brojeva. Određivanje apsolutne vrijednosti nekog broja iz skupa cijelih brojeva može se definirati kao funkcija:
abs (X)
ako je X < 0
onda Y := -X
inače Y := X ;
vratiti (Y) ;
kraj.

Određivanje apsolutne vrijednosti unutar nekog programa :


Y := abs (X) ; - definirana funkcija se primjeni u operatoru pridruživanja
A := abs (B) ;
A := abs (A) ;
Neke praktične funkcije
• Funkciju za odabiranje većeg od dva broja označavamo s max, a funkciju za odabiranje manjeg nazivamo min:

max( X, Y ) min ( X, Y )
ako je X > Y ako je X > Y
onda Z := X onda Z := Y
inače Z := Y ; inače Z := X ;
vratiti (Z) ; vratiti (Z) ;
kraj . kraj .

• Napomena! Imena operanada mogu se proizvoljno odabrati.


• Euklidov algoritam može se također napisati kao funkcija. Umjesto oznake M ( X, Y ) koja se koristi u matematici,
uvodi se oznaka nzm( X, Y ) – najmanja zajednička mjera.
Neke praktične funkcije
Funkcija se definira na sljedeći način:
nzm ( X, Y )
dok je X ≠ Y činiti
U := min( X, Y ) ;
V := max( X, Y ) ;
X := U ;
Y := V – U ;
vratiti ( X )
kraj
Stvaranje algoritama i njihova
vremenska složenost
• Stvaranje algoritama je kreativna djelatnost te oni nastaju na različite načine.

• Iskustveno stvaranje algoritama se sastoji od opažanja i eksperimentiranja (fizika, kemija…)

• Vrste algoritama:
1. Imitacijski algoritmi
oponašaju ili imitiraju ponašanje stvarnih objekata
2. Eksperimentalni algoritmi
usko su povezani s imitacijskim algoritmima
nastaju na temelju eksperimentiranja u neživoj prirodi, organskom svijetu ili u društvu
3. Teorijski algoritmi – najsloženiji, objedinjuju imitacijske i eksperimentalne algoritme
4. Konstrukcijski algoritmi
• čine skup svih prethodnih algoritama
• slaganjem prethodnih algoritama mogu se konstruirati novi algoritmi
Ekvivalentni algoritmi i složenost
algoritama
• Dva algoritma su ekvivalentna kada su:
• klase ulaznih objekata dozvoljene i za jedan i za drugi algoritam
• rezultati jednog i drugog algoritma za jednake ulazne objekte jednaki
• Ispravnost ili korektnost algoritama
• algoritam je korektan ako za sve objekte iz klase dozvoljenih ulaznih
objekata omogućuje određivanje rezultata i ako je taj rezultat ispravan pri
svim mogućim vrijednostima ulaznih varijabli
• provjeravanjem algoritma s različitim vrijednostima ulaznih varijabli ne
može se potpuno sigurno utvrditi da li je algoritam ispravan
• ako se otkrije i samo jedan pogrešan rezultat, može se tvrditi da je
algoritam nekorektan
Ekvivalentni algoritmi i složenost
algoritama
• Trajanje algoritamskog procesa
• odgovara broju osnovnih operacija koje treba izvesti,
odnosno proporcionalno je ukupnom broju operacija
• naziva se još i vremenska složenost ili kompleksnost
algoritma
• zapisuje se kao O ( n )
• ako je trajanje algoritma proporcionalno s brojem ulaznih
vrijednosti, pišemo da je njegova složenost O ( n )
• algoritam konstantnog trajanja ima složenost npr. O ( 1 )
Ekvivalentni algoritmi i složenost
algoritama
• Tablica različitosti trajanja algoritamskog procesa mjerena brojem operacija
:
koje treba obaviti
Kako se čitaju programi?
• Složene programe je vrlo teško čitati, naročito ako nisu komentirani. Oni se stoga razlažu na manje
cjeline, tzv. Module koji su razumljiviji. To se može načiniti smo onda kada je već pri pisanju program
modularno sagrađen. Osnovna zamisao je program načiniti od odsječaka koji se međusobno
nadovezuju, što je preduvjet strukturiranog programiranja.
• Primjer: Program za izračunavanje pete potencije varijable x može se napisati na sljedeći način:
ulaz ( X ) ;
Y:=1;
Y:=Y*X;
Y:=Y*X;
Y:=Y*X;
Y:=Y*X;
Y:=Y*X;
izlaz ( Y) ;
Kako se čitaju programi?
• Dijagram toka programa s označenim stanjima
Kako se čitaju programi?
• Dijagram:
• početno stanje je označeno kao stanje 0
• u tom stanju operandi imaju vrijednost X0 i Y0
• početno stanje varijable X bit će određeno nakon što program
obavi instrukciju ulaz (X ) , a početno stanje varijable Y određeno
je instrukcijom pridruživanja konstante Y : = 1
• vrijednosti u sljedećim stanjima označene su redom indeksima od
1 do 5
• analizom programa, koja se lakše obavlja promatranjem
dijagrama toka, može se redom pisati vrijednosti varijabli u
pojedinim stanjima:
Kako se čitaju programi?
• Vrijednosti varijabli u pojedinim stanjima
Svojstva algoritama
• U stanju 5 pronalazi se konačni rezultat Y5. Uz Yo = 1, dobiva se Y5= Xo5, što se i
željelo postići.
• Program za izračunavanje pete potencije može se napisati pomoću petlje “za “:
ulaz ( X ) ;
Y := 1 ;
za I := 1 do 5 činiti
Y := Y * X ;
izlaz ( Y ) ;
• Pri čitanju tog programa stanje se mora očitati nakon svakog prolaza kroz petlju, tako
da se dobiva potpuno jednaki opis stanja kao za prethodni program. To znači da
petlje u programu treba čitati tako da se zamišlja kao da su instrukcije petlje
napisane uzastopce onoliko puta koliko se petlja ponavlja.
Primjer 8.
• Ustanoviti kakvu funkciju obavlja sljedeći program:

ulaz ( X ) ;

Y := A ;

Y := X * Y + B ;

Y := X * Y + C ;

Y := X * Y + D ;

izlaz ( Y ) ;

• Konstante A, B, C i D određene su unutar prethodnih instrukcija.

• Tablica stanja izgleda ovako:


Primjer 8.
• Konačna vrijednost varijable Y dobivena je uzastopnim uvrštavanjem vrijednosti varijabli:
Y = Y4= Xo * Y3+ D
= Xo * ( Xo * Y2 + C ) + D
= Xo * ( Xo * ( Xo * Y1+ B ) ) + D
= Xo * ( Xo * (Xo * A + B ) + C ) + D
= Xo2 * ( Xo * A + B ) + C * Xo + D
= A * Xo3 + B * Xo2 + C * Xo + D
• Program računa vrijednost polinoma trećeg stupnja s koeficijentima a, b, c i d, i to po
Hornerovoj formuli, tj. izračunava funkciju:
f ( x ) = ( ( a * x + b ) * x + c ) * x + d.

You might also like