Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 1. nädala sisukord | järgmine > |
1.1 Algoritm
Kui me midagi suuremat teha tahame, siis võib tulemuse saavutamisel abi olla sellest, kui me kavandatu kuidagi sammudeks jaotame. Seejuures me 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?
Elus paraku (kahjuks või õnneks) mõeldakse sammude peale sageli alles pärast nende toimumist. Kui aga tahta kellelegi teisele selgeks teha, kuidas teatud asi toimuma peaks, siis peaks selleks kasutama 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!", "Ära …".
Nüüd aga 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 ongi mingi hulk õiges järjekorras kohustavaid eeskirju (vt ka Eesti keele seletavast sõnaraamatust).
Algoritmi saab põhimõtteliselt kirja panna erineval moel. Näiteks võib selle lihtsalt samme järjest (nummerdades) üles kirjutada. Uurige, kuidas Omniva on esitanud algoritmi paki saatmiseks. Suureks abiks võivad olla illustratsioonid, näiteks esmaabi andmise puhul. Mõnedel juhtudel ongi ainult illustratsioonid, näiteks lennukis olevatel ohutuskaartidel.
Üsna tavaline on, et teatud samme tuleb (või saab) sooritada ainult siis, kui teatud 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. Meie plokkskeemis tähistatakse algoritmi algust ja lõppu ovaalide abil (vt järgnevat joonist). 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 kindel. 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 tegelikult äärmiselt oluline, aga ka keeruline ja see jääb meie kursusest välja.
Ülesanne
Tegemist on enesekontrolliülesandega, mille lahendamise tulemusi ei salvestata. Võite julgesti ka valesti vastata, aga püüdke ikka õigesti.
Ülesanne
Mitme tegevuse paralleelselt tegemist me siin ei käsitle. Küll aga on meil olulisel kohal olukorrad, kus tuleb kahest võimalikust jätkust valida üks. Plokkskeemis kasutame selliste hargnemiste - kontrollplokkide - kirjeldamiseks rombi. Kontrollplokis on olulisel kohal tingimus, mille täidetuse põhjal otsustatakse, kumba teed edasi minna. Kontrollplokist väljub alati täpselt 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 aga jätkame siiski nii, et on täpselt kaks valikut - kas tingimus kehtib või mitte.
Kui nüüd tulla rohkem arvutite juurde, siis üsna sageli on 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.
Ü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.)
Enam-vähem sama algoritmi järgi on korraldatud ka murelahendaja.
< eelmine | 1. nädala sisukord | järgmine > |