osnove algoritmi

31
SADRŽAJ UVOD 2 1. POJAM ALGORITMA 3 2. PRIKAZ ALGORITAMA 4 2.1 UREĐIVANJE NIZA PODATAKA 5 2.2 KLASIFIKACIJA ALGORITAMA 7 2.3 PSEUDOKOD 8 2. 4 VARIJABLE I OPERATORI 11 2.5 DIJAGRAM TOKA PODATAKA 12 2. 6 OSNOVNE KARAKTERISTIKE DTP – a 14 3. TIPOVI ALGORITAMSKE STRUKTURE 15 3.1 LINIJSKA ALGORITAMSKA STRUKTURA 15 3.2 RAZGRANATA ALGORITAMSKA STRUKTURA 16 3.3 PETLJE 20 ZAKLJUČAK 22 1

Upload: emir-brcaninovic

Post on 29-Jun-2015

1.371 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: OSNOVE ALGORITMI

SADRŽAJ

UVOD 2

1. POJAM ALGORITMA 3

2. PRIKAZ ALGORITAMA 4 2.1 UREĐIVANJE NIZA PODATAKA 5 2.2 KLASIFIKACIJA ALGORITAMA 7 2.3 PSEUDOKOD 8 2. 4 VARIJABLE I OPERATORI 11 2.5 DIJAGRAM TOKA PODATAKA 12 2. 6 OSNOVNE KARAKTERISTIKE DTP – a 14

3. TIPOVI ALGORITAMSKE STRUKTURE 15 3.1 LINIJSKA ALGORITAMSKA STRUKTURA 15 3.2 RAZGRANATA ALGORITAMSKA STRUKTURA 16 3.3 PETLJE 20

ZAKLJUČAK 22

LITERATURA 23

1

Page 2: OSNOVE ALGORITMI

U ovoj meni jako zanimljivoj oblasti vezanoj za algoritme u daljem izlaganju će biti riječi o pojmu , vrsti strukturi algoritama . Pošto sam ovu oblast nekako izbjegla naučiti u školi kad sam trebala, evo sad joj se posvečujem . I onda kao i sad imam priliku da je zaobiđem ali neću. Na način kako sam shvatila ovu oblast uz mnoštvo primjera , skica , grafikona i teksta ću nastojati da je što bolje obradim. U daljem izlaganju seminarski rad počinje sa definisanjem samog pojma algoritma i prikaz algoritama .A najviše je riječi o klasifikaciji algoritama tj . uobičajeni korišteni obrasci ( podijeli , pa vladaj , dinamičko programiranje , pohlepni algoritam ,linearno programiranje , pretraga i numeracija , heuristički algoritmi i algoritmi slučajnosti ) . Zatim dalje se obrađuju načini zapisivanja algoritama preko pseudo koda i dijagrama toka podataka . Tu se još nalaze opisani tipovi algoritamske strukture : linijska , razgranata i petlje . Na kraju ovog seminarskog rada je zaključak i spisak literature koju sam koristila .

2

Page 3: OSNOVE ALGORITMI

1. POJAM ALGORITMA

Abu Abdullah Muhammad bin Musa al-Khwarizmi (cca. 780. - cca. 840) je persijski naučnik, matematičar, astronom i pisac. Poznat je kao pronalazač algebre, koja je ime dobila po naslovu jedne njegove knjige. Zaslužan je za širenje indijskih brojeva po Zapadu. Al-Khwarizmi (Abu Jafar Muhammad ibn Musa al-Khwarizmi) je uveo modernu numeričku notaciju. Malo se zna o njegovom životu; bio je član bagdadske Akademije nauka i pisao o matematici, astronomiji i geografiji. Njegova knjiga Algebra (Hisab al-jabr w’al-muqabala) uvela je ovo ime, mada se veliki dio knjige bavi računanjem. On daje opći metod (al-Khwarizmijevo rješenje) za nalaženje dva korijena kvadratne jednačine. Njegov al jabr je postala algebra. Isto tako pravila rješavanja iz početka prvenstveno matematički problema su iskrivljavanjem imena al Khowarizmi nazivana algoritmi. Tako mi danas imamo algoritme, a oni su niz preciznih uputa koje nas korak po korak vode do rješenja nekog problema. To su zapravo toliko precizne upute da za njihovo izvršavanje nije potrebna inteligencija. Izrada algoritma u programiranju prethodi samom pisanju programa. Pri pisanju programa prvo nam mora biti jasno što se zapravo od programa očekuje. Kao i kod rješavanja zadataka u bilo kom području prvo moramo znati postaviti problem. Drugi korak je gruba skica rješenja. Treći korak je izrada algoritma. Ako smo dobro napravili algoritam, tada pisanje programa nije ništa drugo doli prepisivanje algoritma u neki programski jezik. Kada smo to učinili dobili smo program, a program "tjera" računalo da radi ono što mi zapravo želimo. Netko je rekao da je računalo idiot velike brzine. To je ustvari bit priče o algoritmima. Mi put do rješenja moramo toliko rascjepkati i detaljno napisati da bi ga mogao razumjeti i taj "idiot velike brzine". Drugim riječima, upute moraju biti jednostavne i precizne tako da ih može izvršavati i stroj .  U svakodnevnom životu smo zapravo stalno u doticaju s algoritmima, a često i postupamo po algoritmima da toga nismo niti svjesni. Znati "algoritamski" razmišljati dobro je bez obzira bavili se programiranjem ili ne. U matematici i računarskoj nauci algoritam je određeni skup definisanih naredbi za obavljanje nekog zadatka. Algoritmi se koriste u računarskim programima kao način rješavanja nekog zadatka. Algoritam također može da znači grafički prikaz toka obrade ili skup instrukcija računarskog programa (tad se preciznije naziva dijagram toka). On predstavlja vodilju za programera koji pomoću algoritama predstavlja viziju programa koji želi napisati u programskom jeziku.Algoritam se moze predstaviti u nekoliko nacina mada je najbolja blog dijagram ili organogram, pored te se jos javljaju i predstavljanje u obliku govora i tabelarno. Predstavljanje govorom nije toliko preporucljivo jer ne govore svi istim jezikom pa tu moze doci do spora pri razumjevanju algoritma.Koncept algoritma se obično ilustruje pojednostavljeno, iako je u stvarnosti veoma komplikovan. Algoritmi sadrže stepenice koje se ponavljaju ili zahtijevaju odluke koje propisuje programer. Koncept algoritma je dobio formu 1936. preko Turingovih mašina i Alonzo Churchovog lambda calculusa, koji su praktično udarili temelje računarske nauke. Većinu algoritama je moguće implementirati u računarski program.U početku algoritmom se nazivaju samo pravila računanja s brojevima , kasnije i pravila obavljanja ostalih zadataka u matematici . U XX vijeku , pojavom računala pojam se proširuje na računarstvo , a zatim i na druga područja .Precizan opis svih pravila i postupaka potrebnih za postizanje željenog rezultata . Algoritam je konačni skup pravila koja daju redoslijed operacija za rješavanje specifičnog problema .

3

Page 4: OSNOVE ALGORITMI

2. PRIKAZ ALGORITAMA

Algoritam je ključni pojam u računarskoj obradi podataka jer je računarski program izvjestan algoritam koji računaru objašnjava koje korake (naredbe) i kojim redoslijedom treba da obavlja. Tako se algoritmom može smatrati bilo koji niz instrukcija koja se može uraditi na Tjuring-kompletnoj mašini.Tipično, kada se uz algoritam vezuje pojam obrade podataka, podrazumijeva se da se podatak prvo učita preko ulazne jedinice a ispisuje se na izlaznu jedinicu ili čuva za kasniju upotrebu. Sačuvani podaci se smatraju dijelom unutrašnjeg stanja sistema.Za svaki računarski posao algoritam mora biti jasno definisan; naveden na način koji podrazumijeva sve moguće situacije koje se mogu pojaviti. Znači, svaki uslovni korak se mora sistematično obraditi, slučaj po slučaj; uslov za svaki slučaj mora biti jasan i izračunljiv.Pošto je algoritam jasan niz preciznih koraka, redoslijed izračunavanja je uvijek kritičan za funkcionisanje algoritma. Pretpostavlja se da su instrukcije navedene jasno, da počinju od vrha i da teku do dna. Ova ideja se formalno opisuje kontrolom toka.Kod ovakve formalizacije se unaprijed uzimaju pretpostavke o imperativnom programiranju. Ovo je najuobičajeniji koncept u programiranju i opisuje postupke na mehanički način. Jedinstveno za ovaj koncept je operacija dodjeljivanja, što je davanje vrijednosti promenljivoj. Ovo proizilazi iz intuitivnog poimanja memorije kao privremenog skladištenja odnosno pamćenja.Razvoj i prikaz algoritama preduvjet je izrade programa . Algoritmi se mogu prikazati na različite načine :

opisno rečenicama grafički ( dijagramom toka ) u nekom jeziku koji je blizak čovjeku ( pseudokod ) nekim strogo formaliziranim programskim jezikom

Dva najčešća načina su pseudokod i dijagram toka podataka .Postoji pet značajnih svojstava algoritama :

konačnost – mora uvijek završiti nakon konačnog broja koraka definiranost – svaki korak algoritma mora biti precizno definiran, akcije koje treba

poduzeti moraju biti u svakom sučaju rigorozno i nedvosmisleno specificirane ulaz – algoritam može ali i nemora imati ulazne veličine koje su date inicijalno prije

početka algoritma izlaz – algoritam ima jednu ili više izlaznih veličina koje su u specificiranom odnosu sa

ulaznim veličinama efikasnost – se očekuje od svakog algoritma

STRUKTURU ALGORITAMA ČINE :

4

Page 5: OSNOVE ALGORITMI

OPERATORI DISKRIMINATORI

2. 1 UREĐIVANJE NIZA PODATAKA

Postoji mnogo načina da se niz podataka uredi, od najelementarnijih do veoma kompleksnih metoda. Izbor metode, odnosno algoritma, zavisi od procjene "početnih uslova": ako se sortira kratak niz podataka, lakše je izabrati elementarni metod koji ćete lako implementirati. Međutim, ako se sortiranje ponavlja veliki broj puta ili se radi o ogromnim nizovima, brzina postaje jako bitan, čak odlučujući faktor.

Efikasnost nekih algoritama zavisi od početne "sortiranosti" elemenata: algoritam koji je najbolji kada su brojevi nasumično raspoređeni može da se pokaže veoma sporim ako su brojevi već gotovo sortirani. Zbog toga ćemo pri predstavljanju metoda sortiranja njihovu efikasnost pratiti sa tri aspekta: nad slučajno generisanim nizom elemenata, nad potpuno sortiranim i nad "inverzno" sortiranim nizom elemenata, pri čemu je ovaj poslednji redoslijed "noćna mora" mnogih algoritama. Takođe, značajan podatak je i količina dodatne memorije, neophodna za pojedine metode sortiranja. Ovdje je moguće izdvojiti tri slučaja. U prvom, sortiranje se odvija na "licu mjesta", odnosno dodatna memorija je neophodna za neki vrlo mali stek ili tabelu. Drugi slučaj je karakterističan za algoritme koji koriste povezanu listu, pa im je, shodno tome, potrebna memorija za još N (broj elemenata koji se sortiraju) pointera, a treći, memorijski najzahtjevniji, za algoritme kojima je neophodna kompletna kopija niza elemenata koji se sortiraju.

Metoda selekcije

Jedan od najjednostavnijih algoritama je sortiranje metodom selekcije ( selection sort ). Treba pronaći najmanji element niza i zamijeniti ga sa elementom na prvoj poziciji, zatim pronaći slijedeći najmanji element i zamijeniti ga sa elementom na drugoj poziciji itd

Ne upuštajući se u matematičko dokazivanje postavljene teoreme, navedimo da se metodom selekcije, u prosječnom slučaju, izvrši oko n 2 /2 poređenja i n zamena. Na vrijeme izvršavanja utiče samo broj promjene vrijednosti indeksa min - u većini slučajeva reč je o O(n*log(n)) zavisnosti, pa se može smatrati da je metod spor, ali uglavnom "neosjetljiv" na redoslijed ulaznih podataka.

Metoda umetanja

Za nijansu komplikovanija, metoda umetanja ( insertion sort ) je već pomenuta kao efikasno oružje strastvenih kartaroša. Svaka "karta" se posebno posmatra i umeće na odgovarajuće mjesto među već sortirane (npr. žandar između desetke i dame, kralj poslije dame itd), sve dok se sve karte ne srede. Element se umeće na taj način što se svi veći pomjeraju za jednu poziciju udesno. Pri sortiranju elemenata ovom metodom izvrši se prosječno n 2 /4 poređenja i n 2 /8 zamijena, a u najgorem slučaju duplo više. Metod umetanja je efikasan ako se sortira već uglavnom sortiran niz (tada teži linearnom), pošto broj poređenja i zamijena značajno zavisi od strukture ulaznih podataka.

5

Page 6: OSNOVE ALGORITMI

Metoda mjehurića

Bubble sort je kombinacija prethodna dva metoda, a izgleda ovako: polazi se od prvog elementa i ide, redom, do kraja niza. Svaki element se poredi sa prvim i ako je veći od njega, dalje poređenje se vrši sa novim elementom. U prvom prolazu se, dakle, pronalazi najveći element koji će se na kraju prolaza naći na poslijednjem mjestu u nizu. U slijedećem prolazu se opet kreće od prvog elementa, ali se završava sa pretposljednjim. Za razliku od metode selekcije gdje se niz sortira "slijeva", odnosno prvo se sortiraju najmanji elementi, kod bubble sorta prvo se sortiraju najveći .

I u prosječnom i u najlošijem slučaju, broj poređenja je reda n 2 /2, kao i broj zamijena. I ova metoda je efikasna ukoliko su podaci već sortirani: tada je potreban samo jedan prolaz kroz niz.

Shell sortiranje

Ovo je poboljšana verzija Bubble algoritma. Bubble sortiranje je sporo kada mu "podmetnete" niz inverzno sortiranih elemenata, odnosno kada se najmanji element nalazi na kraju niza - pošto se razmjenjuju samo susjedni elementi, biće potrebno mnogo zamijena da on dođe na početak. Shell sortiranje dozvoljava zamjenu međusobno udaljenih elemenata, a bazira se na ideji da se podaci preurede na takav način da, počevši od bilo kog elementa, uzimanje svakog h -tog dovodi do sortiranog niza. Ovakav niz se naziva h -sortiranim, a postepeno smanjujući vrednost h , dolazi se do potpuno sortiranog niza. Analiza ovog metoda nije jednostavna, jer vrijednosti h i vrijednosti za koju se ona umanjuje pri svakom prolazu nisu striktno utvrđene. Štaviše, efikasnost zavisi od izbora ovih vrijednosti (npr. može se početi sa h = n i u svakom prolazu umanjivati h za 2/3h ), ali je prilično neosjetljiva na početnu sortiranost elemenata. Pokazalo se da je ovo metod koji se u opštem slučaju može preporučiti - upoznaćemo i kompleksnije metode koji daju bolje rezlutate, ali njihova implementacija nije ovako jednostavna.

Metoda brojanja raspodjele

Za kraj, predstavimo zgodan algoritam koji efikasno rješava konkretan problem sortiranja niza od ukupno n brojeva, koga čine cijeli brojevi iz opsega [0, m-1]. Ako su m i n jednaki a na raspolaganju je dovoljna memorija, rješenje je vrlo jednostavno: for( i = 0; i <<= n; i++ )

b[a[i] = a[i];

Algoritam se zasniva na pronalaženju broja elemenata koji imaju istu vrijednost. Formira se niz Count od m elemenata , i -ti član predstavlja broj elemenata originalnog niza koji su manji ili jednaki od vrijednosti i . Ako se vrijednost 0 u originalnom nizu podataka pojavljuje tri, a vrijednost 1 šest puta, Count[0] će imati vrijednost 3 a Count[1] vrijednost 3 + 6 = 9. Niz Count služi kao kontrola mjesta umetanja odgovarajućeg elementa u novi niz b i to na slijedeći način: kada se naiđe na vrijednost 0, ona će biti smještena na mesto Count[0] - 1 (oduzima se jedan jer indeksi niza počinju od nule), a sama vrijednost Count[0] biće dekrementirana, da bi se slijedeća nula smjestila na mjesto 1 u novom nizu b . Postupak se ponavlja za svaki element niza koji se sortira, uz dekrementiranje odgovarajuće Count vrijednosti.

6

Page 7: OSNOVE ALGORITMI

2. 2 KLASIFIKACIJA ALGORITAMA

Postoji više načina za razvrstavanje algoritama, a metodologija klasifikacije je tema mnogih rasprava.Jedan način razvrstavanja je po metodologiji projektovanja ili primijenjenom obrascu. Postoji izvjestan broj različitih obrazaca kako se pristupa realizaciji algoritama. Dalje, svaka od navedenih kategorija sadrži više različitih tipova algoritama. Neki uobičajeno korišćeni obrasci su:

Podijeli pa vladaj algoritmi smanjuju stepen složenosti problema podjelom na dva ili više manjih problema od iste vrste (obično rekurzivno), dok od problema ne ostane toliko mali dio da se može jednostavno riješiti.

Dinamičko programiranje . Kada problem pokazuje optimalnu podstrukturu, u smislu da se optimalno rješenje problema može konstruisati iz optimalnog rješenja potproblema, i preklapanjem potproblema, što znači da se isti potproblem koristi za rješavanje više različitih primjera problema, možemo riješiti brzo koristeći dinamičko programiranje, pristup koji izbjegava ponovno izračunavanje rješenja koja su već izračunata. Na primjer, najkraći put do cilja iz čvora težinskog grafa može biti nađen koristeći najkraći put do cilja od svih obližnjih čvorova.

Pohlepni algoritam . Algoritam lakomosti je sličan dinamičkom programiranju, ali je razlika u tome što rješenja potproblema ne moraju biti poznata u svakom trenutku. Stoga, pri traženju rješenja je moguće napraviti i 'lakom' izbor onoga što izgleda najbolje u tom trenutku.

Linearno programiranje . Problem se rješava korišćenjem linearnog programiranja kada postoji više linearnih nejednačina a zadatak je naći maksimum (ili minimum) po nekom kriterijumu. Mnogi realni problemi (kao što je maksimiziranje protoka u usmjerenom grafu) mogu biti iskazani na ovaj način, a onda riješeni nekim 'generičkim' algoritmom, kao što je Simpleks algoritam.

Pretraga i numeracija . Mnogi problemi (kao što je igranje šaha) mogu biti modelovani kao problemi grafa. Algoritam pretraživanja grafa daje pravila kretanja kroz graf i koristan je baš za ovakve probleme. Ova kategorija obuhvata i algoritme pretraživanja i povratka kroz stablo odlučivanja (bektreking).

Heuristički algoritmi i algoritmi slučajnosti ne odgovaraju u potpunosti strogoj definiciji algoritma

1. Algoritmi slučajnosti prave u nekim situacijama slučajan (ili pseudo slučajan) izbor; za neke probleme se stvarno može dokazati da se do najbržeg rješenja može doći samo uvođenjem izvjesnog stepena slučajnosti.

2. Genetički algoritam pokušava da nađe rješenje problema imitirajući biološku evoluciju , koji u nizu slučajnih mutacija daje uzastopne generacije 'rješenja'. Tako računar simulira razmnožavanje i 'preživljavanje najprilagođenijih'.

3. U genetičko programiranje je ovaj pristup proširen na algoritme, smatrajući i algoritme rješenjem problema.

4. Heuristički algoritmi su takvi algoritmi čija je osnovna namjena nalaženje optimalnog rješenja, u stvari približnog rješenja, jer vrijeme ili memorijski prostor za izvršavanje algoritma za nalaženje tačnog najboljeg rješenja nije praktično moguće. Primjer algoritama koji su ovakvog tipa su za lokalno pretraživanje, tabu pretraživanje ili algoritam simuliranog otpuštanja, vrsta heurističkog algoritma

7

Page 8: OSNOVE ALGORITMI

slučajnosti koji varira rješenje problema u slučajnim iznosima. Naziv simulacija otpuštanja aludira na metalurški proces suprotan kaljenju kada se metal grije pa sporo hladi radi otklanjanja defekta u materijalu. Namjera slučajnog variranja je traženje što bližeg rešenja opštem optimalnom rešenju, a ne jednostavno lokalno optimalno rešenje. Ideja je da se amplituda slučajne veličine smanjuje kako se približavamo rešenju.

Drugi način razvrstavanja je po implementaciji. Rekurzivni algoritam je takav algoritam koji poziva (referencira) sam sebe uzastopno dok se neki uslov ne ispuni, što je metoda primjenjena kod funkcionalnog programiranja . Algoritmi se obično razmatraju uz pretpostavku da u jednom trenutku izvršavaju jednu instrukciju jednog algoritma. Takvi računari se ponekad zovu serijski računari . Algoritam osmišljen za takvo okruženje se zove serijski algoritam, nasuprot paralelnim algoritmima, koji koriste prednosti računarske arhitekture kod koje više procesora u istom trenu rješava isti problem. Razni heuristički algoritmi bi spali u ovakvu kategoriju, dok bi njihov naziv (recimo genetički algoritam) u stvari opisivao način implementacije

2 . 3 PSEUDOKOD

Pseudokod je algoritam zapisan riječima. Pseudo nam dolazi od grčkog - laž, lažni, nadri, nazovi, tobožnji... Kod je skup dogovorenih znakova kojima možemo oblikovati neku poruku, komunicirati. U programiranju se pod kodom razumijeva izvorni program napisan u nekom programskom jeziku. Prema tome, naš pseudokod bi bio program "lažnjak". Zašto pseudo? Jer a početku se opisuje prostor (memorijske lokacije) neophodne za rad. Sem ulaznih i izlaznih lokacija, ovde se definiše i opisuje privremeni prostor koji predstavlja unutrašnje stanje. Konkretno, ovde rieči Input i Output označavaju prostor koji zauzimaju brojevi, a posebno se riječju Input naglašava da je to ulazni podatak te da je poznat u vrijeme početka rada algoritma, a riječju Output da će tu biti smješten izlazni podatak i da će on biti poznat tek po završetku rada algoritma.U drugom dijelu slijedi ključni dio algoritma koji se često u kolokvijalnom razgovoru zove algoritmom. On se sastoji od nabrajanja konstrukcija koje opisuju tok izvršavanja i uz primjenu konvencija o predstavljanju operacija nad podacima. U našem primjeru imamo:"for each — in — do" je konstrukcija koja znači "za svaki — od — uradi" i predstavlja način za opis iteracije, višestrukog ponavljanja."if — then je način označavanja selekcije, pitalice. Izvjestan niz instrukcija će se izvršiti uslovno, u zavisnosti od kriterijuma."←" je skraćenica za "dodjeljuje se". Na primjer, sa "najveći ← broj", znači da je najveći naziv za memorijski prostor u koji će biti iskopirana vriednost iz memorijskog prostora koji smo nazvali broj.

"return" završava algoritam i iza sebe ostavlja vrijednost (u memorijskom prostoru kome je dat naziv najveći) kao izlaz.Upute ne pišemo u nekom od programskih jezika već dogovorenim riječima i znakovima iz govornog  jezika.  Dakle, ako hoćemo pisati algoritme riječima moramo se prije dogovoriti koje ćemo riječi koristiti. Logičan slijed radnji u nekom programu je ulaz podataka, obrada i izlaz podataka. Prema tome ćemo i odabrati prikladne riječi koje ćemo opisati u tablici:

8

Page 9: OSNOVE ALGORITMI

Početak svaki algoritam ima samo jedan početak

upiši ili ulaz ili unesi ili učitaj

ovo bi bile prikladne riječi za unos podataka preko tipkovnice, miša, bar-kod čitača ili neke druge ulazne jedinice

ispiši ili izlaz ispis podataka na zaslonu monitora, pisaču...

Krajbroj instrukcija u algoritmu mora biti konačan, svaki algoritam mora imati kraj i to samo jedan kraj

U tablici nema riječi za obradu podataka jer za to obično koristimo izraze koji nisu ništa drugo doli prepisane n pr. matematičke formule. Probat ćemo napisati pseudokod za dva i dva ( 2+2) .Sad ćemo algoritam napisati kao da pišemo program, odnosno upute  pravom računalu:

početakupiši 2

Ako bismo napisali upiši 2 tada bi naš algoritam bio samo za zbrajanje 2 i 2 i cijeli svoj život bi radio samo to. Računalni se programi pišu što općenitije, pa ćemo i mi pokušati napisati algoritam za zbrajanje bilo koja dva broja. Kako ne možemo predvidjeti koja će dva broja netko poželjeti zbrojiti, morati ćemo umjesto brojeva koristiti varijable. U matematici je varijabla neka promjenjiva veličina, a u našem programu to će biti mjesto u radnoj memoriji koje je rezervirano za broj koji zbrajamo . U našem primjeru će nam trebati tri takva mjesta. Neka to budu varijable a i b za brojeve koje zbrajamo i c za rezultat.Sada ćemo ponovno napisati pseudokod:

početakupiši a, bc = a + bispiši ckraj

U trećem redu našeg pseudokoda izraz za zbrajanje varijabli a i b napisali smo malo naopako od onoga kako bismo dva broja zbrojili na papiru. Isto tako taj treći red ne bismo pročitali kao u matematici c je jednako a + b. Sjetimo se da radimo s mjestima rezerviranim u radnoj memoriji. Tako sadržaj mjesta u memoriji za rezultat c postaje jednak zbroju sadržaja mjesta u kojima su spremljeni brojevi a i b. Zato to i čitamo c postaje a + b.

Zamijenimo li formalnu, strogu strukturu programskog jezika, manje formalnim sustavom označavanja, dobili smo sustav za predstavljanje algoritma poznat pod nazivom PSEUDO KOD pomoću kojeg možemo izraziti (zapisati) na lakši i manje formalan način tokom postupka razvijanja (smišljanja) samog algoritma. Jedan od načina predstavljanja algoritama pseudokodom je izostavljanje pravila iz naredbi koja prate svaki formalni programski jezik. Ovaj se način obično koristi kada znamo koji ćemo programski jezik koristiti, pa je tako semi-sintaktička struktura kojom opisujemo algoritam velikim dijelom nalik, ali je manje formalna od programskog jezika. Želimo li ipak ponuditi formalni zapis za predstavljanje algoritma neovisan o programskom jeziku, tada formaliziramo oznake za ponavljajuće semantičke strukture i

9

Page 10: OSNOVE ALGORITMI

definiramo pseudo kod kao intuitivni način predstavljanja algoritma kod kojeg ipak postoje određena pravila zapisa. Semantičke strukture koje se izmjenjuju pri opisu algoritma i koje"pokrivamo"pseudokodom su slijedeće :

1. Pridruživanje opisnog imena odgovarajućim vrijednostima: ime = varijabla

2. Strukture koje nude mogućnost odabira jedne od dvije (ili više) ponuđenih vrijednosti na temelju zadovoljenog uvijeta. Tipični primjeri takvih struktura mogu se definirati rečenicom: Ako promet robom raste, naručuje se uobičajena količina proizvoda, inače, uskladištena se roba nudi po nižoj cijeni koju lako prilagođavamo strukturi pseudokoda oblika:

If (uvjet) Then (akcija1) Else (akcija2) Pri čemu koristimo ključne riječi if, then i else da bi naznačili podstrukture u strukturi i koristimo zagrade da bi naznačili granice podstruktura. Na taj je način definirana sintaksa određene semantike prilagođena pseudokodu.

3. Semantička struktura koja udovoljava zahtijevu za izvođenjem određenih aktivnosti sve dok neki uvjet ne postane istinit. Primjer izražen rečenicom: Sve dok sve karte nisu prodane, biljetarnica je otvorena. Takve se izjave uklapaju u obrazac:

While (ima karata za prodaju) do (prodavati karte).

4. Pseudokod koristimo i da bi apstrahirali niz aktivnosti za neku drugu aplikaciju. U računarstvu se takav skup koraka označava različitim imenima: procedura, funkcija, potprogram, modul, a svaki ima, ovisno o aplikaciji, svoje specifične karakteristike i značenje.Izraženo pseudokodom, jedan bi takav skup mogli predstaviti slijedećom strukturom: Procedure Pozdrav Brojčanik = 3 While (Brojčanik>0) do ( print "hello" and Brojčanik = Brojčanik-1 ) Cilj pseudokoda je izraziti algoritam na čitljiv i neformalan način. Zato je način kojim ga predstavljamo samo pomoć za predstavljanje ideja, a ne način da ideju ugušimo. Da bi sve skupa bilo čitljivije pseudokod pišemo sa komentarima koji naznačavaju i opisuju pojedine strukture.

10

Page 11: OSNOVE ALGORITMI

2. 4 VARIJABLE I OPERATORI

Podaci i instrukcije (program) nalaze u radnoj memoriji računala (RAM). Procesor izvršava instrukcije programa jednu po jednu. Na osnovu instrukcija uzima podatke iz memorije, obrađuje ih, te rezultate obrade vraća nazad u memoriju na za to predviđena mjesta i odatle ih šalje na neku od izlaznih jedinica - monitor, pisač, zvučnike...  Za programiranje je bitno shvatiti postupanje s varijablama. Ovisno od programskog jezika u kojem ćemo pisati programe, podatke koji će biti smješteni u pojedine varijable treba više ili manje detaljno opisati. Rekli smo već da se pojedini podaci smještaju u rezervirana mjesta u memoriji. Ti dijelovi memorije imaju svoju adresu i mi im u postupku programiranja dajemo imena. Radi racionalnog korištenja memorije varijable treba definirati, tj. reći računalu koji tip podataka će biti smješten u kojoj varijabli. To mogu biti cjelobrojne vrijednosti, realni brojevi, logičke vrijednosti, jedan znak ili niz znakova... Za različite operacije nad podacima koristimo različite operatore. Operatori koje ćemo koristiti malo su drugačiji od onih na koje smo navikli :

Operacija Operator

Zbrajanje +

oduzimanje -

Množenje *

Dijeljenje /

          U gornjoj tablici su dani operatori za osnovne računske operacije. U nekim programskim jezicima operatori za operacije nad realnim i nad cijelim brojevima nisu isti. Tako n pr. se za dijeljenje cijelih brojeva može koristiti operator div koji kao rezultati daje opet cijeli broj.          Pogledajmo tablicu s komentarima:

11.9394 / 2.2 = 5.427 dijeljenje dva broja operatorom za realne brojeve daje rezultat realan broj11 / 2 = 5.5

10 / 2 = 5.0

realan broj će biti i rezultat dijeljenja dva cijela broja ako upotrijebimo operator dijeljenja za realne brojeve, zato rezultat pišemo s jednim decimalnim mjestom ako nije drugačije određeno

10 div 2 = 5 ako upotrijebimo operator dijeljenja cijelih brojeva rezultat će biti cijeli broj čak i onda kada djeljenik nije djeljiv s djeliteljem11 div 2 = 5

       Kod dijeljenja cijelih brojeva pojavljuje se još jedan koristan operator. To je mod. Rezultat dijeljenja cijelih brojeva s operatorom mod daje ostatak cjelobrojnog dijeljenja. Pogledajmo primjere:

11

Page 12: OSNOVE ALGORITMI

11 mod 2 = 1 11 podijeljeno s 2 je 5 i 1 je ostatak

10 mod 3 = 1 10 podijeljeno s 3 je 3 i 1 je ostatak

8 mod 3 = 2 8 podijeljeno s 3 je 2 i 2 je ostatak

8 mod 2 = 0 8 podijeljeno s 2 je 4 i 0 je ostatak

          Zašto je operator mod koristan. Na primjer, pomoću njega možemo utvrditi da li je neki broj djeljiv s nekim drugim brojem. Ako je,  ostatak takvog dijeljenja mora biti 0. Ili npr. da li je neki broj smješten u određenoj varijabli u memoriji paran ili neparan. Paran broj dijeljen s 2 daje ostatak 0, odnosno neparan broj dijeljen s dva daje 1 ostatak.          Isto tako ponekad će trebati usporediti neke veličine. Zato koristimo relacijske operatore:

Operator Opis

> veće

< manje

= jednako

>= veće ili jednako

<= manje ili jednako

<> ili # različito

2. 5 DIJAGRAM TOKA PODATAKA - ( FLOW CHARTS )

Rekli smo već da se algoritmi najčešće zapisuju kao pseudokod i dijagram toka podataka. Dijagram toka podataka je grafički prikaz algoritma. Takav način zapisivanja ima nekoliko prednosti pred pseudokodom. Zapisivanje se vrši međunarodno dogovorenim simbolima i ne ovisi o govornom jeziku onoga koji sastavlja algoritam. Grafički prikaz je jednostavan, pregledan, lako se pronalaze greške. Nadalje, problem se može jednostavno analizirati, usporediti s nekim drugim problemom, skratiti vrijeme pronalaženja rješenja. Evo osnovnih simbola dijagrama toka:

12

Page 13: OSNOVE ALGORITMI

početak

ulaz podataka

deklaracija varijabli i konstanti; postavljanje na početnu vrijednost; obrada podataka

izlaz podataka

kraj

spojna točka, radi lakšeg praćenja tijeka podataka obično se u spojnu točku upisuju brojevi koji su veze između različitih dijelova algoritma

   Simboli za ulaz i izlaz podataka su istog oblika. Kod jednostavnih algoritama ulaz i izlaz su odmah uočljivi. Međutim, kod vrlo složenih algoritama dobro je u paralelogram koji simbolizira ulaz pri dnu povući vodoravnu crtu i ispod nje napisati riječ ulaz. Isto to je dobro učiniti i za izlaz podataka. Simboli dijagrama toka se povezuju strelicama koje pokazuju tok podataka. Ova tehnika koristi niz grafičkih simbola povezanih usmerenim linijama (strelicama)kojima se pokazuje sekvenca (niz) u kojoj će koraci opisani grafičkim simbolima bitiizvršavani. Unutar grafičkog simbola upisuje se prirodnim jezikom (ili pseudokodom) proces (operacija) koju treba izvršiti. Dijagram toka podataka predstavlja model sistema koji sadrži četiri osnovne komponente :

procese obrade podataka ( aktivne komponente sistema ) objekte okruženja ( interfejse ) sa kojim sistem komunicira skladišta podataka koje procesi koriste i / ili ažuriraju i tokove podataka koji povezuju ostale komponente sistema u cjelinu

Grafički simboli koji se najčešće koristeza prikaza algoritama dijagramom toka su slijedeći:

Pravouganik – sadrži opis procesa (naredbi) koje se izvršavaju jedna za drugom u redoslijedu kako su napisane.Nakon što se naredbe (jedna ili više) izvrše nastavlja se sa,slijedećim grafičkim simbolom koji slijedi. Dakle,pravougaonik odgovara programskoj sekvenci.

Romb – predstavlja ili ulaznu ili izlaznu naredbu kojom se podaci unose u kompjutersku

13

Page 14: OSNOVE ALGORITMI

memoriju (ulaz) ili iz kompjuterske memorije prikazuju na nekom spoljnjemuređaju (izlaz). Nakon što se naredba ulaza (izlaza) izvrši,algoritam se nastavlja naredbom iz slijedećeg simbola. Dijamant – predstavlja proces donošenja odluke.Odluka sadrži pitanje koje obično ima dva odgovora, DA ili NE, pa se nakon utvrđivanja koji od tih odgovora je tačan algoritam nastavlja jednom od dvije moguće putanje koje slijede ( izlaze ) iz ovog simbola .

Strelica – služi za povezivanje grafičkih simbola u smijeru njihovog ligički sukcesivnog izvršavanja .

Krug - koristi se za povezivanje dijelova dijagrama toka . Kada dijagram toka nemože da bude prikazan na jednoj stranici ( što je čest slučaj ) , ovaj znak se koristi za povezivanje dijelova dijagrama koji se nalaze na različitim stranicama .

Oval ( elipsa ) – se koristi za označavanje početka i kraja algoritma .Oval za start pokazuje gdje algoritam započinje i obično sadrži riječ ,, START ,, a oval za kraj pokazuje gdje se algoritam završava i obično sadrži riječ ,, KRAJ ,,

2. 6 OSNOVNE KARAKTERISTIKE DIJAGRAMA TOKA PODATAKA :

jasna grafička specifikacija , pogodna za komunikaciju sa korisnikom istovremeno jasan i detaljan opis sistema , primjenom metode apstrakcije tako da se

sistem na višim nivoima apstrakcije opisuje uopšteno , a na nižim detaljno

Pri kreiranju dijagrama toka podataka moraju se poštivati slijedeća pravila :

tok podataka se može posmatrati kao pokretna traka u fabrici , ili cijev kojom do skladišta podataka , procesa ili spoljnjeg objekta teku struktuirani podaci ( različita dokumenta ,

14

Page 15: OSNOVE ALGORITMI

formulari , tekstovi , knjige , časopisi itd. ) . Tok podataka ostvaruje vezu između ostalih komponenti sistema i na DTP – u se predstavlja imenovanim , orijentisanom linijom .

tok podataka mora da ima izvor i ponor .Za jedan tok , bilo izvor ili ponor ( bilo oba ) mora da bude proces. Tokovima se ne mogu neposredno povezati dva skladišta , dva interfejsa ili skladište i interfejs.

3.TIPOVI ALGOR. STRUKTURE DŽINIĆ MAJA

Postoje tri tipa algoritamske strukture : linijska ( sekvenca ) , razgranata ( selekcija ) i ciklična ( petlja ) .

3 . 1 LINIJSKA ALGORITAMSKA STRUKTURA

Samo u slučaju rješavanja najjednostavnijih zadataka, algoritam je pravolinijski , tj. uvijek se izvršava u istom slijedu naredbi pa se stoga naziva slijedni algoritam. Treba uočiti da se bez obzira na ulazne vrijednosti naredbe uvijek izvršavaju istim redoslijedom . .Kod linijski algoritamskih struktura moguće je samo jedno izvršavanje nekog algoritamskog koraka , tj:nakon izvršavanja jednog algoritamskog koraka izvršavanje se može prenijeti samo na algoritamski korak koji još nijednom nije izvršen .

Primjer slijednog algoritma Zadatak:Korisnik unosi dva broja, brojevi se zbrajaju pa se ispisuje dobijeni zbroj. Algoritam:početak      upiši brojeve A i B      C=A+B      ispiši zbroj CkrajDijagram toka:

15

Page 16: OSNOVE ALGORITMI

3.2 RAZGRANATA ALGORITAMSKA STRUKTURA ( GRANANJE )

Tok programa često ovisi o ulaznim podacima ili o međurezultatima obrade. Struktura kod koje se ovisno o stanju podataka odvija jedan od mogućih dijelova (grana) programa, ima naziv grananje. Često je u algoritmima potrebno odlučiti koji od dva ili više algoritamskih koraka treba izvršiti s obzirom na postavljeni uvjet .Jednostavan oblik razgranate algoritamske strukture ( selekcija ) je izbor jednog od dva algoritamska koraka , ovisno o tome da li je postavljeni uvjet istinit , kad bi se izveo prvi algoritamski korak , ili neistinit , kad bi se izveo drugi . To je poznata IF – THEN – ELSE NAREDBA u večini programskih jezika .

Simbol za grananje je romb. Obično se u gornji vrh upiše upitnik i u sredini se postavi logički uvjet.  Grananje uvijek ima jedan ulaz i najmanje dva izlaza. Ako su samo dva izlaza tada je riječ o jednostrukom grananju, a odgovori na postavljeni logički uvjet mogu biti DA i NE, odnosno T i F (true i false).

16

Page 17: OSNOVE ALGORITMI

Blok naredbi

Dijelovi programa koji se uvjetno izvode grupiraju se u blokove naredbi. Blokovi naredbi se pišu uvučeno (zbog preglednosti). Svaki se blok naredbi omeđuje parom otvorena-zatvorena vitičasta zagrada (osim slučaja kada se blok sastoji od samo jedne naredbe, tada se zagrade mogu izostaviti). Ako se varijable deklariraju unutar bloka, vidljive su samo unutar bloka u kome su deklarirane i u glavnoj funkciji ne postoje. Varijable deklarirane unutar bloka nazivaju se  lokalne i mogu zakloniti istoimene varijable prethodno deklarirane izvan bloka .

Naredba if - osnovni oblik

If je naredba koja omogućava uvjetno grananje programa. Daljnji tok programa ovisi o ispunjenju uvjeta navedenog iza ključne riječi if. Uvjet  (logički izraz) se upisuje unutar para okruglih zagrada. Na kraju naredbe if ne stavlja se znak .

Ako je vrijednost logičkog izraza istina (1), izvodi se blok naredbi koji se nalazi iza naredbe if.  Ako je vrijednost logičkog izraza neistina (0), blok se preskače i izvođenje se nastavlja od prve naredbe iza bloka.

17

Page 18: OSNOVE ALGORITMI

Naredba if – dvije neovisne grane

Ako je vrijednost logičkog izraza istina (1), izvodi se prvi blok naredbi. Po njegovom završetku izvođenje se nastavlja od prve naredbe iza drugog bloka.Ako je vrijednost logičkog izraza neistina (0), preskače se prvi blok i izvodi se drugi blok naredbi (iza else). Nakon toga se izvode naredbe kako slijede.

18

Page 19: OSNOVE ALGORITMI

- ALGORITMI GRANANJA -

Često je algoritam ovisan o međurezultatima ili ulaznim podacima pa se redoslijed izvršavanja naredbi mijenja ovisno o tim podacima.Takva se struktura algoritma naziva grananje jer se ovisno o stanju podataka odvija jedan od mogućih dijelova (grana) algoritma.

Primjer grananja Zadatak: 

Korisnik unosi cijeli broj, računa se apsolutna vrijednost tog broja pa se ispisuje rezultat.  Algoritam: početak      upiši broj A      provjeri da li je A veće od 0              ako je veće, ispiši A              ako nije veće, ispiši (A*(-1))kraj

19

Page 20: OSNOVE ALGORITMI

3. 3 PETLJE

Dio algoritma koji zahtijeva višestruko izvršavanje jednog ili više algoritamskih koraka , pri čemu može doći i do promjene zadanog načina obrade podataka zovemo ,, PETLJA ,, . To se ponavljanje vrši sve dok je neki postavljeni uvjet ispunjen ( okončava kad uvjet više nije ispunjen - kad postane neistinit ), ili sve dok je određeni uvjet neispunjen ( okončava kad je uvjet ispunjen – postao je istinit ) .

20

Page 21: OSNOVE ALGORITMI

  Za naš zbroj svih brojeva do 100 koristiti ćemo varijablu zbroj koju na početku algoritma moramo postaviti na vrijednost 0.  Za i koji ide od 1 do 100 treba učiniti slijedeće:  Varijabli zbroj dodati vrijednost varijable i koja je u našem primjeru brojač.

Svakim prolaskom kroz petlju i se povećava za 1 i njegova vrijednost pridodaje sadržaju varijable zbroj. U prvom prolazu kroz petlju zbroj je 0, a i je 1, pa prema tome zbroj postaje 1. U drugom prolazu zbroj je 1, a i je 2. Zbroj postaje 1+2, dakle sada je 3. I tako 100 puta.

21

Page 22: OSNOVE ALGORITMI

ZAKLJUČAK

Na samom kraju ovog seminarskog rad je i zaključak vezan za algoritme . Ovo je oblast koja zahtijeva jako puno vježbe . Oblast koja se ne može naučiti napamet . Shvatila sam da se moraju rješavati algoritmi počev od najjednostavnijih pa do sve složenijih .Naj interesantnije je to što ustvari svako naše objašnjenje neke situacije ili obično prepričavanje je u stvari jedna vrsta algoritma iskazana opisnim rečenicama . A ono što me najviše fasciniralo je ustvari to što više ljudi može napraviti na isti zadatak više različiti algoritama i da svi pri tome budu jednako dobri. Što znači da se do istog rezultata dolazi na različite načine . Ništa nije tako neriješivo i strašno kako se u samom početku čini vezano za rješavanje algoritama. Čak se i složeni algoritmi raščlane na manje dijelove i tako rastavljeni se mogu riješiti do detalja i prikazati kao rješenje u blokovima . Ali mnogi stručnjaci nas uvjeravaju da je ustvari bit programiranje u rješavanju algoritama i crtanju dijagrama toka . Znači sve što nam u startu treba je ustvari olovka i papir .Cilj izrade algoritama je ustvari pisanje programa . Kada je jednom algoritam gotov , pisanje programa u nekom programskom jeziku je prepisivanje simbola iz dijagrama toka u naredbe programskog jezika. Obično svaki simbol u dijagramu toka predstavlja jednu naredbu u programu. Dijagram toka bi trebao biti dio svake dobre programske dokumentacije. Svaka nauka je ustvari zasnovana na rješavanju problema preko algoritama . Čak postoje i genetski algoritmi , algoritmi se pojavljuju i u dijagnostici i liječenju . Što znači da su svugdje oko nas , kao i dijagrami a da ih možda nismo ni svjesni . Bez obzira šta sutra radili ili čime se bavili mogu nam biti od velikog značaja samo poznavanje ove oblasti .

Onaj koji isključivo cijeni praksu bez teorijskih osnova sličan je moreplovcu koji ulazi u brod bez krme i busole neznajući kuda se plovi

LEONARDO DA VINČI

             

22

Page 23: OSNOVE ALGORITMI

LITERATURA :

www. public.carnet.hr 10.4.2008.

www.wikipedia .org 9.4. 2008.

www. mfkg.kg.ac .yu 12.4. 2008.

www.datastructures .info 11.4.2008

www.cadlab.fsb.hr 14.4.2008

23