Definicija i zadatak algoritma

Definicija i zadatak algoritma

 

            Videli smo da je druga faza u programiranju rešavanje zadataka, tj. razrada algoritma. Ova faza zapravo predstavlja rešavanje programskog zadatka i njen konačan cilj je predstavljanje postupka obrade u obliku logičkog niza radnji koje treba izvršiti da bi se od zadatih ulaza došlo do željenih izlaza, tj do rezultata. Krajnji cilj ove faze je opis algoritma za rešavanje problema, odnosno idejno rešenje u nekom od standardnih načina označavanje. Ima više načina za formalno prikazivanje algoritma a najčešći su: standardni dijagram toka (flowchart) i strukturirani dijagram toka (Nassi-Schneiderman), dijagram aktivnosti, stablo odlučivanja, HOS itd.

            Šta je to algoritam? Rešavanje zadataka pomoću računara obuhvata izvršavanje niza tačno određenih radnji u cilju dobijanja željenih rezultata. Dakle, algoritam se može difinisati kao tačno određeni i uređeni skup koraka koji vode ka rešavanju datog problema.

            Kao što smo rekli jedan od načina za prikazivanje algoritma je standardni dijagram toka. Osnovni blokovi u standardnim dijagramima toka koji odgovaraju osnovnim klasama problema su:

U bilo kom programskom jeziku svakom od ovih blokova odgovara po jedan od dva osnovna tipa izvršnih instrukcija:

·         Instrukcije prenosa i obrade podataka

·        Kontrolne instrukcije

Konačan cilj razrade algoritma jeste dobijanje detaljne algoritamske šeme u kojoj svaki algoritamski korak sadrži samo elementarne obrade koje se lako mogu pretočiti u instrukciju nekog programskog jezika. Do ovog cilja se dolazi počev od globalnog algoritma. Svaki algoritamski korak u globalnom algoritmu se potpuno razrađuje na niz jednostavnijih koraka ne vodeći računa o ostalim koracima tog algoritma. Ovaj postupak ćemo ilustrovati na primeru „ručak u restoranu“.

Rešenje ovog problema ima tri faze: naručivanje, ručak i plaćanje. Ove tri faze možemo prikazati na globalnom algoritmu čiji je dijagram toka:

            Sada se usresredimo na razrađivanje prve faze (naručivanje), posmatrajući je kao zasebnu celinu, tj. modul, ne obraćajući pažnju na ostale faze. Osnovne aktivnosti u fazi naručivanja su: traženje jelovnika, izbor jela i prenošenje zahteva konobaru.

Aktivnosti traženje jelovnika i prenošenje zahteva konobaru su dovoljno jednostavne pa ih ne treba dalje razrađivati. Međutim izbor ručka je složenija aktivnost koja zahteva dalju razradu u obliku niza akcija i to su: otvaranje jelovnika, izbor predjela, izbor jela, izbor dezerta i zatvaranje jelovnika.

Otvaranje i zatvaranje jelovnika su vrlo jednostavne aktivnosti, dok se ostale aktivnosti mogu dalje pojednostavniti i predstaviti zasebnim modulima – potprogramima. Kako biramo predjelo? Pročitamo naziv prvog predjela i ako nam odgovara najčešće dalje i ne gledamo. Ako ne odgovara čitamo naziv sledećeg predjela, pitamo se da li nam ono odgovara, tj. odlučujemo se za to predjelo ili čitamo sledeće. Ovaj proces se ponavalja sve dok ne nađemo predjelo koje nam odgovara ili dok ne dođemo do kraja spiska. Akgoritam bi bio sledeći:

Ovaj algoritam sadrži pretpostavku (uslov) da uvek postoji bar jedno predjelo koje odgovara. Problem bi se dodatno komplikovao ako bi se uključila mogućnost da ni jedno predjelo ne odgovara. To bi bilo samo dodavanje bloka za donošenje odluke da li poslednje jelo odgovara. Ako ne odgovara donosimo odluku da odustajemo od predjela. Da bi postupak mogao da se primeni na jelovnik u bilo kom restoranu mora se dodati i blok odluke koji proverava da li smo stigli do kraja liste. Algoritam će sada izgledati: