Principi Programiranja-Upravljanje Tokom Programa

  • Upload
    -

  • View
    37

  • Download
    1

Embed Size (px)

DESCRIPTION

Principi programiranja-Upravljanje tokom programaApeiron

Citation preview

Principi programiranja-Upravljanje tokom programa-Faruk Omeragi

PANEVROPSKI UNIVERZITET APEIRONFAKULTET POSLOVNE INFORMATIKERedovne studijeSmer Poslovna informatikaPredmetPRINCIPI PROGRAMIRANJAUPRAVLJANJE TOKOM PROGRAMA(seminarski rad)Predmetni nastavnikProf. dr Zoran . Avramovi, dipl.in.elek.StudentVedran Vidi, studentIndex br. 27-10/RPIBanja Luka, juli 2011.SADRAJ:

Uvod.......................................................................................................31. OSNOVE PROGRAMIRANJA......................................................52. KOMPAJLERI..................................................................................73. ALGORITMI ...................................................................................83.1. Osobine algoritama........................................................................103.2. Predstavljanje algoritama ............................................................113.3. Dijagrami toka algoritma..............................................................113.4. Primjer algoritma .........................................................................134. UPRAVLJANJE TOKOM PROGRAMA......................................134.1. Linearni redosljed instrukcija......................................................134.2. Nelinearni redosljed izvrenja......................................................164.3. Arhitekturna podrka kod uslovnih operacija............................214.4. Koritenje uslova...........................................................................224.5. Iteracija...........................................................................................27Literatura .............................................................................................31

UVOD

Poznata je injenica da su elektronski raunari zahvaljujui svojoj moi izvanredno brzog izvravanja aritmetikih i logikih operacija u mogunosti trajnog uvanja informacija u svojoj memoriji, kao i automatskom izvravanju programa nezamjenjivi u rjeavanju komplikovanog problema.

Raunar nikako ne moemo posmatrati ili porediti sa ivim biem. Zbog toga, kada govorimo o komuniciranju ovjeka sa raunarom, rije komuniciranje koristimo sa dosta ogranienja. Naime, u ovom sluaju komuniciranjem se smatra mogunost zadavanja niza instrukcija raunaru da bi rjeio odreeni problem, koji je za ovjeka dugaak i sloen, ali ne i za raunar.

Komunikacija izmeu ovjeka i raunara nije ni priblino tako jednostavna kao komunikacija izmeu ljudi. Ljudi mogu da interpretiraju ono to im je neko drugi rekao, a ak ni najvei raunari to ne mogu. Raunar moe da uradi samo i tano ono to mu je zadano, ni manje ni vie. On nije sposoban da razmilja, da interpretira neije zahtjeve i shvata na svoj nain. Raunar ne moe, u okviru nekog zadatka, da uradi odreenu akciju koja je neophodna, ali su zaboravili da mu je narede. Moe se rei da je on pouzdan onoliko koliko i ljudi koji mu zadaju problem u obliku niza instrukcija. Takoe, raunar razumije problem onoliko koliko mu je ovjek objasnio, i to ne samo problem nego i nain njegovog rjeavanja.

Voditi rauna o svim detaljima, biti precizan u definisanju svakog koraka i rjeavanju problema nije tako jednostavno. Zato se pisanje programa, koji se sastoji iz niza instrukcija, ne odvija u jednom koraku. Programiranje, kako se jo naziva ovaj proces, je samo konana faza u rjeavanju problema pomou raunara, a ne i jedina. Jedan problem, im je sloeniji, teko je direktno prevesti u program. Uostalom, to nam je poznato i iz drugih oblasti. Nijedan arhitekta nee graditi kuu odmah, bez razmiljanja i bez plana. Nijedan elektroinenjer nee pokuati da konstruie jedan televizor bez prethodne realizacije detaljnih ema spajanja. Previe je tu malih ali vanih zadataka o kojima treba voditi rauna i koji mogu izazvati greke u konanom rjeenju.

Upravljanje tokom programaPod terminom upravljanje tokom programa podrazumjevamo mehanizme koji odreuju kojim tokom e se nastaviti izvravanje programa. Dvije bitne konstrukcije iz jezika C za upravljanje tokom programa su if else i switch-case konstrukcije.

If-else konstrukcijaif else je standardna konstrukcija za upravljanje tokom programa u jeziku C. Svodi se na odluivanje izbora izmeu dva mogua toka programa. Sintaksa ove konstrukcije glasi: ako je navedeni uslov zadovoljen izvri blok koda koji je iza IF, a ako uslov nije zadovoljen izvrie se blok koda koji je iza ELSE. Ako je vrijednost promjenljive result vea od ili jednaka posmatranom broju ispisae se tekst PASS, a ako nije ispisae se tekst FAIL.

If konstrukcijaIF moe da se koristi i samo, odnosno bez kljune rei ELSE. Takoe, uz if - else konstrukciju moe da se koristi i vie linija koda koje se zatvaraju velikim zagradama.

Viestruki if-elseViestruka IF ELSE konstrukcija predstavlja mogunost odluivanja izbora za vie od dva mogua toka grananja.

Switch-case konstrukcijaJedan druga, mnogo elegantnija konstrukcija za izbor jedne od vie mogunosti predstavlja svi kejs konstrukcija. Ona nam nudi mogunost odreivanja jednog od vie moguih tokova izvravanja programa. Svodi se na testiranje jedne promjenljive koja mora biti tipa int, short, char, long. Vai pravilo da jedna vrijednost odreuje jedno grananje, to jest jedan tok izvravanja. Vano je zapamtiti, da za pravilno izvravanje programa, moramo predvidjeti i tok izvravanja za sluaj nepoeljnih vrijednosti, u prevodu, vrijednosti koje nisu obuhvaene skupom navedenim unutar svi konstrukcije.

1. OSNOVE PROGRAMIRANJAZa ovjeka bi bilo najpogodnije kada bi nain komuniciranja sa raunarom bio slian prirodnoj komunikaciji meu ljudima. Drugim rijeima, meu programske jezike bismo onda mogli da ubrojimo i prirodne jezike. Na alost, to nije tako. Poznato nam je da konstrukcija modernih raunara omoguava smiljeno reagovanje raunara samo na odreeni tip impulsa, to su binarni elektrini signali koje nazivamo mainski jezik. Taj jezik je vrlo razliit od naih prirodnih jezika. Da bi se ove razlike premostile, postoje dvije krajnje mogunosti. Prva je da ovjek razumije mainski jezik, a druga da raunar razumije ovjekov prirodni jezik. Zbog tekoa koje se javljaju u sporazumijevanju, u praksi biramo srednji put. Uvodimo programske jezike koji su ovjeku blii od mainskog jezika, jer ih lake razumije, a istovremeno su blii mainskom jeziku od prirodnih jezika.Raunar ne moe da funkcionie bez programa-softvera, ali i ovjek ne moe bez pomoi raunara pri rjeavanju sloenijih problema. Pod pojmom program, definie se niz naredbi pisanih u odreenom programskom jeziku, koji posjeduje tano definisan redoslijed izvravanja u raunaru. Proces pisanja programa u nekom od programskih jezika u cilju rjeavanja odreenog problema nazivamo programiranje, a programeri su osobe koje vre programiranje.

Kod rjeavanja problema prolazi se kroz sljedea tri koraka: analiza problema, razrada algoritma i njegovo pretvaranje u eljeni programski jezik, prenoenje programa u raunar i putanje u rad.

Analiza je prvi i jedan od najkritinijih koraka u rjeavanju problema. Cilj analize je da prui preciznu definiciju i opis problema, specifikaciju ulaznih podataka, kakvi se rezultati oekuju, kao i postupak da se do takvih rezultata doe. Za izvjesne probleme ovaj korak je prilino jednostavan, dok za druge on moe da predstavlja veoma teak zadatak. Moe se generalno zakljuiti, da problemi koji se mogu jednostavno izraziti matematikim jezikom mogu i precizno definisati i opisati u smislu njihovog rjeavanja na raunaru, dok to nije tano za klasu nematematikih problema. Mada za korak analize problema nepostoji nikakav standard i formalizovan postupak pogodan za iroku klasu problema, ipak se on u najirem smislu moe realizovati postupcima takozvane sistem-analize problema ili takozvanim sistemskim postupkom koji ukljuuje: uoavanje problema, formulisanje ciljeva rjeavanja, definisanje sistema, analizu, projektovanje novog sistema.

Suvino je naglaavati znaaj koraka analize problema za njegovo uspjeno rjeavanje. I najbriljantniji algoritam za rjeavanje problema e dati loe rezultate ukoliko je problem pogreno definisan, odnosno njegova analiza loe uraena.U analizi problema pri rjeavanju problema primjenom raunara veoma je bitno definisati ulazne podatke problema kao i izlaze koji se figuriu u problemu, bitno je definisati njihovu logiku strukturu koja odreuje relacije koje postoje u datom skupu podataka. Ove relacije mogu da postoje shodno vrsti i prirodi problema, a mogu se pogodno i uvoditi. Strukture podataka mogu biti razliite, poev od pojedinanih podataka, jedno i viedimenzionalnih sekvencijalnih struktura, takozvanih povezanih lista podataka, hijerarhijske strukture tipa stabala, odnosno orijentisanog grafa. Logika struktura podataka definie i njihovu fiziku strukturu, odnosno nain smjetanja u memoriju raunara. Na taj nain definisanja struktura ulaznih, a i izlaznih podataka, odreuje u izvjesnom stepenu i algoritam obrade podataka.Algoritam predstavlja niz uputstava koje tano odreuju redoslijed operacija koje e dovesti do rjeenja za ma koji problem datog tipa.

Sljedeih nekoliko osobina su karakteristine za algoritme: Broj operacija koje se moraju izvriti za rjeenje konkretnog problema nije poznat unaprijed. Procedura koja je odreena algoritmom je deterministiki proces koji se moe ponavljati bilo kad i od strane bilo kog, ona mora biti data u obliku konanog broja instrukcija koje definiu tano odreene operacije koje se izvravaju u svakoj fazi procedure. Instrukcije koje ine algoritam definiu proceduru koja se moe izvriti na odgovarajuem skupu podataka i koja u svakom sluaju dovodi do konkretnog rezultata.

Drugim rijeima, algoritam definie postupak rjeavanja ne samo jednog konkretnog problema, ve itave klase problema datog tipa.Kritinu fazu u realizaciji algoritma na raunaru je proces otkrivanja formalnih greaka i testiranje programa. Testiranje programa obuhvata provjeru ispravnosti programa, a i algoritma koristei standardne podatke da bi se ustanovilo da li se dobijeni rezultati slau sa rezultatima dobivenim nekim drugim postupkom ili da li su u saglasnosti sa teorijskim i drugim analizama problema. Programi se obino testiraju za vie raznih skupova standardnih ulaznih podataka koji se mogu smatrati karakteristinim za dati problem.U programima se u sutini pojavljuju tri vrste greaka. Prvo, razlikujemo greke koje potiu iz prvog koraka rjeevanja problema. Naime, problem moe biti loe definisan ili analiziran u kom sluaju je potrebno ponoviti ovaj, a samim tim i sljedea dva koraka rjeavanja problema. Drugo, razvijeni algoritam za rjeavanje problema moe da sadri logike greke koje se prenose u program. Tree, u samom postupku programiranja mogu se pojaviti greke usljed loeg prevoenja na programski jezik ili zbog povrede sintaksnih pravila pisanja u datom programskom jeziku. Moe se zakljuiti da bez obzira koji od navedena tri izvora greaka je u pitanju, postupak rjeavanja problema je interaktivan u smislu da se jedan ili vie koraka rjeavanja problema ponavlja sve dok se ne doe do zadovoljavajueg rezultata.Prva programiranja su vrena u mainskom jeziku koji je razumljiv raunaru i bez prevoenja, dok se danas takvim programiranjima bave samo inenjeri-projektanti raunara. Kasnije je binarni kod zamijenjen simbolima, a ta grupa niih programskih jezika se nazivaju simboliki jezici ili asembleri. Jedan od nedostataka niih programskih jezika je nemogunost njihovog izvravanja na razliitim raunarima. Programski jezik je sredstvo pomou kojeg programer kreira softver, sistemski ili aplikativni. Programski jezici omuavaju programerima, a i iskusnijim korisnicima, da kau raunaru ta da uradii. Svi programski jezici, kao to su npr. BASIC,COBOL, FORTRAN, PASCAL, C, C++, itd. zasnivaju se na skupu pravila koji definiu sintaksu i semantiku konkretnog jezika. Rangiraju se na programske jezike niskog nivoa i programske jezike visokog nivoa.U mainskom jeziku raunari predstavljaju i obrauju podatke i instrukcije u formi binarnih cifara nula i jedinica. Programski jezik koji koristi ove kodove najnieg nivoa zove se mainski jezik i predstavlja prvu generaciju programskih jezika. Zbog svog niskog nivoa, mainski jezik je izuzetno teak za razumijevanje i koritenje. Upravo zato, razvijeni su novi, korisniki orijentisani programski jezici, koji su mnogo jednostavniji za koritenje, ali da bi raunar izvrio takve programe, oni se moraju prethodno prevesti na mainski jezik. U tu svrhu se koriste specijalni programi prevodioci koji program napisan u viem programskom jeziku prevode u mainski jezik, koji je jedini razumljiv raunaru.Asemblerski jezik predstavlja simboliko predstavljanje mainskog jezika, on je takoe jezik niskog nivoa, ali ipak malo vie korisniki orijentisan. Programer mora pisati instrukcije koje se odnose na specifine hardverske elemente kao to su: procesor, registri, RAM lokacije itd.. Asemblerski jezici se inae oznaavaju drugom generacijom raunarskih jezika. Danas se asemblersko programiranje koristi samo u sluajevima kada je neophodna striktna i direktna kontrola nad operacijama procesora, npr., u kreiranju komponenata sistemskog softvera kao to su operativni sistemi, kompajleri, drajveri itd.

2. KOMPAJLERI

Kompajleri, kopilatori ili programski prevodioci su programski sistemi koji obezbjeuju provoenje sa izvornog, mainski nezavisnog jezika na mainski jezik bez istovremenog izvravanja mainskih instrukcija.

U procesu kompilacije rjeavaju se sljedei problemi:1. prepoznavanje strukture programa na ulaznom jeziku i po potrebi formiranja programa na meujeziku,2. analiza strukture izvornog programa, 3. obradu simbolikih naziva,4. raspodjelu operativne memorije izmeu programa i podataka,5. auriranje (editovanje) programa i generisanje potrebne dokumentacije o programu za potrebe korisnika.Kompajleri se dijele na jednoprolazne i vieprolazne. U optem sluaju jednoprolazni kompajleri obuhvataju blok leksike analize, blok analize strukture podataka i blok generisanja objektivnog programa.Kod vieprolaznih kompajlera primjenjuje se uzastopan niz jednostavnijih transformacija na izvorni program u cjelini. Vieprolazni sistem se moe posmatrati kao skup kompajlera koji provode sa jednog jezika na drugi. Kod vieprolaznih sistema prikuplja se znatno vie informacija o izvornom jeziku nego kod jednoprolaznih sistema. Ove informacije se koriste za dobijanje efikasnijih mainskih programa za isti izvorni program. Savremeni kompajleri posjeduju i dodatni prolaz u cilju optimizacije objektnog programa. Optimizacija predstavlja proces primjene razliitih postupaka u cilju dobijanja boljeg objektnog programa. Pod ovim pojmom bolji najee se podrazumijeva dobijanje takvih objektnih programa koji se bre izvravaju ili pak zahtijevaju manji memorijski prostor. esto se uvodi i pojam mjere optimalnosti koji predstavlja odnos broja mainskih instrukcija koje generie kompajler i minimalno potrebnog broja mainskih instrukcija da bi se program izvrio.Svi kompajleri datog raunarskog sistema podreeni su operativnom sistemu raunarskog sistema i moraju zadovoljiti odreene uslove u smislu da se specifinosti izvornog programa poslije provoenja na objektne programe gube.Dobijeni objektni programi po pravilu nisu izvrni programi. Objektni program moe da se sastoji od vie modula od kojih je svaki pisan na razliitom izvornom jeziku. Objedinjavanje objektnih modula u cjelinu pomou programa za povezivanje vri se nezavisno od toga na kom izvornom jeziku je modul pisan. Tek poslije povezivanja objektnih modula u jedinstven objektni program moe se pristupiti punjenju objektnog programa u operativnu memoriju. Ovu funkciju vri program za punjenje. Tipini kompajlerski jezici su FORTRAN, ALGOL, COBOL, PASKAL, itd.

3. ALGORITMI

Algoritam je opis za rjeavanje nekog problema. Rije se koristi jo od srednjeg vijeka i tada je oznaavala neto sasvim drugo. Izvorno, algoritam je izraz koji opisuje nain raunanja decimalnim brojevima uvedenim oko 1600. godine u Evropi. Algoritmiari su se ranije zvali oni matematiari koji ne operiu simbolima mnoina predstavljenim na abakusu, nego jednim (indijskim ili arapskim) sistemom znakova za brojeve.U novije vrijeme, algoritam je pojam koji se gotovo iskljuivo vezuje za informatiku i, mada ne postoji jedinstvena opte prihvaena definicija, podrazumijeva se da je u pitanju nekako opisana procedura za obavljanje posla. U tu svrhu se definiu algoritamski jezici. To su formalizovani jezici kojima se relativno lako opisuju postupci rjeavanja problema predstavljenih algoritmom, takvi su naprimjer programski jezici Algol, Fortran i Kobol.Algoritam je u matematiku uveo arapski matematiar Muhamed Al Horezmi. Napisao je knjigu Al Horezmi o indijskoj vjetini raunanja gdje u arapsku matematiku uvodi indijske cifre i decimalni brojni sistem. Ova knjiga biva kasnije prevedena na latinski kao Algoritmi de numero indorum. Od loeg latinskog prevoda njegovog prezimena i potie rije algoritam, i dugo je oznaavala postupak za raun sa decimalnim brojnim sistemom.Algoritam je konana i precizno definisana procedura, niz dobro definisanih pravila, kojom se ulazne vrijednosti transformiu u izlazne, ili se opisuje izvravanje nekog postupka.Algoritam je kljuni pojam u raunarskoj obradi podataka jer je raunarski program izvjestan algoritam koji raunaru objanjava koje korake i kojim redoslijedom treba da obavlja. Kada se uz algoritam vezuje pojam obrade podataka, podrazumijeva se da se podatak prvo uita preko ulazne jedinice a ispisuje se na izlaznu jedinicu ili uva za kasniju upotrebu. Sauvani podaci se smatraju dijelom unutranjeg stanja sistema. Za svaki raunarski posao algoritam mora biti jasno definisan, naveden na nain koji podrazumijeva sve mogue situacije koje se mogu pojaviti. Znai, svaki uslovni korak se mora sistematino obraditi, sluaj po sluaj, uslov za svaki sluaj mora biti jasan i izraunljiv.Poto je algoritam jasan niz preciznih koraka, redoslijed izraunavanja je uvijek kritian za funkcionisanje algoritma. Pretpostavlja se da su instrukcije navedene jasno, da poinju 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 najuobiajeniji koncept u programiranju i opisuje postupke na mehaniki nain. Jedinstveno za ovaj koncept je operacija dodjeljivanja, to je davanje vrijednosti promjenljivoj. Ovo proizilazi iz intuitivnog poimanja memorije kao privremenog skladitenja, odnosno pamenja. Algoritmi se realizuju u obliku raunarskih programa, ali mogu i na drugi nain. Sem elektrinih kola i sprava koje obavljaju neke radnje isto tako postoje i bioloke neuralne mree kakva je, na primjer, mozak ovjeka koji je nauio matematike operacije ili insekta koji premjeta hranu. Analiza i prouavanje algoritama je jedna oblast raunarstva i esto se obavlja apstraktno bez upotrebe konkretnog programskog jezika. Nalik slinim matematikim disciplinama ovdje se izuavaju zakonitosti i principi algoritama a ne konkretne implementacije. Neki autori ograniavaju definiciju algoritma na procedure koje se konano zavravaju. Drugi ukljuuju i procedure koje se izvavaju zauvijek bez zaustavljanja, obrazlaui to potrebom da se neke vrste poslova obavljaju u kontinuitetu. Postoji vie naina za razvrstavanje algoritama. Jedan nain razvrstavanja je po metodologiji projektovanja ili primjenjenom obrascu. Postoji nekoliko razliitih obrazaca kako se pristupa realizaciji algoritma. Neki uobiajeno koriteni obrasci su: Podjeli pa vladaj algoritmi smanjuju stepen sloenosti problema podjelom na dva ili vie manjih problema od iste vrste, dok od problema ne ostane toliko mali dio da se moe jednostavno rjeiti. Dinamiko programiranje kada problem pokazuje optimalnu podstrukturu, u smislu da se optimalno rjeenje problema moe konstruisati iz optimalnog rjeenja podproblema, i preklapanjem podproblema, to znai da se isti podproblem koristi za rjeavanje vie razliitih primjera problema, moemo rjeiti brzo koristei dinamiko programiranje, pristup koji izbjegava ponovo izraunavanje rjeenja koja su ve izraunata. Pohlepni algoritam algoritam lakomosti je slian dinamikom programiranju, ali je razlika u tome to rjeenja podproblema ne moraju biti poznata u svakom trenutku. Stoga, pri traenju rjeenja je mogue napraviti izbor onoga to izgleda najbolje u tom trenutku. Linearno programiranje problem se rjeava koritenjem linearnog programiranja kada postoji vie linearnih nejednaina a zadatak je nai maksimum po nekom kriterijumu. Pretraga i numeracija mnogi problemi mogu biti modelovani kao problemi grafa. Algoritam pretraivanja grafa daje pravila kretanja kroz graf i koristan je ba za ovakve probleme. Ova kategorija obuhvata i algoritme pretraivanja i povratka kroz stablo odluivanja. Heuristiki algoritmi i algoritmi sluajnosti ne odgovaraju u potpunosti strogoj definiciji algoritma:1. Algoritmi sluajnosti prave u nekim situacijama sluajan izbor, za neke probleme se stvarno moe dokazati da se do najbreg rjeenja moe doi samo uvoenjem izvjesnog stepena sluajnosti.2. Genetiki algoritam pokuava da nae rjeenje problema imitirajui bioloku evoluciju, koji u nizu sluajnih mutacija daje uzastopne generacije rjeenja. Tako raunar simulira razmnoavanje i preivljavanje najprilagoenijih. U genetikom programiranju je ovaj pristup proiren na algoritme, smatrajui i algoritme rjeenjem problema.3. Heuristiki algoritmi su takvi algoritmi ija je osnovna namjena nalaenja optimalnog rjeenja, u stvari priblinog rjeenja, jer vrijeme ili memorijski prostor za izvravanje algoritma za nalaenje tanog najboljeg rjeenja nije praktino mogue. Primjer algoritama koji su ovakvog tipa su za lokalno pretraivanje, tabu pretraivanje ili algoritam simuliranog otputanja. Naziv simulacija otputanja aludira na metalurki proces suprotan kaljenju kada se metal grije pa sporo hladi radi otklanjanja defekta u materijalu. Namjera sluajnog variranja je traenje to blieg rjeenja optem optimalnom rjeenju, a ne jednostavno lokalno rjeenje. Ideja je da se amplituda sluajne veliine smanjuje kako se pribliavamo rjeenju.Drugi nain razvrstavanja je po implementaciji. Rekurzivni algoritam koji poziva sam sebe uzastopno dok se neki uslov ne ispuni, to je metoda primjenjena kod funkcionalnog programiranja. Algoritmi se obino razmatraju uz pretpostavku da u jednom trenutku izvravaju jednu instrukciju jednog algoritma. Takvi raunari se ponekad zovu serijski raunari. Algoritam osmiljen za takvo okruenje se zove serijski algoritam, nasuprot paralelnim algoritmima, koji koriste prednosti raunarske arhitekture kod koje vie procesora u istom trenu rjeava isti problem. Razni heuristiki algoritmi bi spali u ovakvu kategoriju, dok bi njihov naziv u stvari opisivao nain implementacije.Algoritam koji ispituje da li u beskonanom nizu sluajnih binarnih cifara ima vie jedinica ili nula mora raditi zauvijek da bi posao obavio do kraja. Ako je implementiran ispravno algoritam ipak daje korisne rezultate: dok god ispituje niz cifara daje pozitivan odziv dok je vie nula nego jedinica, a negativan odziv u drugom sluaju. Uspjeh ovih algoritma bi konano bio definisan kao davanje pozitivnog odziva ako je broj nula vei u nizu, a u drugim situacijama negativnog odziva.

3.1. Osobine algoritmaNeke vane osobine algoritma su: Konanost - Algoritam se mora okonati poslije konanog broja koraka. Postupak koji ima sve karakteristike algoritma izuzev konanosti naziva se raunarski metod. Definisanost Svaki korak algoritma mora biti precizno definisan: operacije koje treba da se izvedu, moraju biti rigorozno specificirane i bez ikakvih dvosmislenosti. Ulaz Za izvoenje proizvoljnog algoritma moe biti potrebno vie ali isto tako ni jedan ulazni podatak. Ulazni podaci su veliine iz datog skupa i predstavljaju poetne vrijednosti za poetak izvoenja algoritma. Izlaz - Algoritam posjeduje jednu ili vie izlaznih veliina, tj. veliine koje se dobiju po zavretku algoritma i stoje u odreenoj vezi definisanoj samim algoritmom sa ulaznim podacima. Efikasnost jedan kriterijum efikasnosti je potrebno vrijeme, da se algoritam okona. Ostali kriterijumi su prilagoenost algoritma za realizaciju na raunaru, njegova jednostavnost, elegancija i dr. Rezultativnost Za svaki mogui skup ulaznih veliina u algoritmu mora biti definisano to treba smatrati rezultatom, odnosno izlaznom veliinom algoritma. Determinisanost Skup izlaznih veliina izraunatih u ma kom algoritamskom koraku, jednoznano je odreen na osnovu ulaznih veliina u dotinom algoritamskom koraku. Elementarnost zakon dobijanja izlaznih veliina, na osnovu ulaznih veliina algoritamskog koraka mora biti prost i jasan.

3.2. Predstavljanje algoritamaAlgoritam se moe predstaviti govorom, tabelarno i dijagramom toka. Zbog nepostojanja jednog jezika razumljivog za sve narode, predstavljanje algoritma govorom je nepodesan nain, dok tabelarno predstavljanje algoritma pomou tablica odluka ne omoguava preglednost.Tehnike predstavljanja algoritma mogu se podijeliti na: prirodne jezike, blok dijagrame algoritma, meta jezike, programske jezike.Upotreba prirodnih jezika za opis algoritama koristi se prvenstveno za runu realizaciju algoritma tj. bez upotrebe raunara. Dijagram toka je jedan od standardnih grafikih naina zapisivanja algoritma. Dijagram toka se sastoji od simbola koji su povezani usmjerenim linijama, ime se istie preglednost i nedvosmislenost redoslijeda izvravanja pojedinih algoritamskih koraka. Meta jezici su negdje na sredini izmeu prirodnih jezika i programskih jezika. Predstavljanje algoritama na programskim jezicima ustvari predstavlja programiranje raunarskih sistema, to predstavlja posebnu disciplinu u raunarstvu.

3.3. Dijagrami toka algoritmaDijagrami toka su grafika predstava algoritama koji ima za cilj njihovu specifikaciju pomou skupa grafikih simbola koji oznaavaju pojedine operacije u algoritmu i skupa pravila za povezivanje grafikih simbola, u cjelini koja predstavlja algoritam.Koritenje blok dijagrama u cjelini predstavljanja algoritma ima sljedee prednosti: Olakano praenje logikog toka odvijanja algoritma. Sloene algoritme je mogue dekomponovati na module koji se povezuju i ine hijerarhijsku strukturu algoritma. Zbog grafike prirode simbola koji ine dijagram olakana je komunikacija sa korisnicima algoritma. Blok dijagrami omoguavaju predstavu algoritma koja je nezavisna u odnosu na raunar ili programski jezik koji e se koristiti za rjeavanje algoritama. Koritenje blok dijagrama za predstavu algoritama omoguava da vei broj lica istovremeno radi na razvoju dijelova jednog sloenog algoritma, odnosno da vei broj programera programira nezavisno pojedine dijelove algoritma.

U praksi koritenja blok dijagrama za predstavljanje algoritama u upotrebi je vei broj razliitih grafikih simbola za specifikaciju pojedinih algoritamskih koraka. Oni svojim oblikom ukazuju na prirodu pojedinih algoritamskih koraka. Jezik grafikih simbola za predstavljanje algoritama u svijetu nije unificiran, ve postoje nacionalni standardi.

Simboli dijagrama toka

Poetak / krajOvaj simbol se koristi za poetak i kraj algoritma.

Ulaz / izlazOvaj simbol predstavlja funkciju ulaza ili izlaza, npr.: stavljanje na raspolaganje informacije za obradu (ulaz), ili registrovanje obraene informacije (izlaz).

Obrada Ovaj simbol predstavlja sve vrste funkcija obrade u algoritmu

Odluka Ovaj simbol predstavlja operaciju odluke ili operaciju ukljuivanja ili iskljuivanja koja odreuje put koji treba slijediti izmeu vie moguih puteva. Specijalni sluaj odluke je programirani prekida.

Mjesto prelazaOvaj simbol predstavlja izlaz ili ulaz u jedan drugi dio dijagrama. Prelaz moe biti sa vie mjesta, ali moe uslijediti samo ka jednom mjestu. Pripadajua prelazna mjesta moraju nositi istu oznaku.

PotprogramOvaj simbol predstavlja obradu, sastavljenu iz jedne ili vie operacija ili programskih stepenica, koja je definisana kao program. Moe postojati vie ulaza i izlaza.

Linije tokaOvaj simbol predstavlja funkciju koja se sastoji u meusobnom povezivanju simbola. Radi bolje jasnoe toka programa na svaki sljedei simbol usmjerava se vrh strelice, naroito pri odstupanjima od prvenstvenih smjerova.

3.4. Primjer algoritama i njegovo predstavljanje u programskom jeziku QBASIC

Linijska struktura algoritma i QBASIC program rjeavanja izraza: A=x2 +y i B=x-2*y.

ALGORITAM

REM IZRAZICLSINPUT UNESI VRIJEDNOSTI X,Y; X,YA=X^2+YB=X-2*YPRINT X^2+Y=; APRINT X-2*Y=; BEND

4. UPRAVLJANJE TOKOM PROGRAMA

4.1. Linearni redosljed instrukcija

Program se sastoji od iskaza, koji se standardno izvravaju u linearnom redosljedu. Svaki iskaz se obino prevodi u jednu ili vei broj sukcesivnih mainskih instrukcija, to ukazuje da postoji direktni odnos izmeu lokacije pojedine instrukcije i one koja slijedi poslje nje.Po analogiji sa HLL iskazima programskog jezika visokog nivoa (engl. high-level programming language), i raunarske instrukcije su u optem sluaju funkcionalno nezavisne. To znai da se svaka instrukcija moe posmatrati kao izdvojena sintaktika i semantika cjelina, razliita od one koja joj prethodi, i one koja slijedi.

Na slici 4.1 je prikazan pregled arhitektura u odnosu na funkcionalnu i lokacionu zavisnost instrukcija.

Sl. 4.1. Funkcionalna i lokaciona zavisnost instrukcija

4.1.1. Funkcionalna nezavisnost

U optem sluaju svaka instrukcija kod raunara je nezavisna sintaktika i semantika cjelina. Pri ovome dvije osobine pojednostavljaju implementaciju. Naime, imajui u vidu da postoji N razliitih instrukcija (za datu arhitekturu) ukupno razlikujemo N*(N-1) parova instrukcija, N*(N-1)*(N-2) tripleta instrukcija, itd. Ako se imaju u vidu ponavljanja, tada dobijamo N2 i N3 kombinacija, respektivno. Kod nekih arhitektura postoje zavisne instrukcije, ali je broj zavisnih instrukcija ogranien - na primjer, na parove ili triplete. Da bi ukazali na ove tipove instrukcija, analiziraemo dvije instrukcije koje posjeduju funkcionalnu zavisnost od strane drugih instrukcija: to su instrukcije REPEAT (ponovi) i EXECUTION (izvrenje).

Funkcija REPEAT instrukcije je da ukae da jedan ili vei broj uzastopnih instrukcija mora da se ponovi specificirani broj puta. Instrukcija REPEAT specificira broj ponavljanja uzimajui u obzir i specijalni uslov zavretka.EXECUTION instrukcija specificira izvrenje druge instrukcije koja je locirana na adresi specificiranoj operandom instrukcije EXECUTION. Tipian primjer je instrukcija CALLSUB.

Problem kod funkcionalne zavisnosti instrukcija je u tome to se svaka instrukcija ne moe prihvatiti kao druga instrukcija para instrukcija. Na primjer, ponavljanje REPEAT instrukcije se ne moe prihvatiti jer se sa brojem koji ukazuje na uslov zavretka mora manipulisati kako sa REPEAT instrukcijom internom hardveru (neophodno je ugraditi dodatni hardver) tako i sa statusom maine koji mora biti obiman (po sadraju).Drugi razlog zato druga instrukcija u paru nije prihvatljiva ogleda se u tome to; koja e biti naredna instrukcija esto puta nema smisla rezonovati. Na primjer, razmatrajmo ponavljanje instrukcija JUMP (skoi) ili HALT (direktiva da se zaustavi izvrenje zadatka). Drugim rijeima, potrebna je ugradnja hardvera koji e detektovati i signalizirati ovaj nevaei par.Ova objanjenja su osnovni razlog zato se REPEAT i EXECUTION instrukcije ne sreu kod velikog broja arhitektura. Instrukcije REPEAT i EXECUTE obino formiraju metainstrukcije.

4.1.2. Lokaciona zavisnost

Lokacija naredne instrukcije zavisi od tekue instrukcije na dva naina:

(1)Ulanavanje - ovo znai da svaka instrukcija specificira lokaciju naredne. Ovaj nain je bio koriten kod nekih starih raunara koji su koristili bubanj kao proirenje glavne memorije veoma malog kapaciteta, sa ciljem da se dobije optimalno preklapanje izmeu izvrenja tekue instrukcije i lokacije na bubnju koja je ukazivala na narednu instrukciju. Kod ovakvog sluaja, naredna instrukcija se moglaitati u trenutku kada je tekua instrukcija zavrila sa izvrenjem. Ulanavanje se takoe koristi kod mikroprogramiranja, posebno kod instrukcija i dekodiranja operanada, jer se kodovi instrukcija i adresni naini rada koriste za aktiviranje razliitih mikrorutina. Drugi, manje vaan, razlog koritenja ulanavanja je popunjenje praznina (gapova) koje su uslovljene neiskorienim (rezervnim) opkodovima ili adresnim nainima rada. Ovi "gapovi" mogu takoe biti uslovljeni odreenim kombinacijama koje se ne mogu javiti. Na primjer, kod viestrukog grananja (rezultat je aritmetikog poreenja), od ukupno osam tipova grananja koristi se samo est kombinacija (, ). Kada je lokacija naredne instrukcije specificirana u okviru mikroinstrukcije, lokacije kombinacija koje se ne koriste, gapovi, se takoe mogu koristiti.

(2)Sekvenciranje - Ovo znai da naredna instrukcija koja treba da se izvri ima implicitnu adresu o narednoj memorijskoj lokaciji. Ovim se eliminie potreba za specifikacijom lokacije naredne instrukcije. ta vie, vano je da se kod brze implementacije lokacija naredne instrukcije moe unaprijed predvidjeti (bez znanja tekue instrukcije) tako da se naredna instrukcija moe unaprijed pribaviti (engl. prefetch). Ali pri tome dolazi do promjene programske sekvence koja se javlja kada se izvravaju instrukcije tipa BRANCH/JUMP ime se naruava sekvencijalni redosljed izvrenja. Odreivanje lokacije na osnovu lananja se u optem sluaju ne primjenjuje na konvencionalnom mainskom nivou, jer zahtjeva dodatni operand. Sekvencijalni metod je stoga poeljniji, i pored toga to zahtjeva da se arhitektura proiri sa BRANCH/JUMP instrukcijama. Primjer sekvencijalne lokacione zavisnosti je instrukcija zakanjeno grananje (engl. delayed branch). To je (uslovna) BRANCH instrukcija kod koje se grananje obavlja nakon izvrenja naredne sekvencijalne instrukcije. Razlog ovome je da je, u optem sluaju, naredna instrukcija ve spremna za izvrenje, tako da je sa te take gledita bolje da se ta instrukcija takoe zavri. Ovo rezultira poboljanju performansi jer se inae diskontinuitet kod jedinice koja vri pribavljanje instrukcija naruava zbog instrukcije grananja. Instrukcija "delayed BRANCH", uprkos svojoj pogodnosti, se ne koristi tako esto zbog dodatne sloenosti kod izvoenja kompilatora (potrebna je dodatnu instrukciju alocirati i pozicionirati poslije BRANCH). Najvei broj RISC (engl. Reduced Instruction Set Computer ili tip procesora sa smanjenim skupom naredbi) arhitektura koristi ovu tehniku.

Sl. 4.2. Procesor HP PA-RISC 7300LC4.2. Nelinearni redosljed izvrenja

Kod programiranja, redosljed instrukcija nije uvjek linearan. Kod najveeg broja sluajeva, moraju se donjeti odluke na osnovu kojih se ukazuje koji e se put u programu, u daljem toku, izvriti. Za izbor jednog od moguih puteva koriste se uslovne operacije.

4.2.1. Operacije

Donoenje odluka u programu se obino izvodi promjenom programskog toka koji se zasniva na nekom prethodno generisanom rezultatu. Ovo ukazuje da postoji potreba za instrukcijama pomou kojih se moe mijenjati linearni redosljed izvrenja instrukcija na uslovni nain, a ponekad i na bezuslovni. Ovim instrukcijama se obezbjeuje eljena fleksibilnost i generalnost programskih jezika i skupova naredbi. Neki primjeri iz HLL-a, kao to je Pascal, su: if ... then ... else, case i goto iskazi. Ove konstrukcije programskog jezika zahtjevaju podrku od strane arhitekture raunara. Ovu podrku ini vei broj testova i jedna ili vei broj operacija (JUMP ili BRANCH) koje se zasnivaju na rezultatima ovih testova. U ovom sluaju, test se moe smatrati evaluacijom (procjenom) podataka sa ciljem da se on preslika na skup uzajamno iskljuivih kriterijuma odluivanja. Obino su to uslovni kodovi (markeri). Shodno tome, test je preslikavanje ulaznog domena, koga ine sve mogue ulazne vrijednosti, na izlazni domen koga ini vrijednost za svaku klasu ulaznih vrijednosti. Odluke se najee zasnivaju na poreenju brojeva (vrijednosti). Najjednostavniji sluajevi su poreenja vrijednosti sa nulom ili poreenje dvije vrijednosti. Izazovniji sluaj je onaj kada treba odrediti da li se vrijednost nalazi unutar opsega vrijednosti.

Poreenje dvije vrijednosti

Veoma esto se obavlja poreenje dvije vrijednosti. U principu, poreenje ini uporeenje dvije operandske vrijednosti koje se ne mijenjaju u toku procesa poreenja. Rezultat je jedan od slijedea tri uslova: . esto, korisnik eli da raspolae i sa sloenijim a ne samo sa prostim izborom, koji rezultira u istovremenom izboru sa slijedeim mogunostima:A < B ili A BA B ili A > BA = B ili A BMogua implementacija je preko aritmetike instrukcije oduzimanja SUBTRACT. Na alost, u ovom sluaju javlja se sporedni efekat jer se razlika smjeta na mijesto odredita, to dovodi do neeljene destrukcije tog operanda. Iz ovog razloga kod najveeg broja arhitektura postoji instrukcija poreenja COMPARE, kod koje se ne javlja takav sporedni efekat, jer se razlika pravi samo sa ciljem da se generie izvedeni rezultat. Veoma esto je neophodno uporediti operand sa nulom. Operand nula je, kod velikog broja arhitektura, implicitno specificiran opkodom u sluaju kada se koristi instrukcija TEST. Rijee se podravaju HLL funkcije max i min. One su specijalni sluaj poreenja dvije operandske vrijednosti, kombinovane sa instrukcijom koja se direktno izvrava nakon toga.Na primjer, funkcija A:=max(A,B) moe da se obavi od strane sekvence mainskih instrukcija mikroprocesora MC68020 na slijedei nain:

Ova sekvenca se moe obaviti slijedeom novom instrukcijom MAX.L B,A.Uvoenje novih instrukcija je korisno u slijedeim sluajevima:Kada je frekvencija koritenja dovoljno velika ili kada ne postoji drugi metod za implementaciju. Ovo je razlog to se primitivne operacije obavljaju pomou instrukcija kao to su WAIT (ekaj), TRAP (zarobi) i RESET (poniti).Kada je potrebno utedjeti memorijski prostor i vrijeme izvrenja u odnosu na programsku implementaciju. Ovo vodi poboljanju vremena izvrenja instrukcije zbog toga to se eliminie BRANCH instrukcija koja moe imati negativne posljedice na protonu obradu.Kada se ugradi u postojee arhitekture pa ne dolazi do znaajnih promjena u postojeim formatima instrukcija.

Primjer 1:Kod MC68020 postoje dvije instrukcije koje se koriste za poreenje vrijednosti: CMP (poredi) i TST (testiraj). Instrukcijom CMP kompariraju se operandi opteg tipa sa registrom, dok TST komparira opti operand sa nulom. Instrukcijom CMP A,B izraunava se B-A. Rezultat CMP i TST instrukcija ima uticaja na markere uslovnog kodnog registra CCR (engl. Condition Code Register). Dinamika korienja CMP i TST kod MC68020 je 7,86% i 3,09%, respektivno (MacGregor 1985). Ukupni procenat od 10,95% pokazuje relativnu vanost ovih instrukcija. Na slici 4.3 je prikazan format CMP i TST instrukcije kod MC68020.

Sl. 4.3. Format instrukcija CMP i TST mikroprocesora MC68020.

Poreenje opsegaPoreenje opsega predstavlja rangiranje elemenata (tj. podataka) u odnosu na dva elementa. Moe se primjeniti i za N elemenata. Pomenuta operacija se sastoji u odreivanju korektne pozicije elemenata (tj. podataka), usvajajui da se vri sortiranje N elemenata po nekom kljuu. Najvei broj arhitektura posjeduje specijalne instrukcije za ovo poreenje. Operacija se esto obavlja repetitivnim rangiranjem dva elementa. Kod ovog poreenja, neophodno je klasifikovati objekat tako da postoji odreena relacija sa drugim objektima; na primer:'A' Char 'Z'alfabetski znaci'0' Char '9'numeriki znacidonja_granica indeks gornja_granicaindeks polje

Poreenje A X B moe da generie (u zavisnosti od rezultata): dva mogua odgovora : A X B ; XBtri mogua odgovora : A X B ; XBpet moguih odgovora: A