You are here

Programmeerimise alused, 1: Sissejuhatus

Käesoleva numbriga alustab Horisont artiklisarja, mille eesmärk on tutvustada lugejatele arvutiprogrammide koostamise põhimõtteid ja -võtteid.

Loodame, et aktiivselt kaasa töötavad inimesed on juba üsna varsti võimelised kirjutama väiksemaid programmikesi, mis aitavad nende igapäevast arvutikasutamist mugavamaks ja tõhusamaks muuta. Materjal peaks olema jõukohane kõigile, kelle olemasolev arvutikasutusvilumus küünib tabelarvutuses valemite koostamiseni.

Hädavajalikud omadused

Programmeerimise juurde asumisel tuleks kõigepealt teadvustada, et vastupidiselt laialt levinud arvamusele on arvuti üks võrdlemisi rumal masin. Tõsi, väga kiire ja täpne käsutäitja, aga sellele vaatamata üsna rumal, mis avaldub ennekõike võimetusena ootamatus olukorras kohaneda ja paindlikult reageerida. Sellest tulenevalt on hea programmeerija kõige tähtsam omadus ettenägelikkus — töökindla programmi kirjutamiseks peab programmeerija oskama ette näha kõiki olukordi, mis programmi täitmisel tekkida võivad, ja andma arvutile täpsed käitumisjuhised igaks võimalikuks juhtumiks.

Teine vajalik omadus ettenägelikkuse kõrval on muidugi oskus oma juhiseid arvutile arusaadavalt sõnastada, sest inimkeelt mõistvad arvutid on vähemalt esialgu veel ulmefilmide pärusmaa ja oma kirjutuslaualt keegi meist neid niipea ei leia. Erinevaid programmikeeli, milles oma ettekirjutusi väljendada, on arvutite ligi 60-aastase ajaloo jooksul välja mõeldud päris palju. Meie artiklisarja sihtgrupist lähtuvalt kasutame töövahendina “päris” programmeerimiskeskkonna asemel tabelarvutusprogrammi OpenOffice.org Calc ja sellesse integreeritud programmikeelt OpenOffice.org Basic, mida edaspidi nimetame lühemalt lihtsalt Basicuks. Täpsuse huvides olgu märgitud, et tegelikult on maailmas kasutusel päris palju Basicu dialekte, mis võivad üksteisest ka üsna palju erineda, kuigi mõned põhilised jooned on neil ühised. Kontoritarkvara pakett OpenOffice.org on kõigile soovijaile tasuta kasutamiseks saadaval Internetis aadressil www.openoffice.org. Suurem osa järgnevas kirjeldatavatest põhimõtetest kehtib ka Microsoft Exceli programmikeele VBA kohta, aga käskude vorm võib mõnel juhul päris palju erineda.

Programmeerimiskeskkonda sisenemiseks tuleks pärast OpenOffice.org käivitamist valida ‘Tools’ → ‘Macros’ → ‘Organize Macros’ → ‘OpenOffice.org Basic’ ja avanevas dialoogiaknas vajutada nuppu ‘Edit’. Kogu tänane programmeerimine leiab aset selle käsu järel avanevas aknas ridade Sub Main ja End Sub vahel (vt joonis 1). Mis nende ridade endi täpsem mõte on, selgub veidi hiljem.

Programmikeeled

Kõige üldisemalt jagunevad programmikeeled deklaratiivseteks ja imperatiivseteks. Deklaratiivses keeles määrab inimene andmeobjektide vahelised seosed ja arvuti leiab ise tulemuste saamiseks vajaliku arvutuste jada. Näiteks tabelarvutuse töölehel võivad lahtrites olevad valemid kasutada teistes lahtrites olevaid väärtusi ja sel juhul on tabelarvutusprogrammi ülesanne ühe lahtri väärtuse muutumisel leida kõik teised, mis sellest sõltuvad, ja ka neid õiges järjekorras uuendada. Imperatiivses keeles seevastu peab programmi koostaja arvutuseeskirja täpse sammude jadana ette andma. Nagu valdav enamus üldotstarbelisi programmikeeli, on ka Basic imperatiivne.

Basicu kui imperatiivse programmikeele kõige tähtsam mõiste on muutuja. Muutuja on nimega mälupesa, millesse programm võib oma töö käigus andmeid salvestada. Tabelarvutuse terminites rääkides sarnaneb muutuja tabeli lahtriga ja tema nimi selle lahtri aadressiga. Enamikus levinud programmikeeltes võib muutuja nimi koosneda ladina tähtedest ja numbritest, kuid ei tohi alata numbriga. Muutujale väärtuse määramist nimetatakse omistamiseks ja Basicus on selle üldkuju

muutuja = avaldis

Avaldised

Basicu avaldised on üldiselt sarnased tabelarvutuse valemitega, näiteks omistamine

A = (2 + 3) * 4

seab muutuja A väärtuseks 20.

Nagu tabelarvutuse valemites, nii asendatakse ka Basicu avaldistes muutuja nimi selle väärtusega. Aga erinevalt tabelarvutuse valemitest, kus tabeli lahtrisse sisestatud avaldise väärtus selles esinevate teiste lahtrite väärtuste muutumisel automaatselt uueneb, on Basicu omistamine ühekordne tegevus: omistamiskäsu C = A + B täitmisel arvutatakse kõigepealt võrdusmärgist paremal oleva avaldise väärtus, kasutades muutujate A ja B olemasolevaid väärtusi, ja siis salvestatakse tulemus muutujasse C. Kui A ja B väärtused pärast seda muutuvad, ei mõjuta see enam C väärtust. Muuseas võimaldab see kasutada esmapilgul üsna veidrana tunduvat omistamist A = A + 1, mis võtab muutuja A esialgse väärtuse, liidab sellele arvu 1 ja salvestab tulemuse muutuja A uue väärtusena, ehk lühemalt öeldes suurendab A väärtust ühe võrra.

Eeltoodu illustreerimiseks ja töökeskkonnaga tutvumiseks vaatleme joonisel 1 toodud programminäidet. Selleks, et programmi töö ajal muutujate väärtusi jooksvalt jälgida, sisestage väljale ‘Watch’ nimed A, B ja C, vajutades iga nime järel vastava muutuja jälgimise alustamiseks sisestusklahvi. Kui nüüd programmi nupu ‘Step Over’ abil sammhaaval täita, siis on selgelt näha, et neljanda omistamisega (joonisel on näidatud programmi seis vahetult enne selle käsu täitmist) A väärtus muutub, aga C väärtus jääb endiseks.

Joonis 1: Programmi täitmise jälgimine

Lisaks juba tutvustatud ‘Step Over’ nupule on programmeerimisel sagedamini vaja veel nuppe ‘Run BASIC’, mis täidab terve programmi ühe hooga, ja ‘Breakpoint On/Off’, mis võimaldab märkida programmi peatuspunkte. Peatuspunkti jõudmisel peatub ka nupu ‘Run BASIC’ abil käivitatud programm, mis võimaldab programmi ootamatu käitumise korral uurida, kas kõigi muutujate väärtused ikka on sellised, nagu nad peaks olema (joonisel on peatus määratud teise omistamiskäsu täitmise ette, seda tähistab rea alguses olev punane ikoon).

Sisend-väljund

Muidugi on arvutamisest vähe tulu, kui selle töö tulemusi kuidagi viisakalt näha ei saa. Selleks, et programmi normaalsel kasutamisel ei peaks peatuspunktide ja muu sellisega tegelema, võib teadete väljastamiseks kasutada teateakna kuvamise käsku MsgBox, mille kõige lihtsam kuju on MsgBox(teade). Andmete vastupidises suunas liigutamiseks sobib sisestusakna kuvamise käsk InputBox, mida tavaliselt kasutatakse kujul muutuja = InputBox(teade). Teadete koostamisel on sageli hea kasutada tekstide “kokkukleepimise” tehet &, näiteks:

Sub Main
   nimi = InputBox("Sisesta oma nimi")
   MsgBox("Tere, " & nimi)
End Sub

Andmetüübid

Muutujatest ja avaldistest rääkides ei saa mööda minna ka andmetüübi mõistest. Nimelt käib Basicus iga muutuja ja avaldise väärtusega kaasas ka tüüp, mis määrab ära, milliseid operatsioone selle väärtusega edasi sooritada saab. Põhilised andmetüübid on täis- ja reaalarvud, tekstid ja tõeväärtused. Arve saab omavahel liita ja lahutada, korrutada ja jagada, samuti saab leida nende logaritme, siinusi, koosinusi jne. Tekste võib omavahel kokku kleepida, samuti saab tekstist eraldada üksikuid tähti või terveid lõike. Põhjalikuma ülevaate nendest võimalustest saab OpenOffice.org abiinfo peatükist Macros and Programming.

Eraldi väärivad väljatoomist spetsiaalfunktsioonid andmete teisendamiseks ühest tüübist teise. Näiteks käsk InputBox tagastab kasutaja sisestatud andmed alati tekstina. Isegi kui kasutaja sisestas arvu, ei saa seda kohe aritmeetilistes tehetes kasutada, vaid see tuleb enne tekstitüübist arvutüübiks teisendada. Selleks sobivad funktsioonid CInt, mis teisendab teksti täisarvuks, ja CDbl, mis teisendab teksti reaalarvuks. Mõlemad funktsioonid katkestavad programmi täitmise veateatega, kui tekst ei ole arvuna tõlgendatav.

Lõpetuseks vaatleme üht näidet, mis kasutab kõiki seni vaadeldud vahendeid (ja lisaks valikulauset, millest teeme lähemalt juttu järgmises numbris), et kasutaja pikkuse ja kaalu järgi arvutada tema kehamassi indeks ja selle põhjal tuvastada, kas kasutaja on üle- või alakaaluline:

Sub Main
   nimi = InputBox("Sisesta oma nimi")
   pikk = CDbl(InputBox("Sisesta oma pikkus (tollides)"))
   kaal = CDbl(InputBox("Sisesta oma kaal (naeltes)"))
   kmi = kaal / (pikk * pikk) * 703
   IF kmi < 18.5 THEN
      MsgBox(nimi & ", oled vist alakaaluline")
   ELSEIF kmi > 30.0 THEN
      MsgBox(nimi & ", oled vist ülekaaluline")
   ELSE
      MsgBox(nimi & ", oled paraskaaluline")
   ENDIF
End Sub

Kodutöö

Tähelepanelik lugeja märkab ilmselt kohe, et see USA tervishoiuameti valemi alusel töötav programm küsib kasutajalt andmeid tollides ja naeltes, mida siinpool Atlandi ookeani eriti ei tunta. Selle vea kõrvaldamine jääbki esimeseks koduseks ülesandeks. Parimatele lahendajatele auhinnad!

 

AUHINNAD paneb välja MAX 123 — DELLi müügi- ja teeninduskeskus. Jaanuarikuu auhinnaks on kvaliteetsed DELLi subwoofer'iga arvutikõlarid. AASTAAUHINNAKS on DELLi sülearvuti.

 

Rubriigi autor AHTO TRUU (1972) on WM-data AS tarkvaraarendaja. Viimased kümme aastat tegelenud lisaks põhitööle informaatikavõistluste korraldamisega nii üldhariduskoolide õpilastele kui ka Tartu Ülikooli tudengitele. Eesti Informaatikaolümpiaadi žürii esimees, mitme rahvusvahelise võistluse žürii liige.

 


 

Siit saate endale laadida programminäited OpenDocument Spreadsheet vormingus. Nende avamiseks kasutage OpenOffice.org versiooni 2.0 või uuemat.

Faili avamisel hoiatab OpenOffice.org, et see sisaldab makrosid, mis võivad teie arvutit kahjustada. Kui te tahate failis olevaid programme ainult vaadata, võite makrode käivitamise keelata (nupp ‘Disable Macros’). Kui aga tahate programme ka käivitada proovida, peate ise otsustama, kas usaldate makrode käivitamist lubada (nupp ‘Enable Macros’) või mitte.

Programmitekstide vaatamiseks valige pärast faili avamist peamenüüst ‘Tools’ → ‘Macros’ → ‘Organize Macros’ → ‘OpenOffice.org Basic’. Avanevas dialoogiaknas valige kastis ‘Macro from’ vastavatud fail, selle all ‘Standard’, selle all omakorda soovitava programmi nimi. Programmi teksti vaatamiseks vajutage seejärel nuppu ‘Edit’, käivitamiseks aga nuppu ‘Run’.