lÜhileksikon - tallinn universitytonu/mathema/basjuh.doc · web viewvt. näiteks ajakirja...

32
Lühike juhend tööks BASIC’us IX peatükk. LÜHIKE JUHEND TÖÖKS BASIC’US SISSEJUHATUS BASIC on programmeerimiskeel, mis töötati välja 1960. aastate keskpaiku Ameerika Ühendriikides. Keele nimi BASIC (ingl. k. basic — põhiline) on tõlgendatav lühendina väljendist Beginners All-purpose Symbolic Instruction Code — algajate üldotstarbeline sümbolkäskude kood. Basic on suhteliselt lihtne programmeerimiskeel, mille abil saab kasutaja suhelda arvutiga dialoogi vormis. Tänu oma lihtsusele ja kasutamismugavusele on Basic muutunud üheks enamkasutatavaks programmeerimiskeeleks maailmas. Basic-keelel on palju erinevaid versioone. Näiteks IBM-ga ühilduvatel arvutitel kasutatakse GWBasicut, Quick-Basicut ja Turbo-Basicut. Need versioonid on kõik üksteisest erinevad. Suured erinevused on ka „Yamahal” kasutatava MSX-Basicu ja „Jukul” kasutatavate keeleversioonide B80 ning JBasicuga. Püüame anda ülevaate Basicu lihtsamatest võimalustest, mis on ühised enamikule Basicu versioonidest. Paraku ei saa me garanteerida, et siin toodud näited ja programmitekstid töötavad suvalisel arvutitüübil mistahes Basicu versioonis. Seetõttu peab kasutaja tegema siin-seal väiksemaid muudatusi. Tuleb arvestada ka näiteks seda, et „Jukul” kasutatav B80 on küll väga sarnane GWBasicuga, kuid selles puudub graafika. Oma käsitluse aluseks oleme võtnud „Microsoft GWBasic’u”, sest selle kohta on lihtsal arvutikasutajal suhteliselt kergem saada eestikeelset lisainformatsiooni. 1 1 Vt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu „spikrit”, millest oleme meiegi üle võtnud oma käsitluse „spikri” osa. 423

Upload: others

Post on 12-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

IX peatükk. LÜHIKE JUHEND TÖÖKS BASIC’US

SISSEJUHATUS

BASIC on programmeerimiskeel, mis töötati välja 1960. aastate keskpaiku Ameerika Ühendriikides. Keele nimi BASIC (ingl. k. basic — põhiline) on tõlgendatav lühendina väljendist Beginners All-purpose Symbolic Instruction Code — algajate üldotstarbeline sümbolkäskude kood.

Basic on suhteliselt lihtne programmeerimiskeel, mille abil saab kasutaja suhelda arvutiga dialoogi vormis. Tänu oma lihtsusele ja kasutamismugavusele on Basic muutunud üheks enamkasutatavaks programmeerimiskeeleks maailmas.

Basic-keelel on palju erinevaid versioone. Näiteks IBM-ga ühilduvatel arvutitel kasutatakse GWBasicut, Quick-Basicut ja Turbo-Basicut. Need versioonid on kõik üksteisest erinevad. Suured erinevused on ka „Yamahal” kasutatava MSX-Basicu ja „Jukul” kasutatavate keeleversioonide B80 ning JBasicuga.

Püüame anda ülevaate Basicu lihtsamatest võimalustest, mis on ühised enamikule Basicu versioonidest. Paraku ei saa me garanteerida, et siin toodud näited ja programmitekstid töötavad suvalisel arvutitüübil mistahes Basicu versioonis. Seetõttu peab kasutaja tegema siin-seal väiksemaid muudatusi. Tuleb arvestada ka näiteks seda, et „Jukul” kasutatav B80 on küll väga sarnane GWBasicuga, kuid selles puudub graafika.

Oma käsitluse aluseks oleme võtnud „Microsoft GWBasic’u”, sest selle kohta on lihtsal arvutikasutajal suhteliselt kergem saada eestikeelset lisainformatsiooni.1

BASIC-KEELE ELEMENDID

Nii nagu muudes keeltes, nii saab ka Basicus moodustada sõnu ja lauseid tähtedest. Basicu „tähestik” on järgmine.

Saab kasutada ladina alfabeedi tähti A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z. Peale nende kasutatakse veel numbreid ja 0 – 9 ja tervet hulka spetsiaalseid sümboleid, näiteks

= — võrdusmärk või omistamismärk

+ — liitmismärk– — lahutamismärk* — korrutamismärk/ — jagamismärk

, — koma’ — ülakoma; — punktkoma (semikoolon): — koolon? — küsimärk% — protsendi märk

( ja ) — sulud. — punkt või kümnendpunkt” — jutumärgid$ — rahaühiku märk (dollar)\ — täisarvulise jagamise märk& — märk „ja”

1 Vt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu „spikrit”, millest oleme meiegi üle võtnud oma käsitluse „spikri” osa.

423

Page 2: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

^ — astendamistehte sümbol

> — märk „suurem kui”< — märk „väiksem kui”

Neid sümboleid kombineerides moodustatakse— laused, millest koostatakse programm,— käsud, mille abil töödeldakse programmi,— andmed, mida programm töötleb.

Andmed, mida Basic-keelne programm töötleb, jagunevad laias laastus kaheks: konstandid ja muutujad. Nii konstandiks kui ka muutujaks võib olla nii tekstilõik (edaspidi nimetame neid ka stringideks) kui ka arv.

Arvandmed võivad olla täisarvulised (näiteks 2; – 5; 9999 jne.) või reaalarvulised (näiteks 3.14; 1.5·106; 98765.43210123). Täisarvud võivad olla esitatud kümnendsüsteemi, kahendsüsteemi, kaheksandsüsteemi ja kuueteistkümnendsüsteemi arvudena. Kahendsüsteemi arvude alguses on tähis &B, kaheksandsüsteemi alguses tähis &O, kuueteistkümnendsüsteemi alguses &H.

Reaalarvud võivad olla esitatud ühekordse täpsusega arvudena (maksimaalselt 7 numbrit) või topelttäpsusega arvudena (maksimaalselt 16 numbrit). Reaalarve võib esitada fikseeritud komaga, s.o. arvudena, milles on määratud, mitu kohta enne koma ja mitu kohta pärast koma peab arvu esituses olema. Näiteks, arvus 234.5678 on kolm kohta enne koma ja neli kohta pärast koma. Arve, mis on standardkujul, nimetatakse ujuvkomaga arvudeks. Näiteks 2,345678·102.

Standardkujulisi arve tähistatakse Basicus järgmiselt.Ühekordse täpsusega arvudel eelneb 10 astmele E täht,

näiteks 1,6·1037 esitatakse Basicus kujul 1,6E + 37.Topelttäpsusega arvudel eelneb 10 astmele D täht,

näiteks 1,2345678·10– 35 esitub Basicus kujul 1.2345678D – 35.

ANDMED

KONSTANDID MUUTUJAD

ARVANDMED TEKSTANDMED

TÄISARVUD REAALARVUD

KÜMNEND-KUJUL

KUUETEIST-KÜMNENDKUJUL

ÜHEKORDSETÄPSUSEGA

TOPELT-TÄPSUSEGA

KAHEND-KUJUL

KAHEKSAND-KUJUL

FIKSEERITUDKOMAGA

UJUVAKOMAGA

424

Page 3: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

KOHESE TÄITMISE REIIM JA PROGRAMMEERIMISE REIIM

Nii nagu tavalises keeles, nii saab ka Basicus anda korraldusi koheseks täitmiseks ja edaspidiseks täitmiseks. Basicus nimetatakse neid tööreiimea) kohese täitmise reiimiks jab) programmeerimise reiimiks.

Programmeerimise reiimi eelis on selles, et korraldus säilib pärast täitmist ja teda saab hiljem korduvalt kasutada.

KOHESE TÄITMISE REIIMKui tahetakse kasutada personaalarvutit kalkulaatorina, siis kasutatakse kohese täitmise reiimi. Toome mõned näited selle kohta.

Kui arvuti on tööks valmis, siis sisestamePRINT 20+5 1 ja vajutame reavahetuse klahvile. Ekraanile ilmub arv 25.SisestadesPRINT ”Kaks korda kaks on ”; 2*2 ning vajutades reavahetusele, saame:Kaks korda kaks on 4.Niiviisi saab teha kõiki aritmeetilisi tehteid ja leida Basicus olemasolevate matemaatiliste funktsioonide väärtusi.Näiteks, rida PRINT SIN(0), COS(0) toob pärast täitmist ekraanile siinuse ja koosinuse väärtused, kui nurk on null.0 1Kohese täitmise reiimi abil saab teha ka keerulisemaid asju — katsetada ja testida valmistehtud programme. Näiteks, võib tuua ekraanile tabeleid. Järgmine rida,FOR I=1 TO 10:PRINT N,N^2,N^3:NEXT N , toob ekraanile järgmise tabeli:1 1 12 4 83 9 274 16 645 25 1256 36 2167 49 3438 64 5129 81 72910 100 1000

Esimeses veerus on arv, teises arvu ruut ning viimases veerus arvu kuup.

PROGRAMMEERIMISE REIIMOn palju ülesandeid, mille lahendamisel tuleb meil täpselt järgida mingit eeskirja. Selle järgimine aitab meil lahendada lihtsamaid võrrandeid ja võrrandisüsteeme, mängida edukalt „trips-traps-trulli” ja panna kokku Rubiku kuubikut. Eeskirju, mis määravad ülesande lahendamiseks vajalikud sammud ning nende sooritamise järjekorra, nimetatakse algoritmideks. Uurime algoritmi, mida kasutatakse ruutvõrrandi reaalarvuliste lahendite leidmiseks personaalarvutil. See algoritm on esitatud plokkskeemi kujul.

1 Eristamaks sisestatavat teksti muust tekstist esitame seda allakriipsutatuna. Eristamaks väljastatavat teksti muust tekstist esitame seda rasvaselt trükituna.

425

Page 4: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

ALGUS

Sisesta ruutvõrrandikordajad a, b ja c

Arvuta diskriminantD = b2 – 4ac

Kasdiskriminant on

negatiivne?

Jah

Ei

Arvuta x1 ja x2

x1 = – b + D2 a x2 = –

b – D2 a;

Väljasta x1 ja x2

Väljasta teade: lahendid puuduvad

LÕPP

Kahjuks ei saa arvuti plokkskeemist aru ja seetõttu tuleb plokkskeem „tõlkida” arvutile arusaadavasse keelde — näiteks Basicusse. Algoritmi esitust mingis arvutile mõistetavas keeles nimetatakse programmiks.

Basicu programm koosneb ridadest, mis algavad üldjuhul reanumbriga. Reanumber peab olema naturaalarv. Reanumber ei saa olla kuitahes suur. Igas Basicu versioonis on olemas maksimaalne reanumber — mõnes versioonis 65 529, mõnes 32 767, mõnes veel väiksem.

Programmi täidetakse reanumbrite kasvamise järjekorras. Juhul kui programmi rida annab suunamise mingile teisele reale (vt. näiteks järgnevas programmis 70-ndat rida: 70 GOTO 90), siis suundutakse sellele reale ja jätkatakse täitmist sealt.

Ühele reale võib märkida ka mitu programmilauset. Kui neid lauseid on mitu, siis peab nende lausete vahel olema lauseeraldaja. Enamikus Basicu versioonides kasutatakse lauseeraldajana koolonit ( : ), mõnes üksikus versioonis aga märki ( \ ).

Ühest programmireast võib toimuda ka hargnemine. Juhul kui mingi tingimus on täidetud, siis suundutakse ühele reale, kui ei ole täidetud, siis hoopis teisele reale. Vaata näiteks järgneva programmi 30-ndat rida: 30 IF D<0 THEN 80 ¬ kui muutuja D väärtus on negatiivne, siis suundutakse 80-le reale, kui D ei ole negatiivne, siis järgmisele reale.

426

Page 5: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

Esitamegi ülaltoodud algoritmi Basicu programmina:

10 INPUT „Sisesta ruutvõrrandi kordajad A, B ja C ”;A,B,C20 D=B^2–4*A*C30 IF D<0 THEN 8040 X1=(–B+SQR(D))/(2*A)50 X2=(–B–SQR(D))/(2*A)60 PRINT X1,X270 GOTO 9080 PRINT „Lahendid puuduvad.”90 END

Pärast selle programmi sisestamist ja käsu RUN abil käivitamist ilmub kuvarile allolev tekst ja arvuti jääb ootama ruutvõrrandi kordajate sisestamist.

Sisesta ruutvõrrandi kordajad A, B, C?

NB! Kordajad tuleb sisestada ühe reana, arvude vahele tuleb panna märk „ , ” — tekstikoma. Juhul kui kordajad ei ole täisarvud, siis tuleb kasutada arvu keskel punkti „ . ” — arvukoma. Ruutliikme kordaja A väärtuseks ei tohi sisestada nulli. Miks?

Selles reas arvutatakse avaldise B2 – 4AC väärtus ja omistatakse see muutujale D.

Selles reas kontrollitakse, kas diskriminant on negatiivne. Kui on, siis siirdutakse reale 80, kui ei ole, siis reale 40.

Arvutatakse välja üks ruutvõrrandi lahend, selle väärtus omistatakse muutujale X1.

Arvutatakse välja teine ruutvõrrandi lahend, selle väärtus omistatakse muutujale X2.

Väljastatakse kuvarile saadud ruutvõrrandi lahendid.

Siirdutakse programmi lõppu.

Väljastatakse teade „Lahendid puuduvad.”

Programmi lõpp

rida 10

rida 20

rida 30

rida 40

rida 50

rida 60rida 70rida 80rida 90

427

Page 6: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

ARVMUUTUJAD JA TEKSTMUUTUJADArvmuutujat tähistatakse tavaliselt ühe ladina alfabeedi tähega, mille juurde võib kuuluda ka üksik number.1

Näiteks D, K, X1, N7.Juhul, kui arvmuutuja esitab täisarvu, on ta järel märk %, kui reaalarvu, siis võib kasutada (ei pea kasutama!) märki !, kui topelttäpsusega reaalarvu, siis on ta järel märk #.

Tekstmuutujat tähistatakse tavaliselt ühe ladina tähestiku tähega. Tekstmuutuja tähisele järgneb alati märk „$”. Tekstmuutujad on näiteks A$, Q$, C1$, Y3$.

Juhul kui muutuja algab tähtedega FN, siis loetakse teda kasutaja poolt defineeritud funkt -siooniks.MASSIIVID

Kui meil on suurem hulk ühetüübilisi andmeid, näiteks õpilaste nimed ja iga õpilase hinded, siis juhul, kui me tahame neid kõiki muutujatega tähistada, läheb tarvis väga palju erinevaid muutujaid. Mõistlik oleks suure hulga tähiste kasutamise asemel neid ühte tüüpi andmeid tähistada ühte moodi teatud tervikutena (massiividena) ja hoida neid nii ka arvuti mälus. Selliseid andmetervikuid kutsuvad programmeerijad tavaliselt massiivideks.2

Massiiv koosneb massiivi elementidest, millest igaühel on selles massiivis fikseeritud kindel koht.

Massiive tähistatakse sarnaselt muutujatega. Erinevus muutujatest on selles, et tähisele järg -nevad sulud ning sulu sees on naturaalarv või muutuja naturaalarvuline väärtus.

Tuleb teha vahet mingi massiivi elemendi ja muutuja väärtuste vahel. Näiteks, K$(1) tähistab ühe tekstimassiivi esimest elementi, K1$ aga üht tekstmuutujat, millel võib olla hoopis muu väärtus. Täpselt samuti võib öelda, et Z5 ¹ Z(5). Esimene neist on arvmuutuja, teine aga arvu-massiivi viies element.

Olgu näiteks järgmine andmehulk — kuude nimed ja nende pikkused:Jaanuar, 31Veebruar, 28Märts, 31 . . .Detsember, 31.

Mõistlik oleks need andmed esitada kahe massiivina. Ühes massiivis (tähistame K$( ) ) on kuude nimetused, teises massiivis (tähistame P( ) ) vastavate kuude pikkused päevades. Piltlikult võiks seda olukorda kujutada järgmiselt:

K$(1) K$(2) K$(3) . . . K$(11) K$(12)

Jaanuar Veebruar Märts . . . November Detsember

P$(1) P$(2) P$(3) . . . P$(11) P$(12)

31 28 31 . . . 30 31

1 Paljudes uuemates Basicu versioonides võib nii arvmuutujat kui ka tekstmuutujat tähistada hoopis pikema tekstilõiguga. Sellise tekstilõigu pikkus võib olla kuni 40 märki; neist esimene peab olema täht, mitte aga arv.

2 Ühemõõtmelist massiivi kutsutakse vahel ka vektoriks (vt. aritmeetilise vektori kirjeldust selle raamatu punktis 6.10.) ja järjendiks. Kahemõõtmelist massiivi kutsutakse vahel ka maatriksiks.

428

Page 7: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

Näiteks massiivi K$( ) seitsmes element on „Juuli”, massiivi P( ) üheksas element on päevade arv septembris, s.o. 30.

Kui ühes massiivis on üle üheteistkümne (mõnes Basicu versioonis üle 10) elemendi, siis tuleb selleks, et seda massiivi kasutada, eraldada arvuti mälus ruumi. Mälu eraldamiseks massiivile on Basicus lause DIM.

Basicus saab kasutada ka kahemõõtmelisi massiive. Neid läheb vaja tabelite ülesmärkimiseks.

TEHTED ARVUDEGA

Avaldis, mille väärtust arvutatakse, võib sisaldada muutujaid, konstante ning tehete sümboleid. Basicus kasutatakse järgmisi tehteid:

+ ¬ liitmine näiteks 2+3 on 5.– ¬ lahutamine näiteks 3–2 on 1.* ¬ korrutamine näiteks 2*3 on 6./ ¬ jagamine näiteks 2/3 on .6666667.^ ¬ astendamine näiteks 3^2 on 9.\ ¬ täisarvuline jagamine (leiab näiteks 17\5 on 3.

kahe täisarvu jagatise täisosa)MOD ¬ modulo (leiab jagamisel näiteks 17 MOD 5 on 2.

tekkiva jäägi)Mõnes algelisemas Basicus kahte viimast tehet ei ole.Kui ühes avaldises kasutatakse mitut aritmeetikatehet, siis kehtivad seniõpitud tehte

järjekorra reeglid. Seega, kõigepealt tehted sulgudes, seejärel astendamised, siis korrutamised ja jagamised. Nende järel tehakse täisarvulised jagamised ja jäägi leidmised ning kõige lõpuks liitmised ja lahutamised. Näiteks

Avaldis Samm Tehe Tulemus

A+B*C/D^E 1234

D^EB*C

R1/R2A+R3

R1R2R3R4

(A+B)*C/D^E 1234

A+BD^ET1*CT3/T2

T1T2T3T4

Pea meeles, et kahte tehet ei tohi märkida vahetult teineteise kõrvale. Näiteks X*–Y. Õige oleks X*(–Y).

Korrutustehte märk tuleb märkida alati. Näiteks A(B+1) esitatakse Basicus kujul A*(B+1). Miks?

TEHTED TEKSTILÕIKUDEGAOn üksainus tehe — kahe tekstilõigu liitmine, mida tähistatakse „ + ” märgiga. Olgu näiteks kaks tekstilõiku X$=”SABA ” ja Y$=”KASSI”.

Siis X$+Y$=”SABA KASSI”, aga Y$+X$=”KASSISABA ”.

429

Page 8: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

VÕRDLUSTEHTEDVõrdlustehteid saab kasutada kahe arvavaldise või kahe tekstilõigu omavaheliseks võrdlemiseks. Basicus kasutatakse järgmisi võrdlustehteid:

Tehe Tähendus= on võrdne<> pole võrdne< on väiksem kui > on suurem kui <= on väiksem või

võrdne>= on suurem või võrdne

Võrdlustehteid kasutatakse tihti konstruktsiooni IF...THEN juures.Et tekstilõikude võrdlemine on arvavaldiste võrdlemise kõrval vähemtuntud asi, siis peatume

sellel pikemalt. Tekstilõike on vaja võrrelda näiteks siis, kui me peame panema mõne nimekirja alfabeetilisse järjekorda.

Arvutil on olemas teatud kooditabel, nn. ASCII tabel. Selles tabelis on kõigi kasutatavate sümbolite koodid. Kui mingit kahte sümbolit võrreldakse omavahel, siis tegelikult võrreldakse nende sümbolite koode.

Arvude 0 – 9 koodid on 48 kuni 57. Tähestiku suurtähtede koodid algavad tähega A (65) ja lõpevad tähega Z (90). Väiketähed algavad tähega a (92) ja lõpevad tähega z (122). Tähed on kooditabelis üldiselt alfabeetilises järjekorras, välja arvatud mõned eesti tähestiku „katusega” tähed (õ, ä, ö, ü, š, ). Neid tähti igas kooditabelis ei ole, seetõttu võib juhtuda, et teie arvuti ja printeriga neid tähti kasutada ei saa. Ka võib tekkida probleeme järjestamisega, sest nad ei paikne kooditabelis täpselt selles järjekorras nagu eesti tähestikus.

Tekstilõike võrreldakse sarnaselt nende alfabeetilise järjestamisega. Olgu meil kaks tekstilõiku ”MARGOT” ja ”MARGIT”. Esimesed neli sümbolit on neis tekstilõikudes samad, seega võrdleme viiendaid. Et O täht on tähest I alfabeedis tagapool, siis O kood on suurem kui I kood ja ”O”>”I”. Seega ka ”MARGOT”>”MARGIT”.Kui meil on kaks tekstilõiku ”Pat” ja ”Patasson”, siis kehtib võrratus ”Pat”<”Patasson”.

Kui meil on kaks tekstilõiku, näiteks ”JAAK” ja ”JAAK ”, siis neli esimest sümbolit neis tekstilõikudes on võrdsed. Et teises tekstilõigus on veel üks sümbol — tühik, siis on teine teksti -lõik suurem. Seega, ”JAAK”<”JAAK ”.

LOOGIKATEHTED

Selleks, et võrrelda keerukamaid avaldisi ja kontrollida üheaegselt mitmeid võrdusi ja võrratusi, kasutatakse loogikatehteid. Tihti läheb loogikatehteid vaja lauset IF...THEN...ELSE kasutades. Avaldistele, lausetele ja tingimustele, mis sisaldavad loogikatehteid, on omistatud tõeväärtus. Tõese lause tõeväärtus on 1 ja väära lause tõeväärtus on 0.

Basicus kasutatavad loogikatehted on järgmised:

NOT (NOT — ingl. k. ei, mitte) — loogiline eitus.AND (AND — ingl. k. ja) — loogiline korrutamistehe.OR (OR — ingl. k. või) — loogiline liitmistehe e. mittevälistav või.XOR (eXclusive OR — ingl. k. välistav või) — välistav või.EQV (EQuiValence — ingl. k. ekvivalentsus e. samaväärsus) — loogiline ekvivalentsus e.

samaväärsus.

430

Page 9: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

IMP (IMPlication — ingl. k. järelduvus) — implikatsioon e. loogiline järelduvus.

Järgnevas kirjeldaksime neid veidi põhjalikumalt.

NOT — loogikatehe, mida rakendatakse ainult ühele avaldisele. NOT-tehe muudab avaldise väärtuse vastupidiseks. Kui avaldis X on tõene, siis avaldis NOT X on väär. Kui avaldis X on väär, siis avaldis NOT X on tõene. Seda tõsiasja illustreerib ka järgmine tabel:

X NOT X10

01

AND — loogikatehe, mida rakendatakse kahele avaldisele. AND-tehte tulemus on tõene siis ja ainult siis, kui mõlemad avaldised on tõesed. AND-tehte tulemust illustreerib järgmine tabel:

X Y X AND Y1100

1010

1000

AND-tehet nimetatakse ka loogiliseks korrutamiseks — viimase tabeli kolmandas veerus olevad arvud on saadavad esimese ja teise veeru vastavate arvude korrutamise teel.

OR — loogikatehe, mida rakendatakse kahele avaldisele. Seda „mittevälistavat võid” võib lahti mõtestada järgmiselt — „Kas üks või teine või mõlemad”. OR-tehte tulemus on väär parajasti siis, kui mõlemad avaldised, mida ta ühendab, on väärad. OR-tehte tulemust illustreerib järgmine tabel:

X Y X OR Y1100

1010

1110

XOR — loogikatehe, mida rakendatakse kahele avaldisele. Seda „välistavat võid” võib lahti mõtestada järgmiselt — „Üks või teine, kuid mitte mõlemad”. XOR-tehe annab tulemuseks tõese, kui mõlemate avaldiste tõeväärtused on erinevad; väära, kui nende tõeväärtused on ühesugused. XOR-tehte tulemust illustreerib järgmine tabel.

X Y X XOR Y1100

1010

0110

EQV — ekvivalents e. samaväärsus. See on kahele avaldisele rakendatav loogikatehe, mis on tõene parajasti siis, kui avaldised X ja Y on mõlemad tõesed või mõlemad väärad. EQV-tehte tulemust illustreerib järgmine tabel:

X Y X EQV Y1100

1010

1001

431

Page 10: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

IMP — implikatsioon e. loogiline järelduvus on kahele avaldisele rakendatav loogikatehe. Kirjaviisi X IMP Y võib lahti mõtestada nii: „Kui X, siis Y”. Implikatsioon on väär ainult siis, kui esimene lause on tõene, teine aga väär. Kõigil ülejäänud juhtumitel on implikatsioon tõene. Seda võib illustreerida järgmise tabeliga:

X Y X IMP Y1100

1010

1011

Kui lauses on aritmeetikatehteid, võrdlustehteid ja loogikatehteid, siis tehakse kõigepealt ära aritmeetikatehted, seejärel võrdlustehted ja lõpuks loogikatehted. Kui Basic-programmi lauses kasutatakse mitut loogikatehet, siis tehakse neid tehteid samas järjekorras, milles tutvustas neid teile ülaltoodud lühikirjeldus.

BASICU LAUSED PRINT. END. LET. REM

Lause PRINT esitab tekst- ja arvandmeid ekraanil.Lause END lõpetab programmi töö. END-lause reanumber on tavaliselt kõige suurem

reanumber antud programmis. END-lauset kasutatakse üldjuhul programmis üksainus kord.Näide 1.10 PRINT ”Ameerika avastati 1492. aastal”20 PRINT 1968–1492;” aastat hiljem jõudis inimene Kuu pinnale”30 PRINT ”Ühes aastas on keskmiselt”;40 PRINT 365.25*24*60*60;” sekundit.”50 END

Pärast käivitamist ilmuvad kuvarile järgmised read:

Ameerika avastati 1492. aastal476 aastat hiljem jõudis inimene Kuu pinnaleÜhes aastas on keskmiselt 3.15576E+07 sekundit.

LET (ingl. k. — olgu) lause abil omistatakse tekst- ja arvmuutujaile väärtusi.

NäiteksLET A=5 ¬ Annab muutujale A väärtuseks 5.LET B$=”Maakera on ümmargune” ¬ Annab tekstmuutujale B$ väärtuseks

jutumärkide vahel oleva teksti.

LET X=–P/2+SQR(P^2/4–Q) ¬ Annab muutujale X väärtuseks X = p p q2 4

2.

LET D$(5)=”REEDE” ¬ Tekstimassiivi D$() viies element saab väärtuseks REEDE.LET Y=Z4 ¬ Muutujale Y omistatakse muutuja Z4 väärtus.LET N=N+1 ¬ Muutuja N väärtust suurendatakse ühe võrra.

Näiteks järgmine programm teatab pärast käivitamist: Pindala on 42.

10 LET A=620 LET B=730 LET S=A*B

432

Page 11: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

40 LET E$=”Pindala on ”50 PRINT E$;S60 END

Pea meeles, et võrdusmärki mõistetakse LET-lauses kui omistamismärki. Omistamismärgist paremal pool oleva avaldise väärtus omistatakse sellest märgist vasakul olevale muutujale. Näiteks Basicus on korrektne lause LET B4=C. Lause LET B–4=C ei ole korrektne.

LET-lause omapäraks on see, et enamikus Basicu versioonides võib LET-i ära jätta, kuid säilitada omistamine. Seega näiteks lause A=5 on samane lausega LET A=5.

PRINT-käsu üldine kuju on järgmine:PRINT x1 eraldaja x2 eraldaja x3 . . . xi eraldaja,kus x1, x2, x3, . . . , xi on ekraanile toodavad tekstilõigud või muutujate väärtused ja eraldajaks nende vahel on semikoolon või koma.

Kui eraldajaks on semikoolon, siis trükitakse järgmine andmetervik vahetult eelmise järele. Kui eraldajaks on koma, siis trükitakse järgmine andmetervik eelmise järele esimesse vabasse tabulatsioonipositsiooni.

Kui PRINT-lause lõpeb semikooloniga, siis alustatakse järgmise PRINT-lausega sealt, kus eelmise PRINT-lausega lõpetati. Kui PRINT-lause lõpeb komaga, siis jätkatakse järgmise PRINT-lausega esimeselt vabalt tabulatsioonipositsioonilt. Kui PRINT-lause lõpeb ilma semikooloni või komata, siis trükitakse järgmine lause alates järgmise rea algusest.

Tihti kasutatakse PRINT-lauset koos funktsiooniga TAB. Selle funktsiooni abil saab alustada väljastust antud reas alates veerust, mis on märgitud TAB-i järele sulgudesse. Seal võib olla arv0 . . . 79.Näide

10 A=6:B=4:C=2020 D=A*B/C30 PRINT A,B,C,D,B-C40 PRINT A;B;C;D50 PRINT60 PRINT A,A,A,A,A,A,A70 PRINT80 PRINT B*C,”Ikka samal real”,90 PRINT (B*C)^A100 X$=”Seda lauset korratakse,”110 LET Y$=X$120 PRINT ”012345678901234567890123456789012345678901234567890”130 PRINT TAB(C);”TERE!”;TAB(36);A*C140 PRINT Y$;X$150 END

Pärast programmi käivitamist saame järgmise tulemuse:rea number

6 4 20 1.2 -16 306 4 20 1.2 40

506 6 6 6 6 606 6 60

7080 Ikka samal real 2.62144E+11 80 90012345678901234567890123456789012345678901234567890 120

433

Page 12: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

TERE! 120 130Seda lauset korratakse,Seda lauset korratakse, 140

Read 30 ja 40 näitavad, mille poolest erineb koma ja punktkoma kasutamine. Read 50 ja 70 väljastavad tühja rea. Rida 60 trükitakse kahele reale, sest tabulatsioonipositsioone oli vaja rohkem kui on ekraanireas. Et rida 80 lõpeb komaga, siis trükitakse järgnev rida eelneva lõppu. 130. programmirida väljastab alates 20. veerust teksti „TERE!” ja alates 36. veerust arvude A ja C korrutise.

Lause LPRINT kasutamine on sarnane PRINT-lause kasutamisega, ainult et tulemused väljastatakse ekraani asemel printerile.

REM-lauset kasutatakse kommentaaride kirjutamiseks programmi juurde.REM on lühend sõnast REMARK, mis tähendab inglise keeles kommentaari.REM-lause pole mõeldud arvutile, sest arvuti seda lauset ei täida. REM-lauset kasutatakse selleks, et arvutikasutajal oleks hõlpsam programmi lugeda.

Varemtoodud programmile, mis lahendas ruutvõrrandeid, oleks võinud juurde kirjutada järgmised kommentaarid:

5 REM === Programm lahendab ruutvõrrandeid === 8 REM === A,B ja C sisestage komadega eraldatult, kusjuures a<>0.18 REM && D — diskriminant &&35 REM *Kui on kaks erinevat lahendit*85 REM %Kui lahendid puuduvad%

REM-lausega saab programmi kommenteerida nii, et kommentaar moodustab ühe omaette seisva Basicu lause. Kui see lause on mõne teise Basicu lausega ühel real, siis tuleb see lause eraldada käsueraldajaga. REM-lause asemel saab programmi kommenteerida ka märgi ’ (ülakoma) abil. Ülakomaga alustatud kommentaar ei ole iseseisev lause ja seda ei pea käsueraldajaga eraldama.LAUSED INPUT GOTO IF . . . THEN . . . ELSEINPUT-lause loeb klaviatuurilt sisestatavaid andmeid. Näiteks, lause INPUT A trükib kuvarile küsimärgi ja jääb ootama arvu väärtuse sisestamist. Lause INPUT A$ trükib samuti ekraanile küsimärgi ja jääb ootama tekstmuutuja A$ väärtuse sisestamist.

Enamikus Basicu versioonides saab INPUT-lausega trükkida kuvarile ka teksti. Näiteks, lause INPUT ”Sisesta vanus ”;V trükib ekraanile teksti ja Sisesta vanus ? ja jääb ootama arvmuutujale V väärtuse sisestamist.

Ühe INPUT-lausega võib sisestada ka mitme muutuja väärtused, aga need väärtused tuleb eraldada komadega.

INPUT ”Teata nimi, sugu (M/N) ja vanus”;A$,B$,CSelle lause täitmise tulemusena omistatakse muutujale A$ isiku nimi, muutujale B$ tema sugu, muutujale C vanus.NB! Pea meeles, et tekstmuutuja väärtuseks võib olla ka arv. Arvmuutuja väärtuseks aga tekstilõik olla ei saa. Juhul kui INPUT-lauses eeldatakse arvu sisestamist, aga programmi kasutaja sisestab teksti, siis mõnedes Basicu versioonides ilmub ekraanile teade:Redo from start?Siis saab selle vea parandada ja korrata sisestust.

GOTO-lause üldkuju on järgmine: GOTO reanumber.Näiteks lause GOTO 100 suunab programmi täitmise reale 100.

434

Page 13: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

NB! Kui me kasutame lauset GOTO programmis, siis peab see reanumber, millele GOTO suunab, olema programmis kasutatud.

Selle näitamiseks, kuidas töötab IF...THEN...ELSE toome järgmise programmilõigu:

10 REM &&& Skunksi müümine &&&20 Y$=”See on Sinust väga ilus, aga tead, mul on üks veel”30 N$=”Kõik ütlevad, et ei osta”40 INPUT ”Osta skunks ära ”;A$60 IF A$=”ostan küll” THEN PRINT Y$ ELSE PRINT N$70 GOTO 4080 END

Pärast seda, kui oled selle programmi käivitanud, näed, et sel programmil on mitu puudust. Esimeseks puuduseks on see, et arvuti loeb kõik muud vastused peale ”ostan küll” keeldu-miseks (sealhulgas ka vastused ”ostanküll” ja ”Ostan küll”). Teiseks puuduseks on see, et see programm jääbki neid skunkse müüma, s.t. tal ei ole lõppu. Viimasest puudusest vabanemiseks võime lisada programmile rea50 IF A$=”mine metsa!” THEN 80Kuigi see rida sisestatakse pärast 80. rea sisestamist, on ta tegelik koht 40-nda ja 60-nda rea vahel.

IF...THEN...ELSE lause üldkuju on järgmine:IF tingimus THEN esimene avaldis või esimene reanr ELSE teine avaldis või teine reanr.Lause täitmine toimub järgmiselt:Kui tingimus on tõene, siis täidetakse esimene avaldis või suundutakse esimese reanumbriga märgitud reale; kui tingimus on väär, siis täidetakse teine avaldis või suundutakse teisena märgitud reale.

Mõnes Basicu versioonis ei saa lauseosa ELSE kasutada. Seal siirdutakse juhul, kui tingimus on täitmata, järgmisele reale.

Vahel kasutatakse lause IF...THEN kõrval ka lauset IF...GOTO. Siis on lause üldkuju IF tingimus GOTO reanumber.FOR . . . TO . . . STEP . . . NEXT

Toome kõigepealt ära kaks programmi, mis leiavad paarisarvude 2 kuni 100 summa.

10 REM Paarisarvude 2—100 summa20 REM S—summa; N—järgmine arv30 N=N+240 S=S+N50 IF N<100 THEN 3060 PRINT ”Summa on ”;S70 END

10 REM Paarisarvude 2—100 summa20 REM30 FOR I=2 TO 100 STEP 240 S=S+N50 NEXT N60 PRINT ”Summa on ”;S70 END

Need programmid annavad ühe ja sama tulemuse, kuid parempoolne on ülevaatlikum ja ka kergemini loetav.FOR ja NEXT on lausete paar, mille abil koostatakse tsükleid. Tsükkel on FOR-lause ja NEXT-lause vaheline osa, mida täidetakse korduvalt.FOR-lausest algab tsükkel ja see lause näitab, mitu korda tuleb seda tsüklit täita. NEXT-lause lõpetab tsükli ja kontrollib, mitu korda on tsüklit täidetud.FOR-lause üldkuju on järgmine:FOR M=A TO L STEP S,kus M on tsükli muutuja,

435

Page 14: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

A on selle muutuja algväärtus, L on selle muutuja lõppväärtus ja S on selle tsükli muutuja muutumise samm.

Juhul, kui sammu ei ole märgitud, loetakse ta võrdseks 1-ga.

NEXT-lause üldkuju on järgmine:NEXT M ,kus M on tsükli muutuja.NEXT-lause kontrollib, kas M on võrdne L-ga. Kui pole, siis lisab ta M-le sammu S juurde ja suunab järgmise käsu juurde pärast FOR-lauset. Kui M=L, siis NEXT annab juhtimise üle järgmisele lausele pärast NEXT-lauset.

FOR...NEXT tsükli kasutamisoskust läheb vaja väga paljudes kohtades. Üheks neist on kõikvõimalike tabelite väljatrükk. Näiteks, järgmine programm trükib välja arvud, nende arvude ruudud, kuubid ja ruutjuured.

10 INPUT ”Millest”;A20 INPUT ”Milleni”;B30 INPUT ”Millise sammuga”;N40 FOR S=A TO B STEP N50 PRINT S,S^2,S^3,SQR(S)60 NEXT S70 END

Ühe FOR...NEXT tsükli võib panna teise FOR...NEXT tsükli sisse, kuid siin peab arvestama, et sisemine tsükkel peab paiknema täielikult välimise sees.

FOR I=1 TO NFOR K=1 TO MNEXT KNEXT I Õige kasutusviis

FOR I=1 TO NFOR K=1 TO MNEXT INEXT K Väär kasutusviis

Kahekordse FOR...NEXT näiteks toome programmi, mis „sõelub välja” nn. Pythagorase kolmikuid.Pythagorase kolmikud on sellised täisarvud A, B ja C, mille korral kehtib võrdus C 2 = A2 + B2.10 PRINT ”Pythagorase kolmikud”20 FOR A=1 TO 9930 FOR B=A TO 9940 C=SQR(A^2+B^2)50 IF C=INT(C) THEN PRINT A,B,C60 NEXT B70 NEXT A80 END

Reas 40 leitakse C kui ruutjuur arvude A ja B summast.Reas 50 kontrollitakse, kas arv C on võrdne oma täisosaga (kui on, siis on C täisarv); selleks kasutatakse funktsiooni INT, mis aitab leida täisosa.Mida teeb järgmine programm?

10 PRINT ”1X1”20 FOR X=1 TO 1030 FOR Y=1 TO 1040 PRINT TAB(5*Y);X*Y;50 NEXT Y

436

Page 15: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

60 NEXT X70 END

FUNKTSIOONID BASICUS

Basicus saab kasutada tervet hulka standardiseeritud funktsioone. Funktsioon ei ole lause, seda saab aga kasutada lause osana.

Funktsiooni argument on funktsiooni nime järel sulgude sees. Argumendiks võib olla arv, muutuja või avaldis. Avaldis võib omakorda sisaldada funktsioone, näiteks

10 INPUT X20 PRINT X,SIN(X), COS(X),TAN(X),1/TAN(X)30 PRINT SIN(SQR(X)+1)

See programm trükib ekraanile arvu, tema siinuse, koosinuse, tangensi ja tangensi pöördväärtuse (kootangensi). Teisele reale trükib programm siinuse arvu X ruutjuurest, millele on liidetud 1.

Funktsioonid jagunevad kaheks. Ühed funktsioonid on mõeldud tööks arvandmetega, teised tööks tekstandmetega.

Funktsioon ABS(X) leiab arvu X absoluutväärtuse.Funktsioon INT(X)annab suurima täisarvu, mis ei ole suurem X-st.Funktsioon FIX(X) annab arvu X täisosa.Funktsioon SGN(X) annab arvu X märgi.Funktsioon RND (mõnes versioonis RND(X)) annab juhuarvu vahemikus 0 . . . 1.Funktsioon RANDOMIZE paneb juhuarvude generaatori juhuslikku seisu.Funktsioon SIN(X) leiab arvu X siinuse.Funktsioon COS(X) leiab arvu X koosinuse.Funktsioon TAN(X) leiab arvu X tangensi.Funktsioon ATN(X) leiab arvu X arkustangensi. Väärtus on radiaanides, vahemikus

2 2

; .

Funktsioon EXP(X) leiab arvu e (e » 2.71828 . . . ) X-nda astme.Funktsioon LOG(X) leiab arvu X naturaallogaritmi. X peab olema positiivne.Funktsioon SQR(X) leiab arvu X ruutjuure. X ei tohi olla negatiivne.

Vajaduse korral saab kasutaja ise luua funktsioone juurde. Need funktsioonid võivad olla nii ühe muutuja funktsioonid kui ka mitme muutuja funktsioonid. Selleks, et programmis mõnd isetehtud funktsiooni kasutada, tuleb kõigepealt see funktsioon defineerida.Funktsiooni defineerimiseks on lause DEF FN.Näiteks defineerime kolme muutujaga funktsiooni, mis arvutab välja ühe ruutvõrrandi lahenditest:DEF FNX1(A,B,C)=(-B+SQR(B*B-4*A*C))/(2*A)Kui funktsioon on defineeritud, siis pärast defineerimist saab seda funktsiooni kasutada kuitahes palju kordi.

Toome veel mõned näited defineeritud funktsioonide kohta:

FNR(X)=(X/180)*3.141593 — teisendab kraadid radiaanideks.FNU(X,N)=INT(X*10^N+.5)/10^N — ümardab arvu X N kohta koma järel.

X peab olema esitatud radiaanides.

437

Page 16: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

FNT(A,L)=A+INT(RND(X)*(L–A+1)) — genereerib juhuarvud alates arvust A (algus) kuni arvuni L (lõpp) sammuga 1.

FNT(A,L,S)=A+S*INT(RND(X)*((L–A)/S+1)) — genereerib juhuarvud alates arvust A (algus) kuni arvuni L (lõpp) sammuga S.

FNW(A,B)=((A+B)–ABS(A–B))/2 — leiab kahest sisestatud arvust A ja B minimaalse.FNW(A,B)=((A+B)+ABS(A–B))/2 — leiab kahest sisestatud arvust A ja B maksimaalse.FNC(X)=1/TAN(X) — leiab arvu X kootangensi.FNA(X)=ATN(X/SQR(1–X*X)) — leiab arkustangensi abil arkussiinuse.FNJ(L,N)=L–N*INT(L/N) — leiab jäägi (nn. moodulifunktsioon); L — lugeja, N — nimetaja.

Juhuslike arvude generaator annab tegelikult pseudojuhuslikke arve. Lause RANDOMIZE toob ekraanile küsimuseRandom number seed (–32768 to 32767)?Sellele küsimusele vastuseks tuleb sisestada mingi arv sellest vahemikust.

Järgmine programm trükib välja 5 pseudojuhuslikku arvu vahemikust 0 – 1.10 RANDOMIZE20 FOR S=1 TO 530 A=RND40 PRINT A50 NEXT S60 END

Käivitame selle programmi ja RANDOMIZE poolt esitatavale küsimusele vastame: 100.Random number seed (–32768 to 32767)? 100.6421716.2260541.6738085.9198399.8513622

Järgmine programm trükib välja 15 juhuslikku täisarvu ühest kuni kuueni.10 PRINT ”Täringu visete simulatsioon”20 PRINT30 REM Tsükkel 15 viske jaoks40 FOR K=1 TO 1550 A=INT(RND*6)+160 PRINT A;70 NEXT K80 END

Pärast käivitamist saame 15 juhuslikku arvu vahemikus 1 – 6:

3 5 3 4 1 1 6 2 2 5 3 3 1 3 6TEKSTIFUNKTSIOONIDESTBasicus on terve hulk tekstifunktsioone, enamkasutatavad neist on järgmised:LEN(A$) ¬ Leiab tekstilõigu A$ pikkuse, näiteks LEN(”Tekst”)=5.LEFT$(A$,n) ¬ Leiab n vasakpoolset märki tekstilõigust A$. Näiteks LEFT$(”MIKU

JA MANNI”,7) on ”MIKU JA”.RIGHT$(A$,n) ¬ Leiab n parempoolset märki tekstilõigust A$. Näiteks RIGHT$(”MIKU

JA MANNI”,5) on ”MANNI”.

438

Page 17: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

MID$(A$,m,n) ¬ Leiab tekstilõigust A$ osa, mis algab m-ndast sümbolist ja on n-sümboli pikkune. Näiteks MID$(”MIKU JA MANNI”,7,5) on ”A MAN”.

INSTR(k,A$,B$) ¬ Leiab, mitmendal kohal on tekstilõigu B$ algus tekstilõigus A$, alates kohast k. Näiteks INSTR(”MIKU JA MANNI”,”JA”) on 6, ja INSTR(4,”MIKU JA MANNI”,”JA”) on 6, aga INSTR(7,”MIKU JA MANNI”,”JA”) on 0.

VAL(A$) ¬ Leiab numbritest koosneva tekstilõigu arvväärtuse. Näiteks VAL(”57”) on arv 57.

Järgmine programm teisendab ingliskeelseid nimisõnu ainsusest mitmusesse:10 INPUT W$20 IF RIGHT(W$,1)<>”Y” THEN P$=W$+”S”:GOTO 5030 L=LEN(W$)40 P$=LEFT$(W$,L-1)+”IES”50 PRINT ”The Plural of ”;W$;” is ”;P$60 ENDNäiteks, sisestades sõnad WORD ja STORY, saame? WORDThe Plural of WORD is WORDS? STORYThe Plural of STORY is STORIES

Järgmine programm leiab, mitu korda esineb otsitav täht antud tekstilõigus:10 INPUT ”Sisesta tekstilõik”;A$20 INPUT ”Sisesta otsitav täht”;B$30 FOR R=1 TO LEN(A$)40 IF MID$(A$,R,1)=B$ THEN S=S+150 NEXT R60 PRINT ”Täht ”;B$;” esines tekstilõigus ”;S;” korda.”70 ENDPärast programmi käivitamist saame näiteks:Sisesta tekstilõik? MUSTA LEHMA SABA VALGE LEHMA TAGA...Sisesta täht? ATäht A esines tekstilõigus 8 korda.Järgmine programmilõik koostab sisestatud tekstilõigu A$ abil tekstilõigu B$, mis koosneb samadest tähtedest vastupidises järjekorras. Juhul, kui saame sama tekstilõigu tagasi, teatab programm, et tegu on palindroomiga.1

10 INPUT ”PALUN SISESTA TEKSTILÕIK”;A$20 FOR I=LEN(A$) TO 1 STEP -130 B$=B$+MID(A$,I,1)40 NEXT I50 IF A$=B$ THEN PRINT A$;” ON PALINDROOM”60 IF A$<>B$ THEN PRINT A$;” JA ”;B$;” EI OLE PALINDROOMID”70 END

Pärast selle programmi kävitamist võime saada näiteks järgmisi tulemusi:

PALUN SISESTA TEKSTILÕIK? AIAS SADAS SAIAAIAS SADAS SAIA ON PALINDROOM

1 NB! Selle programmi abil saab leida ainult neid palindroome, mis annavad ümberpööratud järjestuses täpselt sama teksti. Näiteks sõnad LAMMAS ja SAMMAL on palindroomid, aga nii lihtsale programmile käib selle kindlakstegemine üle jõu.

439

Page 18: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

või

PALUN SISESTA TEKSTILÕIK? MISSISSIPIMISSISSIPI JA IPISSISSIM EI OLE PALINDROOMID

DIM-LAUSE

Kui tahame mingit massiivi kasutada, siis tuleb selle massiivi jaoks eraldada arvuti mälus ruumi.

DIM-lausele järgnevad kasutatavate massiivide nimed. Iga massiivi järel on sulgudes kirjas selle massiivi suurus.

Näiteks lause DIM A(100),B(30,40) eraldab mälus ruumi kahele massiivile, neist massiiv A() on ühemõõtmeline massiiv, milles on 100 elementi, B( , ) on aga kahemõõtmeline massiiv, milles on 30 ´ 40 elementi.

Lause DIM A$(40),F(N) eraldab mälus ruumi samuti kahele massiivile, neist A$() on tekstimassiiv, milles on ruumi 40 tekstilõigule. F() aga arvumassiiv, milles on ruumi N arvule.Mõnedes Basicu versioonides on massiivi esimese elemendi järjekorranumber null, mõnedes üks.

Järgmine programm simuleerib 600 täringuviset. Massiivi C() kasutatakse selleks, et üles märkida seda, mitu korda on esile tulnud mingi number.

10 DIM C(6)20 FOR P=1 TO 60030 A=INT(RND(1)*6+1)40 C(A)=C(A)+150 NEXT P60 FOR R=1 TO 670 PRINT R;” esines ”;C(R);” korda”80 NEXT90 END

Pärast käivitamist saame järgmise tulemuse:

1 esines 93 korda2 esines 92 korda3 esines 92 korda4 esines 120 korda5 esines 102 korda6 esines 101 korda

LAUSED DATA, READ JA RESTORE

Peale INPUT-lause on veel muid võimalusi programmi andmete sisselugemiseks. Üheks selliseks on lausete DATA ja READ kasutamine.

Nende lausete korral ei oota arvuti andmete sisestamist klaviatuurilt, nagu INPUT lause korral, vaid loeb ise sisse andmed, mis on kirjas programmi sees.

DATA-lausega esitatakse arv- ja tekstandmeid, mille väärtused omistatakse READ-lauses olevatele muutujatele. DATA-lauses olevad arv- ja tekstandmed on üksteisest eraldatud komadega. DATA-lause üldkuju on järgmine:

DATA väärtus 1, väärtus 2, . . . , väärtus n

440

Page 19: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

READ-lause omistab DATA-lauses olevaid väärtusi READ-lauses olevatele muutujatele. READ-lauses on muutujad samuti üksteisest eraldatud komadega. READ-lause üldkuju on järgmine:

READ muutuja 1, muutuja 2, . . . , muutuja n

Võtame näiteks järgmise programmilõigu:

10 READ A,B,H$,C20 READ K,L$,M,N30 DATA 1,9,JUKU,35,4240 DATA 11,12,13,14,65

See programmilõik omistab muutujatele A, B, H$, C, K, L$, M ja N järgmised väärtused:

A B H$ C K L$ M N1 9 JUKU 35 42 11 12 13

DATA-lausetest moodustab arvuti ühe ühtse andmejada (DATA-jada), millest esimene READ-lause loeb algusest järjest elemente ja omistab nende väärtused READ-lause järel loetletud komaga eraldatud muutujatele. Järgmine READ jätkab andmete lugemist sealt, kus eelmine READ-lause lõpetas.

Kui DATA-jadas on väärtusi programmi READ-lausete jaoks liiga palju, siis jäävad viimased väärtused lugemata (näiteks selles programmilõigus 14 ja 65). Kui väärtusi tuleb puudu, siis väljastab arvuti veateate ja programmi täitmine katkeb. Seetõttu tuleb alati kontrollida, et DATA-lausete abil oleks programmis küllaldaselt andmeid, mida READ-lausete abil sisse lugeda.

Pea meeles, et READ-lausetega loetavad väärtused oleksid andmetüübi poolest kooskõlas DATA-jada vastavate väärtustega. Näiteks, tekstmuutuja väärtuseks saab omistada ka arvu, aga arvmuutuja väärtuseks teksti ei saa.

DATA-lausel on veel üks iseärasus — ta peab paiknema programmis eraldi real.READ-lause täitmisel programmi ei katkestata (nii nagu INPUT-lause korral) ja seetõttu

töötab programm kiiremini ning on välistatud programmi kasutaja poolt andmete sisestamisel tehtavad vead.

Kui tahame programmis ühtesid ja samu DATA-jada väärtusi korduvalt kasutada, siis läheb vaja RESTORE-lauset.

Järgmine programm väljastab ekraanile DATA-jadas loetletud filmide pealkirju ja küsib kasutajalt nende filmide lavastajate nimesid. Juhul, kui kasutaja eksib, siis programm väljastab õige lavastaja nime.

35-ndat programmirida kasutatakse selleks, et valida filmide pealkirju juhuslikult, s.t. et umbes pooltel juhtudest omistatakse järjekordse filmi pealkiri ja autori nimi muutujatele V$ ja W$, mida edaspidi ei kasutata. Nii nihkub loendur DATA-jadas kahe elemendi võrra edasi. Juhul, kui tahetakse pärast kümmet küsimust ja vastust veel kord oma teadmisi proovile panna, võimaldab RESTORE-lause alustada DATA-jada kasutamist selle algusest peale.

10 PRINT ”SULLE NÄIDATAKSE FILMIDE NIMESID, SINA PEAD SISESTAMA”20 PRINT ”(SUURTE TÄHTEDEGA) LAVASTAJA PEREKONNANIME”30 FOR I=1 TO 1035 IF RND(1)<.5 THEN READ V$,W$40 READ A$,B$50 PRINT A$;:INPUT ” LAVASTAJA ON”;C$60 IF C$=B$ THEN PRINT ”ÕIGE” ELSE PRINT ”VÄÄR! ÕIGE ON ”;B$70 NEXT I80 INPUT ”KAS VEEL (J/E) ”;D$90 IF D$=”E” OR D$=”e” THEN 190100 RESTORE

441

Page 20: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

110 GOTO 30120 DATA KULLAPALAVIK,CHAPLIN,KODANIK KANE,WELLES,PATUKAHETSUS,ABDULAZE130 DATA MAASIKAVÄLU,BERGMAN,PALJAS SAAR,SHINDO,JAAM KAHELE,RJAZANOV140 DATA ANDREI RUBLJOV,TARKOVSKI,AMARCORD,FELLINI,LUNASTUS,TARKOVSKI150 DATA RISTIISA,COPPOLA,IVAN GROZNÕI,EISENSTEIN,SÜGISSONAAT,BERGMAN160 DATA LINNUD,HITCHCOCK,LUMIVALGEKE JA SEITSE PÖIALPOISSI,DISNEY170 DATA 39 SAMMU,HITCHCOCK,SUURLINNA TULED,CHAPLIN,GARAAZ,RJAZANOV180 DATA KRAMER KRAMERI VASTU,BENTON,RAHVUSE SÜND,GRIFFITH,ROOMA,FELLINI190 END

LAUSED ON . . . GOTO, GOSUB JA ON . . . GOSUB

Tihti on vaja sõltuvalt mingi avaldise väärtusest anda juhtimine mitmele erinevale programmireale. Selleks kasutatakse lauset ON...GOTO. Selle lause üldkuju on järgmine:

ON muutuja GOTO reanumbrite loeteluReanumbrite loetelus on need reanumbrid, kuhu suunatakse, eraldatud komadega. ON...GOTO-lause täitmisel ümardatakse muutuja väärtus täisarvuks. Kui tulemus on 1, siis siirdutakse esimese numbriga märgitud reale, kui 2, siis teise numbriga märgitud reale jne. Kui ümardamise tulemus on väiksem ühest või suurem kui reanumbrite arv lauses ON...GOTO, siis jätkatakse lausele ON...GOTO järgneva lause täitmisega.

Järgmine programm „genereerib” nn. spordiennustuse tulemusi (1, X ja 2), valides neid juhuslikult

10 REM Juhuslikud spordiennustuse tulemused20 RANDOMIZE30 FOR I=1 TO 1340 X=INT(3*RND+1)50 ON X GOTO 60,70,8060 PRINT I,”1”:GOTO 9070 PRINT I,”X”:GOTO 9080 PRINT I,”2”90 NEXT I100 END

40. programmirida omistab muutujale X väärtuseks kas 1, 2, või 3. Kui X = 1, siis suunab 50. programmirida 60-ndale reale. Kui X = 2, siis 70-ndale reale ja kui X = 3, siis 80-ndale reale. Pärast programmi käivitamist saame näiteks järgmised tulemused:

Random number seed (–32768 to 32767)? 991 12 13 X4 X5 16 17 18 19 X10 211 X12 X13 X

442

Page 21: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

Pseudojuhuarvude asemel saab kasutada ka ehtsaid juhuarve. Selleks on mitu erinevat võimalust. Ühes neist kasutavad programmeerijad tekstifunktsiooni INKEY$. See funktsioon loeb klaviatuuri puhvrist momendil vajutatud klahvi koodi. Kui klahvi ei ole vajutatud, siis siirdub programm järgmise lause juurde.

Viimasele programmile tuleks lisada 15. rida ja muuta 20-ndat rida, tehes seda järgmiselt:15 PRINT ”Vajuta suvalisele klahvile”20 A$=INKEY$:R=RND:IF A$=”” THEN 20

Kui mingit programmilõiku kasutatakse antud programmis korduvalt, siis on mõistlik see lõik vormistada eraldi alamprogrammina.

Alamprogrammi suundumiseks kasutatakse GOSUB-lauset. Sõna GOSUB on lühend ingliskeelsest väljendist „go to subprogram” — siirduda alamprogrammi.GOSUB-lause üldkuju on järgmine:

GOSUB reanumber ,kus reanumbriks on selle rea number, millest algab alamprogramm.

Alamprogramm peab lõppema lausega RETURN (ingl. k. „return” — pöörduda tagasi). RE-TURN-lause suunab programmi täitmise GOSUB-lausele järgneva lause juurde. Alamprogrammi poole võib antud programmis pöörduda kuitahes palju kordi.

Toome ühe lihtsa näite:

10 PRINT ”Selle rea järel siirdutakse alamprogrammi”20 GOSUB 5030 PRINT ”Oleme jälle põhiprogrammis”40 GOTO 7050 PRINT ”See rida trükitakse alamprogrammis”60 RETURN70 END

Pärast programmi käivitamist saame:Selle rea järel siirdutakse alamprogrammiSee rida trükitakse alamprogrammisOleme jälle põhiprogrammis

Sõltuvalt avaldise väärtusest võib suunata ka mitmesse erinevasse alamprogrammi. Selleks kasutatakse lauset ON...GOSUB. Selle lause üldkuju on järgmine:

ON muutuja GOSUB reanumbrite loeteluLauset ON...GOSUB kasutatakse analoogiliselt lausega ON...GOTO.

Näiteks järgmine programmilõik

10 INPUT X20 PRINT ”Teadmised on”;30 ON X GOSUB 100,200,300,400,50040 END100 PRINT ”nõrgad”:RETURN200 PRINT ”mitterahuldavad”:RETURN300 PRINT ”rahuldavad”:RETURN400 PRINT ”head”:RETURN500 PRINT ”väga head”:RETURN

443

Page 22: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

väljastab vastavalt X väärtusele 1, 2, 3, 4 ja 5 kas ”Teadmised on nõrgad”, ”Teadmised on mitterahuldavad”, ”Teadmised on rahuldavad”, ”Teadmised on head” või ”Teadmised on väga head”.

Kontrolli, mis juhtub, kui sisestada muid arve peale täisarvude 1 – 5.Järgmine programm sisaldab DATA-jadas kuue linna vahekauguste tabeli. Kasutaja peab

sisestama linnade nimed suurte tähtedega. Programm teatab nende linnade vahekauguse. See programm illustreerib nii mõndagi seniõpitut: DATA ja READ-i kasutamist, kahemõõtmelisi massiive. Reast 270 algav alamprogramm määrab kindlaks selle, kas antud linna kohta on tabelis andmeid ja teeb kindlaks, mitmenda linnaga on tegemist.

10 DIM NIMI$(6),KAUGUS(6,6)20 FOR R=1 TO 630 READ NIMI$(R)40 DATA TALLINN,TARTU,PÄRNU,RAKVERE,HAAPSALU,VALGA50 NEXT R60 FOR R=1 TO 670 FOR S=1 TO 680 READ KAUGUS(R,S)90 NEXT S100 NEXT R110 DATA 0,187,129,98,102,245120 DATA 187,0,183,126,268,89130 DATA 129,183,0,183,111,144140 DATA 98,126,183,0,200,214150 DATA 102,268,111,200,0,255160 DATA 245,89,144,214,255,0170 INPUT ”SISESTA ESIMESE LINNA NIMI”;B$180 GOSUB 270190 IF R=0 THEN 170200 LET A=R210 INPUT ”SISESTA TEISE LINNA NIMI”;B$220 GOSUB 270230 IF R=0 THEN 210240 IF KAUGUS(A,R)=0 THEN PRINT ”SEE ON ÜKS JA SAMA LINN”:GOTO 260250 PRINT ”LINNADEVAHELINE KAUGUS ON ”;KAUGUS(A,R);” KILOMEETRIT”260 END270 FOR U=1 TO 6280 IF B$=NIMI$(U) THEN R=U ELSE R=0290 NEXT U300 IF R=0 THEN PRINT ”SELLE LINNA KOHTA EI OLE INFORMATSIOONI”310 RETURN

Seda programmi saab täiustada mitmes suunas: suurendada linnade arvu, muuta programm nii „intelligentseks”, et ta mõistaks, et Tallinn ja TALLINN on üks ja sama linn. Andmeid võib DATA-jada asemel hoida ka andmefailides jne.

See kõik nõuaks aga tunduvalt põhjalikumat ja mahukamat käsitlust. Me ei looda, et selle lühijuhendi läbitöötamine õpetaks selgeks programmeerimise Basic-keeles. Küll aga võib temast olla abi esimeste sammude tegemisel Basicu õppimisel ning väikeste matemaatikaprobleemi illustreerivate programmilõikude koostamisel, kasutamisel ja katsetamisel.

444

Page 23: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

Lõpuks kirjandus, millest võiks asjahuvilisel olla abi esimeste sammude tegemisel ja ka sügavama huvi korral.

See loend ei ole täielik. Raamatu ilmumise ajaks on see kindlasti vananenud, sest arvutialast kirjandust ilmub maailmas palju. Kahjuks ilmub Eestis sellist kirjandust suhteliselt vähe. Seetõttu on mõned raamatud inglise, saksa, soome või vene keeles. Tõsisemal asjahuvilisel on mõttekas tutvuda ka selle võõrkeelse kirjandusega, mida tal õnnestub hankida.

445

Page 24: LÜHILEKSIKON - Tallinn Universitytonu/mathema/basjuh.doc · Web viewVt. näiteks ajakirja „Arvutustehnika ja Andmetöötlus” 1988. a. nr. 6 ja 1991. a. nr. 3 sisalduvat Basicu

Lühike juhend tööks BASIC’us

Alljärgnev kirjandus jaguneb kahte ossa: raamatud Basicust ning raamatud, mis tutvustavad personaalarvuteid ja nende kasutamist.

1. G. Diehr, T. Barron, T. Munro „BASIC Programming for the IBM Personal Computer”, NY, John Wiley & Sons Inc, 1987.

2 D. Inman, B. Albrecht „Using Quick BASIC”, Osborne McGraw-Hill, Berkeley, California, USA, 1988.

3. W. Schupp „Schüler Programmieren in BASIC”, Paderborn, Verl. Ferdinand Schöningh, 1986.

4. H. Brockmeyer „Schüler Programmieren Graphiken in BASIC”, Paderborn, Verl. Ferdinand Schöningh, 1986.

5. P. Fischer „BASIC für Anfängen”, Berlin, Verl. Wirtschaft, 1987. 6. D. Walton „Programming exercises in BASIC”, Oxford, Oxford University Press, 1983. 7. „BASIC-interpretaator. Kasutamisjuhend ja keele kirjeldus.”, Tln., ETKVL, 1988 (Tõlge

saksa keelest, tõlkinud A. Lehtlaan). 8. „BASIC-arvutigraafika”. Abimaterjal informaatika õppijatele ja õpetajatele. Tln., VÕT,

1988. (Autor-koostaja A. Renzer.) 9. „MSX-BASIC. (Abimaterjal õpetajatele)”. Tln, ENSV Haridusministeerium ja VÕT, 1987.

(Koostaja V. Jokk).10 R. Jürgenson „Programmeerimine”. Tln, Valgus, 1989.11 Ü. Kaasik, J. Kiho, M. Koit „Kuidas programmeerida” — Tln, Valgus, 1990.12. Ajakirja „Arvtustehnika ja andmetöötlus” järgmised numbrid: 1988, nr. 6; 1991, nr. 3; 1992,

nr. 2. Seal sees Jüri Noore koostatud BASIC-u spikker. (Meie õpiku lõpus oleva spikri analoog ja eeskuju.)

13. C. O. E{~imlmb „Qno`bmvlhi nm `jcmohqk`k h nomco`kk`k l` ~gzie aeÐphi dj~ neopml`j{lzt ]CL”. Lmpib`, M`ri`, 1989.

14. D. I. Qbeqmg`omb`, A. A. Lej{lhimb, A. C. JmgjmbpihÐ „Oo`iqhirk nm nomco`kkhomb`lh} l` ~gzie BFÄHIJ”. Lmpib`, M`ri`, 1989.

15. F. Q. B`wk`imb`, I. L. Chqelaeoc, A. B. Khaeomb „Oomco`kkhomb`lhe khiom]CL l` ~gzie BFÄHIJ”. Lmpib`, P`dhm h pb~g{, 1991.

16. D. D. Dlegdhjmb`, N. A. Dmlv`omb, D. C. Qelhl „Oeopml`j{lzÐ imkn{}qeo b hco`t h g`d`v`t”. Lmpib`, M`ri`, 1988.

17. P. Aaltola, H. Hänninen „Lukion tiedotekniikka”. Tampere, Weilin+Göös, 1985.18. K. Bolle „Arvutiaabits”. Tln, Valgus, 1990.19. „Huvitav informaatika I” Tln, ENSV Haridusministeerium ja VÕT, 1987. (Autorid-

koostajad: Jaak Henno ja Leo Võhandu)20 „Huvitav informaatika II” Tln, ENSV Haridusministeerium ja VÕT, 1989. (Autor-koostaja:

U. Agur)21. J. Henno „Huvitav informaatika III. (PROLOG — see on imelihtne!)”. Tln, ENSV

Haridusministeerium ja VÕT, 1989.

446