Sie sind auf Seite 1von 10

9.

Algoritmi
Nakon ovog predavanja vi ete biti u stanju da: 1. definiete termin algoritam 2. navedete osnovne karakteristike algoritama 3. opiete ta se podrazumeva pod nizom (sekvencom) 4. opiete if ... then i if ... then ... else konstrukciju 5. opiete dowhile I whiledo konstrukciju 6. navedete razliite naine izraavanja algoritama 7. objasnite ta se podrazumeva pod terminom "varijabla" 8. objasnite ta se podrazumeva pod pojmom tip varijable (data type) 9. objasnite ta su to pravila za davanje imena varijablama 10. opiete strategiju projektovanja algoritama

ta je to algoritam?
Poznati programerski istraiva i profesor Niklaus Wirth je dao ovakvu definiciju: Programs = Algorithms + Data Jo u prvom predavanju vam je predstavljen pojam programa i podataka, ali ta je sad to algoritam? Algoritam je osnovno reenje problema na kome se zasniva program ili plan za izradu programa, ili se moe rei da je algoritam: "Efektivna procedura za reavanje problema u konanom broju koraka." Efektivna zapravo znai da su koraci koje procedura definie izvodljivi i jasno definisani. Veoma je vano da je broj tih koraka konaan tj. da se procedura odvija u konanom vremenu. Dobro projektovan program mora uvek dati odgovor, taj odgovor nam se ne mora uvek svideti, ali on mora biti dat u konanom vremenu. Ponekad se deava da nama odgovora. To je u raunarskoj teoriji poznato kao HALTING problem. Meutim , dobro projektovani programi moraju imati reenje i za takve sluajeve, tj. moraju garantovati zavretak u konanom broju koraka.

Osnovne elementi (konstruktori) algoritama


Evo najpre jednog jednostavnog algoritma za spremanje aja: 1. 2. 3. 4. Ako u ajniku nema vode napunite ajnik vodom Stavite ajnik na poret i ukljuite odgovarajuu ringlu. Ako olja za aj nije prazna ispraznite je. Stavite lie aja u olju za aj.

5. Ako voda u ajniku nije provrela idite na korak 5, ako jeste idite na korak 6. 6. Iskljuite ringlu. 7. Sipajte vodu iz ajnika u olju (pazite da ne prelijete). Zapaamo da ovaj algoritam ima vie koraka, da neki od koraka (1,3 i 5) sadre donoenje odluka, da jedan korak (5) sadri ponavljanje u kome se izvrava proces ekanja na vodu da provri. Algoritam sadri tri elementa: 1. Sekvencu niz (proces) 2. Odluivanje (selekcija) 3. Ponavljanje (repeticija, iteracija, ciklus, petlja) Godine 1964 matematiari Corrado Bohm i Guiseppe Jacopini pokazali su da se svaki algoritam moe izraziti pomou sekvence, odluke i ponavljanja. To je poznato kao teorema o programskoj strukturi i predstavljalo je veoma vaan korak ka strukturalnom programiranju koje je danas u upotrebi.

Sekvenca (niz operacija)


Sekvenca znai da se svaki korak sekvence izvrava u unapred datom redosledu onako kako se pojavljuju u sekvenci, jedan za drugim. U predhodnom algoritmu svaki korak mora biti uraen u zadatom redosledu. Ako bi promenili redosled koraka to bi moglo da dovede do pogrenih (ponekad i tragikominih) rezultata.

Odluka (Selekcija)
U algoritmima rezultat odluke je ili tano ili netano, nema nita izmeu. Rezultat odluke se bazira na nekoj tvrdnji (logikom iskazu) koja moe da ima vrednost tano ili netano, na primer: if danas je sreda then uzmi platu je odluka koja ima sledei oblika: if tvrdnja then proces Tvrdnja (iskaz) je neka reenica koja moe biti tana ili netana, tako je tano da danas je sreda ili je netano da danas je sreda. To ne moe biti istovremeno i tano i netano, niti neto tree. Ako je tvrdnja tana tada se izvrava proces koji sledi iza rei then. Ako tvrdnja nije tana prelazi se na sledeu instrukciju bez izvravanja procesa posle rei then. Odluka moe da ima i neto sloeniji oblik:

if tvrdnja then proces1 else proces2 to je oblik if ... then ... else .... Ovo znai da ako je tvrdnja tana tada se izvrava proces1 a ako je netana proces2. U onom prvom obliku odluke if tvrdnja then proces u else delu nema procesa pa zato ni else nije potrebno.

Ponavljanje (Iteracija)
Ponavljanje ima dva oblika: dowhile ciklus i while..do ciklus. Repeat ciklus se koristi za ponavljanje procesa ili niza procesa sve dok tvrdnja iz uslova ponavljanja ne postane tana. Repeat ciklus ima sldei oblik: do Proces1 Proces2 ............. ProcesN while tvrdnja Evo jednog primera do Sipaj vodu u ajnik while ajnik nije pun Proces je Sipaj vodu u ajnik, a uslov za nastavak ciklusa ajnik nijeje pun. dowhile ciklus obavi (bar jednom) proces pre testiranja da li je uslov zavretka ciklusa ispinjen. ta e se desiti u predhodnom primeru ako je ajnik ve bio pun kada je ciklus zapoet? Doi e do neeljenog procesa koji e izazvati prelivanje vode iz ajnika. Za takve sluajeve pogodnije je koristiti whiledo ciklus: while ajnik nije pun Sipaj vodu u ajnik Poto se odluka da li je ajnik pun ili ne donosi pre sipanja vode, mogunost prelivanja je eliminisana.

Razliiti naini izraavanja algoritama


Jedan nain izraavanja algoritma smo videli maloas taj nain emo zvati forma deskriptivnih koraka. Tokom predavanja prouiemo etiri razliite forme izraavanja algoritama: 1. 2. 3. 4. 5. Korana-forma Pseudokod Dijagram toka Nassi-Schneiderman (NS) forma Jackson-ovi strukturni dijagrami (JSD) forma

Prve dve su pisane forma. Primer pravljenja aja je tipian primer Korane forme (StepForm) gde smo za izraavanje algoritma koristili prirodan jezik. Problem sa prirodnim jezikom je u tome to ponekad moe biti neprecizan. Tako se moe desiti da ono to jedan ovek napie drugi proita sa sasvim drugim tumaenjem. Pseudokod je takoe vrlo slian prirodnom jeziku ali mnogo precizniji i sa ogranienim renikom. Posldenja tri naina izraavanja algoritama su grafiki, to jest u njima se koristi meavina grafikih simbola i pisanih rei da se predstave sekvenca, odluka i ponavljanje. U sledeem predavanju emo se baviti ovim razliitim nainima izraavanja algoritama, a sada emo najpre prouiti dve vane teme.

ta su to varijable?
Poto je Programs = Algorithms + Data vraamo se na temu podataka. Kako smo ve rekli podatak je simboliki prikazana vrednost koja u programskom kontekstu dobija i znaenje znai u programu se podatak transformie u informaciju. Pitanje glasi: Kako se podaci predstavljaju u programima? Skoro svaki program sadri podatke, a podaci se obino sadre u varijablama. Tako varijablu moemo shvatiti kao kontejner za vrednosti koje mogu da se menaju tokom izvravanja programa. Na primer, u naem primeru za pravljenje aja nivo vode u ajniku je jedna varijabla, temperatura vode je varijabla, a i koliina lia je, takoe, varijabla. Svakoj varijabli u programu se daje posebno ime, na primer:

Nivo_Vode Temperatura_Vode Koliina_Listova_aja

i u svakom datom trenutku vrednost koja je predstavljena varijablom Nivo_Vode moe biti razliita od vrednosti iste varijable u nekom drugom trenutku. Instrukcija:

If ajnik ne sadri vodu then napuni ajnik

moe biti napisana i ovako:

If Nivo_Vode je 0 then napuni ajnik

ili

If Nivo_Vode = 0 then napuni ajnik

U nekom trenutku Nivo_Vode e dostii dozvoljeni maksimum, ma koliki on bio, i tada je ajnik pun.

Varijable i tipovi podataka


Podaci koji se koriste u algoritmima mogu biti razliitog tipa. Najprostiju tipovi podataka su:

numeriki podaci kao to su 12, 11.45, 901. alfabetski (slovni) podaci (karakteri) kao to su 'A', 'Z' ili 'Ovo je alfabetski niz'. logiki podaci sa TRUE, FALSE vrednostima.

Davanje imena varijablama


Uvek treba da se trudite da varijablama u algoritmu date smislena imena to e algoritam (i program) uiniti itljivijim i razumljivijim. To je posebno vano kod velikih i kompleksnih programa. U algoritmu za pravljenje aja koristili smo prirodan jezik. Pokazaemo kako se mogu koristiti imena varijabli za varijable tog algoritma. U desnoj koloni smo izabrali imena varijabli koja iako kraa od originalnih ne umanjuju znaenje. Donja crta u nazivu varijable treba da oznai da sve rei predstavljaju jednu jedinstvenu celinu kojom se predstavlja data varijabla. 1. Ako u ajniku nema vode napunite ajnik vodom 2. Stavite ajnik na poret i ukljuite odgovarajuu ringlu 3. Ako olja za aj nije prazna ispraznite je. 4. Stavite lie aja u olju za aj. 5. Ako voda u ajniku nije provrela idi na korak 5 6. Iskljuite ringlu 1. If ajnik_prazan then napuni ajnik 2. Stavite ajnik na poret i ukljuite odgovarajuu ringlu 3. If olja_nije_prazna then isprazni olju 4. Stavite lie aja u olju za aj. 5. If voda_ne_vri then idi na korak 5 6. Iskljuite ringlu

7. Sipajte vodu iz ajnika u olju

7. Sipajte vodu iz ajnika u olju

Ne postoje neka stroga pravila kao treba davati imena varijablama, ali postoje odreene konvencije i preporuke. Dobro je da se usvojite neku od tih preporuka i da je onda dosledno koristite. Uz put slina preporuka se moe dati i za davanje imena procesima, takoe. To sve ini va program itljivijim i razumljivijim, a time pogodnijim za odravanje i dalje unapreivanja - to znai da pomae produetku ivotnog ciklusa programa.

Strategija projektovanja algoritama


Sada kada znamo poneto o algoritmima u stanju smo da razmatramo i strategiju za projektovanje algoritama. Evo jedne takve strategije koja moe da bude korisna: Korak 1: Istraivaki korak 1. 2. 3. 4. Identiifikovati procese Identifikovati glavne odluke Identifikovati ponavljanja Identifikovati varijable

Korak 2: Izrada preliminarnog (grubog) algoritma 1. Izrada algoritma vieg nivoa 2. Proi kroz algoritam misaonom simulacijom. Ako simulacija otkrije probleme ispraviti algoritam. Korak 3: Izrada finalnog (detaljnog) algoritma 1. 2. 3. 4. Do detalja razraditi grubi algoritam napravljen u koraku 2. Grupiite procese koji se mogu grupisati Grupiite varijable koje se mogu grupisati Testirajte algoritam simulacijom korak po korak.

Ovu strategiju emo stalno koristiti, ali za momenat emo se baviti samo opisom navedenih koraka. Prvi korak Istraivanje zahteva paljivo prouavanje definicije problema koji se reava, kao i detaljnu analizu termina i pojmova koji se u toj definiciji koriste. U primeru sa pravljenjem aja uoavamo niz procesa punjenje ajnika, stavljanje na ringlu i tako dalje. Tu su takoe odluke i varijable. Drugi korak Preliminarni algoritam je prvi pokuaj reavanja problema. taj prvi pokuaj moe biti i veoma grub, ponekad i nepravilan, ali e korak 2.2 otkriti sve nedostatke i pomoi da se doe do korektnog reenja.

Trei korak Finalizacija je i najtei, zahteva iskustvo, strpljenje i preciznost. takoe je za uspenu realizaciju ovog koraka potrebno vladanje nekim programerskim vetinama koje se stiu samo dugotrajnim praktikovanjem vebanjem. U pragmatinom delu ovog predmeta, kada se izuava specifian programski jezik (Visual Basic ili C++) takva praktina znanja i vetine bie razvijene do novoa samostalnog razvoja programa od ideje do gotovog izvrnog programa. Sada emo analizirati jedan neto sloeniji problem i algoritam kojim se on reava. Problem stabilnih parova Pretpostavimo da u jednom gradu na jugu Srbije imamo n mladia i n devojaka. Svi se moeusobno poznaju, jer to je jedno malo mesto. Svaki mladi ima rang listu svih devojaka iz tog gradia, tako da se na toj listi na prvom mestu nalazi deveojka koja mu se najvie svia, a na poslednjem n-tom mestu devojka koja mu se najmanje svia. Istu takvu listu imaju i sve devojke, ali sa rang listom svih n mladia. Te liste su nam unapred poznate na neki nain (Radio Milevom). Cilj nam je da oenimo momke i devojke tako da svi budu sretni, a da brakovi budu stabilni. Videemo uskoro ta pod tim podrazumevamo. Definicija. Skup brakova je stabilan ako ne postoji par mladi-devojka koji se jedno drugom sviaju vie nego njihovi brani drugovi. Na primer, pretpostavimo da su Marko i Jovana u jednom, a Petar i Milica u drugom braku. Na nesreu Jovani se vie svia Petar nego Marko, a Petru se svia vie Jovana nego Milica. Ovo znai da bi Jovana i Petar bili sreniji da su zajedno. To moe da bude razlog za branu prevaru, pa se njihovi brakovi mogu smatrati nestabilnim. Matematiki se moe dokazati da uvek postoji stabilno uparivanje mladia i devojaka, takvo da ne postoji ni jedan nestabilan par. (Takoe se moe matematiki dokazati da ne postoji stabilno uparivanje ako bi dozvolili da se brano uparuju osobe istog pola.). Veoma je interesantno da ovaj algoritam u SAD-u ima jednu veoma praktinu primenu. Tamo se svake godine svreni studenti medicine upuuju (mladii) na praksu u bolnice (devojke) upravo korienjem ovog algoritma. Inae, algoritam su prvi put opisali D. Gale i L.S. Shapley 1962 godine. Hajdemo sada da problem razmotrimo na jednom konkretnom sluaju 5 devojaka i 5 mladia. Mladie emo oznaiti brojevima 1-5, a devojke slovim A-E. Sledea tabela pokazule njihove rang liste.

mladii 1: CBEAD 2: ABECD 3: DCBAE 4: ACDBE 5: ABDEC

devojke A : 35214 B : 52143 C : 43512 D : 12345 E : 23415

Pokuajmo najpre jednu prostu ( grabljivu ) strategiju. Krenimo redom od prvog mladia i svima dajmo devojku koja je najvie kotirana na njegovoj listi, a jo uvek je raspoloiva. To bi nam dalo sledei rezultat uparivanja: 1
2

C A D B E

3
4 5

Da proverimo stabilnost ovako napravljenih parova. Mladii 1, 2 i 3 su dobili svoje omiljene devojke, tako da im nee pasti na pamet da jure za drugima. Mladi 4 moe biti problematian jer mu se vie svia devojka A od one koju je dobio (B), ali je devojka A njega stavila na poslednje mesto, tako da to nije problem. Meutim mladiu 4 se vie svia i devojka C one koju je dobio, a devojci C se on takoe vie svia od onog kojeg je ona dobila (1). Znai mladi 4 i devojka C su potencijalni brakolomci. Uparivanje je, dakle, nestabilno. Mogli bi sada da pokuamo da nekom kombinatorikom to popravimo, ali bi pri tom mogli da formiramo druge nestabilne parove, i da vrtei se u krug ne naemo reenje. I to za samo 5 parova. A, ta bi bilo da je 100-tinak (ili vie) parova u pitanju. Izgleda kao nemogu zadatak. Ali, generalno reenje postoji i to veoma elegantno. Algoritam Sada emo opisati jedan algoritam koji se odvija u nekoliko dana i koji dovodi do stabilnog uparivanja.

Svakod dana se ponavlja sledei ritual (scenario): Jutro: Svaka devojka izae na svoj balkon. Svaki mladi doe ispod balkona devojke koja je na prvom mestu njegove rang liste i peva joj serenadu. Ako mladiu nije ostala ni jedna devojka u listi, on ostaje kod kue ( i radi domae zadatke iz programiranja). Popodne: Svaka devojka koja ispod svog balkona ima udvarae (koji pevaju serenade), jednom od njih koji je najvii na njenoj rang listi kae: Moda, doi sutra., a svim ostalima kae: Nikad se neu udati za tebe. etaj. Uvee: Svaki mladi koji je dobio korpu iz svoje liste brie devojku kod koje nema nikakve anse. Kada posle nekoliko dana ujutro ispod svakogbalkona bude samo po jedan mladi, devojke uzimaju te mladie i tako se formiraju parovi. Tako formirani parovi bie stabilni u skaldu sa naom definicijom stabilnosti. Tu je i kraj naeg algoritma. Algoritam sadri sve tri vrste koraka: sekvencu, selekciju i repeticiju.

Sie predavanja
U ovom predavanju ste saznali o:

algoritmima i nihovim osnovnim elementima sekvenci, odluci i ponavljanju razliitim nainima prikaza algoritama varijablama, tipovima varijabli i konvencijama za davanje imena varijablama strategiji projektovanja algoritama

Algoritam je zapravo plan (scenario) kako e problem biti reen, a skoro svi algoritmi imaju iste osobine i sastavljeni su od istih elemenata (teorema o strukturi). Postoji vie naina za izraavanje (prikazivanje) algoritama, a neki od tih naina su ovde pomenuti. Svaki algoritam koristi podatke koji se mogu menjati tokom rada algoritma. Za projektovanje (izradu) algoritma dobro je imati strategiju. Jedna mogua strategija prikazana je u ovom predavanju. Sada ste ve spremni za projektovanje programa, ali pre toga u narednom predavanju baviemo se jednom temom koja projektovanje programa stavlja u iri kontekst projektovanja softverskih sistema i softversko inenjerstvo uopte.

Pitanja
1. Definiite pojam algoritam. 2. ta se podrazumeva kad kaemo da je neki algoritam efektivan? 3. Kakvo je znaenje rei konaan u vezi sa algoritmima? 4. Navedite tri osnovna elementa algoritama. 5. Koja su to dva konstruktora odluke? 6. ta je to tvrdnja?

7. Koja su to dva konstruktora ponavljanja? 8. Navedite etiri naina prikazivanja algoritama. 9. ta je to varijabla? 10. Dajte neki primer varijable iz svakodnevnog ivota. 11. ta je to tip podatka? 12. Navedite tri osnovna tipa podatka koji se mogu pojaviti u algoritmima. 13. U predavanju je prikazana jedna strategija za projektovanje algoritama. Navedite osnovne korake te strategije. Moete li napraviti neku svoju strategiju - opiite.

Das könnte Ihnen auch gefallen