Valdymo struktūros. Koordinatės. Laikrodžio projektas
Pagrindinės valdymo struktūros
Klasikiniu programavimo požiūriu svarbiausios valdymo struktūros yra
priskyrimas, šakojimas, ciklas, procedūra, funkcija. Išsamiausiai susipažindinome
su procedūromis. Žinome ir dvi priskyrimo komandas: tebus
ir vadink. Be jų dar yra komanda tebūnie. Komandos
tebus
ir vadink sukuria išorinius kintamuosius, kuriuos, įvykdę
atitinkamą procedūrą, rasime Logo atmintinės lango objektų sąraše. Šiomis
komandomis priskiriama viena reikšmė vienam kintamajam. Komanda tebūnie
sukuria vidinius kintamuosius. Be to ji vienu metu gali priskirti reikšmes
keliems kintamiesiems (tada ją būtina apskliausti):
(tebūnie a 5 b 7 c 14)
Čia kintamajam a bus priskirta reikšmė 5,
b
reikšmė 7 ir c 14. Žinomo
kartojimo ciklą kartok jau ne kartą vartojome.
Jeigu iš anksto nežinome tikslaus kartojimų skaičiaus, šis ciklas netinka,
tam yra kiti du: ciklas bei kol. Ciklas kol
yra paprastesnis:
tai bandau
tebus "a 1
kol [:a < 10][rašyk :a tebus "a :a + 1]
taškas
Rašymo komanda bus kartojama tol, kol kintamojo a reikšmė
taps 10 (10 jau neberašys), t. y. komandų lauke
bus rašoma 1, 2, 3, 4, 5, 6, 7, 8, 9.
Komanda ciklas nurodo, kad komandų seka bus vykdoma tol,
kol ciklą valdančio kintamojo reikšmė bus iš intervalo [N1,
N2], t. y. ciklas kintamajam priskiriama pradinė intervalo reikšmė
N1
ir po kiekvieno komandų_sekos įvykdymo padidinama (arba mažinama,
jeigu N1 > N2) vienetu (galima nurodyti trečią intervalo
skaičių N3, tuomet bus didinama arba mažinama žingsniu
N3):
ciklas ciklo_kintamasis [N1 N2] [komandų_seka]
ciklas ciklo_kintamasis [N1 N2 N3]
[komandų_seka]
Vieną iš sąlyginių (šakojimo) sakinių jeigu jau vartojome
nagrinėdami rekursiją. Tai komanda, tikrinanti nurodytą sąlygą ir vykdanti
atitinkamą komandų seką priklausomai nuo to, ar sąlyga išpildyta, ar ne.
Jeigu komandų seką reikia vykdyti tik tuomet, kai sąlyga teigiama (arba
tik neigiama) patogiau vartoti komandas jei.tiesa bei jei.melas,
tik prieš tai reikia patikrinti sąlygos teisingumą komanda bandyk.
Komandos:
jeigu [a > b] [rašyk [a didesnis už b]] [rašyk [a
mažesnis už b]]
ir komandų seka
bandyk [a > b]
jei.tiesa [rašyk [a didesnis už b]]
jei.melas [rašyk [a mažesnis už b]]
yra ekvivalenčios. Pastaroji užrašoma trumpesnėmis eilutėmis tokią
procedūrą lengviau skaityti ir suprasti.
Vieno veiksmo pasirinkimui iš daugelio vartojama komanda rinkis. Pateiksime
Vėžliuko valdymo klaviatūros rodyklių klavišais procedūrą:
tai valdau
rinkis kai.paspausta~
[ -72 [priekin
10]~
-75 [kairėn 90]~
-80 [atgal 10]~
-77 [dešinėn 90]]
valdau
taškas
Komanda kai.paspausta pateikia paspausto klavišo kodą,
o skaičiai -72, -75, -80, -77 yra rodyklių atitinkamai į
viršų, į kairę, į apačią bei į kairę kodai.
Duomenų įvestis ir išvestis
Kaip rašant Logo procedūras vykdyti kompiuterio dialogą su vartotoju?
Tam yra duomenų įvesties ir išvesties komandos, svarbiausios jų susijusios
su simbolio, žodžio, sąrašo pateikimu. Šiems duomenims skaityti vartojamos
komandos: skaityk.ženklą, skaityk.žodį, skaityk.sąrašą.
Įvykdžiusi vieną iš šių komandų sistema laukia, kol į komandų eilutę bus
įvestas duomuo ir paspaustas klavišas Enter.
Duomenis skaityti galima nurodyti ne tik iš komandų eilutės, bet ir
iš bylos. Tam vartojama komanda skaityk.iš, kurios argumentas
yra byla, iš kurios skaitomi duomenys. Pabaigus skaityti byla užveriama
nurodžius tuščio sąrašo argumentą: skaityk.iš [ ].
Duomenų įvesčiai dar galima naudoti dialogo langą, pavyzdžiui, kurio
pavadinimas bus Antraštė, o klausimas (tekstas virš įvesties eilutės)
Jūsų vardas:
(dialogas [Jūsų vardas:] Antraštė)
arba redagavimo eilutę komanda klausk čia atsivers
įvesties eilutė ties pirmu aktyviu Vėžliuku ir lauks kol bus įrašytas duomuo
ir paspaustas klavišas Enter.
Duomenims spausdinti komandų eilutėje vartojamos komandos: parodyk,
rodyk,
spausdink.eilutę
bei rašyk. Visų jų argumentai gali būti ir žodis (prieš jį
rašant kabutes), ir kintamojo reikšmė (prieš kintamojo vardą rašant dvitaškį),
ir sąrašas (laužtiniuose skliaustuose). Pabandykite ir atkreipkite dėmesį
į duomenų spausdinimo skirtumus.
Duomenis galima rašyti (spausdinti) ir į bylas. Byla atveriama komanda
rašyk.į.
Tada rašymui vartokite komandos spausdink.eilutę bei rašyk.
Duomenis galima išvesti ne tik į komandų lauką ar bylas, bet ir į pranešimų
langą vartojant komandą:
(pranešimas [Pranešimo_tekstas] Antraštė)
Darbas su koordinatėmis
Iki šiol Vėžliuko padėtį ekrane (Vėžliuko lauke) nustatydavome ir keisdavome
santykinai, t. y. atžvilgiu jo buvimo vietos. Kitas būdas Vėžliuko judėjimui
ekrane valdyti absoliutus, vartojant koordinates. Vėžliuko koordinates
galime sužinoti komandomis koks.x.y, koks.x,
koks.y.
Komandomis eik.x.y, eik.x bei eik.y
galima nurodyti Vėžliukui, kur jam eiti. Taip vaikščiodamas iš taško į
tašką Vėžliukas gali nubraižyti labai įdomių figūrų. Parašykime ir panagrinėkime
procedūras:
tai pradžia :ax :ay :bx :by :žingsnis
eisim eik.x.y :ax + :bx :ay
piešim
sukinys 360 :žingsnis
taškas
tai sukinys :n :kampas
jeigu :n = 0 [baik]
eik.x.y :ax + :bx * cos 3 * :kampas ~
:ay + :by * sin :kampas
; x ir y koordinatės
sukinys :n - 1 :kampas + :žingsnis
taškas
Bangelė (~) reiškia komandos kėlimą į kitą eilutę, kabliataškiu pradedami
komentarai. Įvykdžius procedūrą pradžia 0 0 100 180 61 Vėžliukas
nubraižys figūrą (1 pav.). Parinkite kitokias argumentų reikšmes ir patyrinėkite
procedūrų rezultatus. Įdomesnius variantus atsiųskite mums. Lauksime.
1 pav.
Projektas laikrodis
Komenskio Logo
sistema turi komandas (funkcijas), kuriomis galima
gauti kompiuteryje esantį laiką bei datą. (data, data.žodžiu,
laikas,
laikas.žodžiu).
Šių komandų atitinkami rezultatai yra, pavyzdžiui, tokie:
[30 6 99 3] arba 1999 m. birželio
30 d. trečiadienis
[6 46 19 26] arba 06:46:19
Dabar jau galima sukurti laiką rodantį laikrodžio projektą. Tam reikės
aprašyti valandų, minučių ir sekundžių rodykles valdančias procedūras:
tai valanda :dabar
žvelk (30 * (liekana pirmas :dabar 12) + 0,5
* dalis 2 :dabar)
pasirink.pieštuko.storį 5 ; rodyklės
storis
keisim priekin 30
eisim atgal 30
taškas
tai minutė :dabar
žvelk 6 * dalis 2 :dabar
pasirink.pieštuko.storį 3 ; rodyklės
storis
keisim priekin 40
eisim atgal 40
taškas
tai sekundė :dabar
žvelk 6 * dalis 3 :dabar
pasirink.pieštuko.storį 2 ; rodyklės
storis
keisim priekin 60 eisim atgal 80 keisim priekin
20
taškas
Komanda žvelk nurodoma Vėžliukui pasisukti duota kryptimi
(laipsniais). Komanda dalis n žodis_arba_sąrašas pateikia
nurodyto žodžio arba sąrašo n-tąjį narį (elementą), pavyzdžiui, dalis
2 [a b c ] rezultatas bus lygus b.
Komanda liekana a b padalija skaičių a
iš skaičiaus b ir rezultatu pateikia gautą liekaną.
Dabar parašykime gaubiančią procedūrą, kuri valdytų laikrodžio rodykles:
tai rodyk.laiką
pradžia tebūnie "dabar laikas ; pasirengimo
piešti procedūra
valanda :dabar ; procedūra valdanti
valandos rodyklę
minutė :dabar ; procedūra valdanti minutės
rodyklę
sekundė :dabar ; procedūra valdanti
sekundės rodyklę
rodyk.laiką
taškas
tai pradžia
valyk
pasirink.pieštuko.spalvą 0 pasirink.pieštuko.storį
20
piešim taškelis
pasirink.pieštuko.spalvą 15
taškas
Komanda taškelis (sutrumpintai tš) padeda
nurodytos Vėžliuko pieštuko spalvos ir storio taškelį ekrane.
Toliau belieka nusipiešti laikroduką ir įkomponuoti jame rodykles bei
procedūroje pradžia komandą valyk pakeisti komanda
įkelk.vėžliuko.laukąlaikrodis.bmp
(2 pav.).
2 pav.
Paruošta pagal J. Aušraitės ir V. Dagienės pamokų ciklą
Mokomės
dirbti su Komenskio Logo. |