Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi informaatika didaktika töörühm
< eelmine | 1. OSA 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 (aga endalegi) ikkagi selgeks teha, kuidas teatud asi toimuma peaks (või toimus), siis peaks selleks kasutama mingit mõlemale poolele arusaadavat viisi. Vast on nii mõnedki kogenud, et teised inimesed (isegi lähedased) ei pruugigi suuta mõtteid lugeda! Saavad asjadest hoopis teistmoodi (et mitte öelda valesti) aru! Või ei saa üldse aru!
Millised on põhimõttelised võimalused suunata ümbritsevat maailma sobivalt käituma? Näiteks saab kehtestada eeskirjad. Need võivad olla negatiivsed - midagi keelavad või piiravad. Ära mine vales kohas üle tänava! Ära söö (joo) nii palju! Ära ületa kiirust! Ära mängi nii palju arvutimänge! Ära …
Siin keskendume pigem positiivsetele eeskirjadele - neile, mis kirjeldavad, mida tuleb teha. Vast on nii mõnedki kogenud, et täpsed juhised võivad aidata tulemuse saamisele kaasa. Pööra ringteelt välja teiselt mahasõidult! Keeda 20 minutit! Lisa kaks labidatäit kruusa! Istuge, palun!
Konkreetse ülesande lahendamiseks võib vaja olla mitmeid juhiseid üksteise järel mitu ja saame rääkida lahenduseeskirjast ehk algoritmist (vt Eesti keele seletav sõnaraamat)
Algoritme saab esitada erineval moel. Üks levinud viis on plokkskeemi kasutamine. Siingi on erinevaid võimalusi, meie kasutame sellist, kus algoritmi algust ja lõppu kujutatakse ovaalide abil. Algoritmil on alati üks algus ja üks lõpp. Vajadusel võime erinevad lõpud "kokku tõmmata". N-ö tavalise sammu tähistamiseks kasutatakse ristkülikut. Plokkide järgnevust märgitakse nooltega. Nii kirjeldavad (tänaseks juba emeriitprofessorid) Mare Koit, Ülo Kaasik ja Jüri Kiho oma õpikus "Kuidas programmeerida" (1990) kartulisalati tegemist. (Neil oli küll veidi keerulisem retsept.)
On üsna selge, et 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. Tuleb silmas pidada, et siin ja mitmetes kohtades edaspidi on ülesannetes elu lihtsustatult käsitletud. Päriselt võib ju kuulutust lugeda nii enne pileti ostmist kui ka pärast seda jms. Siin aga loetakse õigeks üks (arvatavalt levinuim) lahendus.
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.
Kui nüüd tulla rohkem arvutite juurde, siis üsna sageli on vaja mingit sisendit ja tulemuseks on millegi väljastamine. Sellist andmevahetust märgitakse rööpkülikutega. Järgmises algoritmis sisestatakse arvud a ja b ning pärast kontrolli väljastatakse 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.
< eelmine | 1. OSA sisukord | järgmine > |