1 Algoritm

Kui me tahame teha midagi suuremat, siis võib tulemuse saavutamisel abi olla sellest, kui me kavandatu väiksemateks sammudeks jaotame. Seejuures peaksime muidugi mõtlema, mis järjekorras need sammud tuleb või saab teha. Kas mingeid samme saab teha samaaegselt? Kas midagi tuleb teha korduvalt? Kas mõnda asja tuleb või saab teha ainult teatud tingimustel? Äkki saab hoopis keegi teine meie endi asemel midagi ära teha?

Kui tahta kellelegi teisele selgeks teha, kuidas teatud asi toimuma peaks, siis tuleks selleks kasutada mingit mõlemale poolele arusaadavat viisi. Vast on nii mõnedki kogenud, et täpsed juhised võivad kaasa aidata tulemuse saamisele: “Pööra ringteelt välja teiselt mahasõidult!”, “Keeda 20 minutit!”, “Lisa kaks labidatäit kruusa!”, “Istuge, palun!”.

Kui soovime ümbritsevat maailma mingit moodi käituma suunata, siis hea meetod selleks on kehtestada eeskirjad. Eeskirjad võivad olla keelavad või kohustavad. Keelavad eeskirjad on näiteks sellised: “Ära mine vales kohas üle tänava!”, “Ära söö (joo) nii palju!”, “Ära ületa kiirust!”, “Ära mängi nii palju arvutimänge!”.

Programmeerimises keskendume kohustavatele eeskirjadele – neile, mis kirjeldavad tegevusi, mida peab tegema. Tavaliselt on elus mingi ülesande lahendamiseks vaja teha mitu sammu järjest – sel juhul saame rääkida lahenduseeskirjast ehk algoritmist. Algoritm on mingi hulk kindlas järjekorras kohustavaid eeskirju (vt ka Eesti keele seletavast sõnaraamatust).

Algoritmide esitamine

Põhimõtteliselt saab algoritmi kirja panna erineval moel. Näiteks võib selle samme lihtsalt järjest nummerdatult üles kirjutada. Samuti võid uurida, kuidas Omniva on esitanud algoritmi paki saatmiseks. Suureks abiks võivad olla illustratsioonid, näiteks esmaabi andmise puhul. Mõnedel juhtudel ongi illustratsioonid peamised, näiteks lennukis olevatel ohutuskaartidel.

Üsna tavaline on, et teatud samme tuleb (või saab) sooritada ainult siis, kui kindel tingimus on täidetud. Näiteks on vingugaasimürgituse esmaabi puhul kirjas: “Kui kannatanu ei hinga, tee kunstlikku hingamist.”

Üks levinud viis algoritmi kirjeldamiseks on plokkskeem. Vaata järgnevat joonist.

 

Joonis 1. Kartulisalati plokkskeem

Meie plokkskeemis tähistatakse algoritmi algust ja lõppu ovaalide abil. Algoritmil on alati üks algus ja üks lõpp. N-ö tavalise sammu tähistamiseks kasutatakse ristkülikut. Plokkide järgnevust märgitakse nooltega. Nii kirjeldavad kartulisalati tegemist tänaseks juba emeriitprofessorid Mare Koit, Ülo Kaasik ja Jüri Kiho oma õpikus “Kuidas programmeerida” (1990). (Neil oli küll veidi keerulisem retsept.)

Samale tulemusele võib jõuda ka mõnevõrra teistsuguse algoritmiga. Mõned sammud võivad olla teises järjekorras, aga mõnede sammude puhul on omavaheline järjekord fikseeritud. See, millised sammud ühte plokki lugeda, võib olla ka üsna vabalt valitav. Kui tahame midagi paralleelselt teha, et tulemust kiiremini saada, siis võiks salati tegemisel kartulite ja hapukurgi tükeldamist eraldi võtta ja neid lasta erinevatel inimestel samal ajal teha. Siinkohal kerkib loomulik küsimus: kas meil on olemas selleks vajalikke ressursse – inimesi, nuge, lõikelaudasid? Paralleelsete protsesside kasutamine programmides on praegusel ajal äärmiselt oluline, aga ka keeruline ja see jääb meie kursusest välja.

Enesekontroll (2 ülesannet)

Enesekontrolli ülesanded on mõeldud enda teadmiste kontrollimiseks. Nende tulemusi ei salvestata.

Kontrollplokid

Mitme tegevuse paralleelselt tegemist me siin ei käsitle. Küll aga on meile olulised olukorrad, kus tuleb kahest võimalikust jätkust valida üks. Plokkskeemis kasutame selliste hargnemiste – kontrollplokkide – kirjeldamiseks rombi. Kontrollplokis on oluline tingimus, mille täidetuse põhjal otsustatakse, kumba teed edasi minna. Kontrollplokist väljub alati kaks noolt, sissetulevate noolte hulk ei ole piiratud.

Põhimõtteliselt saab kasutada ka skeeme, kus kontrollplokist väljub rohkem nooli. Selliseid (näiteks see skeem) on näiteks Euroopa parlamendi ja nõukogu määruses nr 1272/2008, mis käsitleb ainete ja segude klassifitseerimist, märgistamist ja pakendamist. Seal on Jah/Ei asemel näiteks Jah, kiiresti / Jah, aeglaselt / Ei. Meie jätkame siiski nii, et on täpselt kaks valikut – kas tingimus kehtib või mitte.

Rohkem arvutite juurde tulles on sageli vaja programmi kasutajalt mingit sisendit ja tulemuseks on kasutajale millegi väljastamine. Sellist andmevahetust märgitakse rööpkülikutega. Järgmises algoritmis sisestab kasutaja arvud a ja b ning pärast kontrolli väljastatakse talle vastav teade.

Joonis 2. Kahe arvu võrdlemise plokkskeem

Enesekontroll (1 ülesanne)

Algoritmi koostamisel tuleb olla väga tähelepanelik ka kõikvõimalike erijuhtude arvestamiseks. Näiteks eelmise algoritmi puhul peab väljastatav tekst olema õige ka juhul, kus sisestatud arvud a ja b on võrdsed.

Enne programmide juurde minekut vaatleme näitena algoritmi, mis kirjeldab sellise programmi tööd, mis püüab aidata kursuslast, kes ei pääse kursuse Moodle’i keskkonda. Siin on see toodud plokkskeemina. (Skeemil klõpsates näeb seda suuremana.)

Joonis 3. Moodle’i murelahendaja

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Programmeerimine on loodud Eno Tõnisson, Tauno Palts, Merilin Säde, Kaarel Tõnisson jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut