Protsesside juhtimisestPõhimõtteliselt on protsess suvaline tegevuste kogum. Scratchis kujutab protsessi kirjelduse käsuplokkide gruppi, milleks võib olla terve skript või osa sellest. Sõltumata kasutatavatest vahenditest võib ülesannete lahendamisel eristada nelja liiki protsesse:
Paralleelseid protsesse saab Scratchis realiseerida ainult nö projekti tasemel: paralleelselt saab täita skripte, skripti sees tegevusi paralleelselt täita ei saa. Skriptid, millel on ühesugune päiseplokk: [kui klõpsati rohelist lippu], [kui vajutati klahvi...], [kui teade nimi] käivituvad üheaegselt vastava sündmuse esinemisel (näiteks teate saabumisel) ja töötavad paralleelselt. Paralleelprotsesse siin eraldi ei vaadelda, nad lihtsalt esinevad mitmes näites. JärjestikprotsessidJärjestikprotsessi korral täidetakse kõik käsud täpselt sellises järjekorras nagu nad on esitatud programmis. Käske ei jäeta vahele ega toimu kordamisi. Mingeid erilisi vahendeid protsessi määratlemisel ei ole vaja, sest täitmine toimub nö loomulikus järjekorras. Illustratsiooniks on toodud kaks näidet. Esimese skripti korral on tegemist ülesandega, mille lahendamine oma olemuselt kujutab järjestikust protsessi. Programm küsib ja loeb ristküliku külgede pikkused (a ja b), arvutab selle pindala (S) ja ümbermõõdu (P) ning leiab pindala ja ümbermõõdu suhte (suhe). Tsüklilised protsessidTsükliline protsess seisneb tegevuste (käskude) korduvas täitmises. Programmis tuleb määrata reeglid ja tingimused, kuidas toimub protsessi täitmine. Scratchis on korduste kirjeldamiseks mitu erinevat käsuplokkiehk liitkäsku, mis võimaldavad arvestada erinevat tüüpi kordusega. Vt ka Algoritmimine. Scratchis on vahendid kolme tüüpi korduste kirjeldamiseks:
Etteantud korduste arvuga kordusSelleks on Scratchis plokk [korda n], kus n on kordamiste arv. Viimane võib olla esitatud konstandi, muutuja või avaldise abil. Allpool on toodud ka antud korduse tüübi esitus UMLi diagrammidel ja algoritmikeeles. Samuti on kõrval toodud kordusena realiseeritud näide eelmisest jaotisest.
Etteantud korduste arvuga korduste demodKlipis on toodud kolme lihtsa etteantud korduste arvuga korduse näited: Hyppa, Liigu ja Salto. Proovide neid käivitada nupuga Läks ja vaadata ka sammhaaval täitmist, käivitades neid nupuga Näita. Liuguritega paus ja heli, saab reguleerida täitmise kiirust ja heli kasutamist kordustes. Täiitmisel pange tähele, millised tegevused kuuluvad kordusesse ja millised mitte.
Näide. "Jalka. Karistuslöögid"Imiteeritakse pealelööke väravale. Palli sihtkoha koordinaate määratakse juhuarvude abil. Laval on sprait nimega värav. Löökide (korduste) arv on määratud muutuja lööke väärtusega, seda saab muuta liuguri abil.
Näide "Rehmaatika"Skript esitab järjest korrutamise ülesandeid, loeb vastuseid ja hindab neid. Ülesannete arvu sisestab kasutaja. Rakenduses on kasutusel üks põhisprait: Kraps, kes esitab küsimusi ja hindab vastuseid. On veel mitu nö abispraiti: skripti pilt, käsunupud jm. On kasutusel järgmised muutujad: n - ülesannete arv, a ja b ülesanete operandid (juhuarvud), vastus (sisemuutuja), punkte, paus - demo täitmis kiiruse reguleerimiseks.
Lõputu kordusFormaalselt täidetakse ploki sees olevaid käske lõputult. Praktiliselt katkestatakse kordus ühel või teisel viisil, kui peatatakse selle või kõikide skriptide töö. Alati saab katkestada kõik tegevused punase nupuga, ühe skripti töö lõpetab hiireklõps skriptil. Sageli katkestatakse kordus käsuga [stopp see skript] või [stopp kõik], viimane võib asuda ka mõnes teises skriptis.
Lõputu korduse demoNäites töötavad paralleelselt kaks skripti, kus kasutatakse lõputud kordust. Krapsu käimist juhtiv skript ja palli lendamist korraldav skript. Demo variandis toimib ainult Krapsu skript. Lõpetada täitmise saab mõlemal juhul punase nupuga,
Näide "Kõik liiguvad"Antud näites on kasutusel lausa viis lõputud kordust ja võib korraga toimida kuus paralleelset protsessi. Käivitage rakendus ja proovige, vaadake ka skripte.
Eelkontrolliga tingimuslik kordus
Selle korduse liigi korral korratakse tegevusi, kuni antud tingimus saab tõeseks. Taolist korduse liiki nimetatakse mõnikord ka eelkontrolliga Until-korduseks (kuni-korduseks). Inglise keeles on see [repeat until tingimus]. Paljudes programmeerimiskeeltes on selle asemel või lisaks sellele nn While‑kordus (kui-kordus). Selle korduse tüübi korral korratakse tegevusi seni kuni tingimus on tõene. Näide. Pall ja "ingel"
Taevas lendab (paremalt vasemale) ringi mingi nõia- või inglitaoline olevus. Kasutaja võib üritada tabada teda palliga ning saada võimalikult palju punkte. Mäng kestab valitud ajani m_aeg. Kõigis kolmes toodud skriptis kasutatakse tingimuslikku kordust. Esimene skript juhib ingli ringliiklust. Välises korduses kasutatakse lõputut kordust, mille katkestab taimeri skript. Sisemises korduses kontrollitakse pidevalt ingli x-koordinaati; kui see saab väiksemaks lava vasakpoolsest servast (x<-240), peidetakse sprait korraks, viiakse lava paremasse serva, tehakse nähtavaks ning lend jätkub. Parempoolne skript juhib palli lendu. Siin kontrollitakse korduses tingimust, kas pall jõuab lava ülemise ääreni. Kui jah, lõpetatakse kordus. Keskmine protseduur juhib aja kuvamist ning lõpetab kogu programmi töö, kui ületatakse valitud ajapiir.
Plokk "oota kuni"
Tegemist on omapärase „valvuriga“, võiks öelda ka, et varjatud kordusega. Kui täitmisjärg jõuab antud plokini, hakatakse pidevalt kontrollima tingimust ja skripti töö ei lähe enne edasi, kui tingimus saab tõeseks. Võib ka mitte minna. Paralleeselt töötavad teised skriptid. Peab aga silmas pidama, et tingimuse väärtust antud skript ise muuta ei saa. Seda peab tegema mõni paralleelselt töötav skript. Näide. Karistuslöögid. Etteantud tabamuste arv
Tegemist on jälle karistuslöökidega. Seekord määratakse programmi töö lõpp etteantud tabamuste arvuga. Antud juhul ei saa löökide arv ega aeg olla fikseeritud, sest tegemist on juhusega. Käivitakse korraga kaks skripti, mis töötavad paralleeselt. Muide, ka kolmas skript pannakse tööle: kella skript.
Hargnevad protsessidHargnevas protsessis valitakse antud tingimuste alusel mitmest võimalikust tegevusest üks. Vt ka Algoritmimine. Scratchis on kaks valikuplokki: valik kahest ja valik ühest. Esimesel juhul täidetakse kahest võimalikust plokkide grupist üks. Teisel juhul, olenevalt tingimuse väärtusest, antud plokid kas täidetakse või jäetakse vahele. Iga plokk võib omakorda sisaldada kui-plokke. Tingimuste esitamiseks kasutatakse loogikaavaldisi, mis esitatakse võrdluste ja loogikatehete plokkide abil:
Näide. Suurim kolmest arvustNn klassikaline loogikaülesanne. On antud kolm arvu: a, b ja c, programm peab leidma neist suurima ja omistama selle väärtuse muutujale max. Vaatamata ülesande lihtsusele, on siin võimalikud mitu erinevat varianti. Allpool on toodud kolm. Viimase variandi kohta on toodud ka täitmise demo: Näide. Kolme arvu mediaanValitakse kolmest arvust vahepealne (mediaan). Kõigepealt valitakse min väärtuseks väiksem a-st ja b-st ning max väärtuseks suurem. Edasi toimub võrdlus c-ga ja tehakse kindlaks mediaan.
Näide. Fragment mängust „Kivi, paber, käärid“
Kaks mängijat (näiteks Pille ja Kalle) näitavad korraga ühe märkidest: kivi, paber või käärid, kasutades mingit kokkulepet (vt näide). Võitja tehakse kindlaks järgmiste reeglite kohaselt:
Programmis omistatakse kahele muutujale P (Pille) ja K (Kalle) väärtused: 1( kivi), 2 (paber), 3 (käärid). Kalle (esindab kasutajat) poolt teeb valiku kasutaja, klõpsates vastavat pilti: kivi, paber või käärid. Pille (esindab arvutit) jaoks genereerib program juhusliku arvu: 1, 2 või 3. Programmi põhisisuks ongi: teha kindlaks võrdluste abil teha kindlaks tulemus. Selleks on palju erinevaid variante. Allpool on toodud algoritm, milles kasutatakse järjestikuseid võrdlusi. Nagu näha, on tegemist üsna pika ja võrdlemisi ebaülevaatliku esitusega.
Kui kasutada loogikaavaldisi on lahendus kompaktsem ja selgem, kuigi Scratchi skript läheb veidi suureks teises suunas.
|
||||||||||||||||||||||||||||||||||||||||||