Razvoj algoritma, diagram poteka in programska rešitev

Kaj se bomo v tem poglavju naučili?

Spoznali bomo definicijo algoritma. Spoznali bomo, kako lahko algoritem grafično zapišemo. Spoznali bomo tudi prehod od grafičnega zapisa algoritva v zapis programa v ustreznem programskem jeziku (kodiranje programa).

Uvod

Algoritem je navodilo, kako rešimo nek določen problem. Običajno je zapisan kot seznam korakov, ki nas pripeljejo do rešitve problema. V tem pogledu lahko najdemo analogijo z iskanjem poti iz labirinta (kar je seveda spet problem).

Nekdo, ki se pred takimi problemi prvič znajde, bo imel več težav, kot nekdo z izkušnjami. Zato naj bi veljalo, da se lotimo najprej bolj preprostih problemov (oziroma programov) in se šele kasneje lotimo bolj zamotanih. Kasneje se bomo navadili tudi, da lahko v naše programe vključujemo delčke kode starejših, že uporabljenih programov.

 

Pomislimo nato, kako bi nalogo razdelili v manjše naloge oziroma faze ali korake. Pomislimo na kuharske recepte, kjer potekajo stvari prav tako korak za korakom.

Poglejmo si (poenostavljen) recept za pripravo potice:

Potrebujemo moko, kvas, mlačno mleko in dve jajci in sladkor.

Pripravimo testo in ga damo na toplo, da vzhaja.

Za nadev pristavimo mleko, mu dodamo polovico sladkorja ter zavremo in s tem poparimo zmlete orehe. Zavremo tudi med in ga prilijemo mešanici. Dodamo nastrgano limonino lupino, cimet in rum.

Počakamo, da se vse skupaj ohladi.

Ko testo naraste, ga razvaljamo za prst na debelo.

Testo namažemo z nadevom, tesno zvijemo v zvitek in položimo v pomaščen in z drobtinami potresen model.

Postavimo ga na toplo, da še enkrat vzhaja. Potem potico postavimo v ogreto pečico. Pečemo jo približno uro. Ko je pečena, jo takoj zvrnemo iz modela, da ne postane vlažna in da skorja ne odstopi.

 

Očitno moramo prej pripraviti testo, šele nato ga lahko namažemo z nadevom.  In potice ne moremo dati peči, dokler nismo pečice ogreli.

Podobno je z numeričnimi problemi. Računanja se ne moremo lootiti, če nismo prej prebrali podatkov. In rezultatov ne moremo izpisati, če prej ni bilo opravljeno računanje.

Zaporedje korakov je torej pomembno.

Kako lahko algoritem zapišemo

Algoritem lahko zapišemo na več načinov:

Oglejmo si diagram poteka za prej opisani postopek za pripravo potice:

Seveda algoritem ni popoln.  Potica bi se nam sežgala, saj nismo predvideli, da jo moramo po 1 uri vzeti ven iz pečice. 

Namig: dodati bi morali še eno spraševanje, če je ena ura že minila.

Poleg tega bi lahko postopek oziroma naš algoritem razdelali še bolj podrobno.

In kako moramo algoritem zakomplicirati, če mora naš kuhar speči 10 potic?

Namig: Potice bomo morali šteti. Postopek pečenja ponovimo tolikokrat, dokler ne bomo pripravili še desete potice.

Zapis algoritma v izbranem programskem jeziku je prevzaprav takoimenovano »kodiranje« programa. Seveda moramo primeren programski jezik prej spoznati. Izkušeni programerji pogosto pišejo programe neposredno v danem programskem jeziku brez predhodnega risanja diagrama poteka.

Programska rešitev

Razvoj algoritmov dobi svoj smisel, če želimo sestaviti pravi računalniški program. Skoraj vsak program in torej skoraj vsak algoritem potrebuje na začetku neke podatke. Nato mora računalnik izvesti nalogo (ali zaporedje nalog). Običajno pride na koncu tudi do prikaza rezultata.

Če pomislimo na naš primer s potico, bi lahko naredili program, ki izračuna, koliko bo taka potica stala.
Za kaj takega potrebujemo cene in potrebno količino surovin (moke, jajc, mleka, orehov ipd). Potrebujemo še čas izdelave in ceno kuharjevega dela. Potrebujemo tudi ceno elektrike in čas uporabe pečice.  Poglejmo si ustrezen diagram poteka, pa tudi program v jeziku Python (seveda bi lahko uporabili tudi kakšen drug programski jezik:

# preberemo cene surovin...
cenaMoke = input()
cenaMleka = input()
cenaJajc = input()
# Koliko teh surovin potrebujemo..
kolicinaMoke =input()
kolicinaMleka =input()
kolicina Jajc = input()
# Izracunamo, koliko nas vse to stane (pristeti bi morali se ceno dela in ceno elektrike)
strosekMleka = cenaMleka*kolicinaMleka 
strosekMoke = cenaMoke*kolicinaMoke
strosekJajc = cenaJajc* kolicinaJajc
cenaPotice = strosekMleka + strosekJajc+strosekMoke

# Izpisemo ceno potice..
print "Cena potice =", cenaPotice


Ta diagram poteka in ustrezna koda v programskem jeziku predstavljata že pravi program. Seveda je algoritem v tem primeru zelo preprost, vendar ga lahko zakompliciramo. Tako lahko dodamo možnost, da je potica iz različnih sestavin in je torej njena cena različna. Lahko bi naredili program, kateremu podamo, koliko potic naredimo v posameznem dnevu tedna in  koliko za to zapravimo povprečno na dan.