Vertailu- ja loogiset operaattorit

Vertailu- ja loogiset operaattorit

Kuten todettua, ohjelmoinnissa voidaan valvoa lukemattomia erilaisia ehtoja. Olemme kuitenkin tähän asti suorittaneet vain erilaisia näppäimien painamisen tarkistuksia. Tässä luvussa laajennamme edellisessä luvussa karruttamaamme ymmärrystä ehtolauseista. Opettelemme erityisesti, miten luomme entistä monipuolisempia ehtoja ohjelmiemme tarkastettavaksi. Lisäksi kertaamme jo opittua. Luvun lopussa toteutamme jälleen yksinkertaisen pelin tuliterillä taidoillamme.

Uudenlaisten ehtojen osalta tutkimme, miten asioita voi ohjelmoidessa vertailla keskenään. Perehdymme myös siihen, miten ehtoja voi yhdistellä keskenään entistä monimutkaisemmiksi ja miten ohjelmoinnissa voi tarkastaa, jos jokin ehto ei käy toteen. Tähän kaikkeen meitä auttavat työkalut nimeltä operaattorit.

Vertailun vuoksi

Ohjelmoinnissa kenties yleisimmät tarkistettavat ehdot perustuvat vertailuoperaattoreihin. Vertailuoperaattorit ovat matematiikasta tuttuja symboleita. Niihin lukeutuvat muun muassa yhtä suuri kuin (=), suurempi kuin (>) japienempi kuin (<). Nämä ovat myös vertailuoperaattorit, joita Scratchissa voimme hyödyntää.

Testataan yhtä näistä operaattoreista. Valitaan Toiminnot-valikon alta n > n -ehtopalikka ja raahataan se oikealle. Katso kuvasta apua.

Valitse Toiminnot-valikon alta n > n -ehto.

Operaattorin molemmin puolin sijaitseviin tyhjiin koloihin sijoitetaan arvot, joita suurempi kuin -operaattori vertailee keskenään. Näitä vertailtavia arvoja kutsutaan operandeiksi. Klikkaa n > n -palikan jälkimmäistä tyhjää koloa ja kirjoita siihen operandiksi luku nolla. Ensimmäiseen tyhjään koloon puolestaan vie operandiksi Liike-valikon alta löytyvä y-sijainti-palikka. Katso mallia animaatiosta.



Vie y-sijainti-palikka suurempi kuin -operaation ensimmäiseksi operandiksi.

Nyt olemme luoneet ehdon, joka on tosi, kun kissan sijainti pystysuunnassa eli y-suunnassa on suurempi kuin nolla. Kissan y-sijainti vastaa nimittäin sen sijaintia pystysuunnassa ja x-sijainti sen sijaintia vaakasuunnassa, aivan kuten matemaattisessa koordinaatistossa! Kissalle piste nolla sijaitsee puolestaan alueen keskellä sekä pysty- että vaakasuunnassa. Luomamme ehto on siis tosi, kun kissa sijaitsee alueen ylemmällä puoliskolla. Kun kissan y-sijainti on puolestaan pienempi kuin nolla eli se on asetettu alueen alempaan puoliskoon, ehtomme on epätosi.

Varmistetaan ehdon toimivuus asettamalle se osaksi ehtolauseen sisältävää ohjelmaa. Käytetään jos x, sitten -ehtopalikkaa, ja viedään sen sisään Liike-valikon alta löytyvä aseta y:lle arvo 0 -ohjepalikka. Tämä palikka käskee kissaa liikkumaan pystysuunnassa pisteeseen 0 eli alueensa puoliväliin. Katso kuvasta mallia ja testaa ohjelmaa sijoittamalla kissa ensin alueen yläosaan ja sitten alueen alaosaan.


Ohjelma, jossa käytetään suurempi kuin -operaattoria.

Kuten tässä vaiheessa olet luultavasti huomannut, kun kissa aloittaa ruudun yläosasta, ohjelmamme siirtää sen välittömästi alueen keskelle. Tällöin luomamme ehto täyttyy eli sen totuusarvo on tosi, joten ohje ”aseta y:lle arvo 0” suoritetaan. Kun kissa puolestaan aloittaa ruudun alaosasta, se ei liiku mihinkään. Tällöin luomamme ehto jää täyttymättä eli sen totuusarvo on epätosi. Ohjetta ”aseta y:lle arvo 0” ei siis suoriteta.

Tehtävä 1: Aina oikeassa

Luo ohjelma, joka käskee kissaa liikkumaan vaakasuunnassa ruudun keskelle, jos se on sijoitettu ohjelman alussa ruudun vasemmalle puolelle. Etsi Liike-valikosta tätä varten ohjepalikka, jolla voit määrätä kissan paikan vaakasuunnassa.

Tehtävä 2: Kohti ääretöntä

Luodaan ohjelma, joka antaa kissalle ohjeet hyppiä käyttäjän käskystä. Jos tehtävässä liikkeelle lähteminen tuntuu hankalalta, aloita toteuttamaan alla olevan listan vaatimuksia kohta kerrallaan.

Ohjelman tulee toimia seuraavasti:

  • Alussa kissa kääntyy osoittamaan oikealle (90 astetta). Näin saamme käännettyä kissan vaakatasoon, jos se on ohjelman alussa vinossa. Tätä varten löydät osoita suuntaan -palikan Liike-valikon alapuolelta.
  • Tämän jälkeen kissa liikkuu vaakasuunnassa kohtaan nolla ja pystysuunnassa kohtaan nolla. Näin saamme siirrettyä kissan keskelle ruutua aloituspaikkaansa. Hyödynnä tähän mene kohtaan x y -palikkaa Liike-valikosta.

Käytä näitä palikoita ohjelmasi alussa.

  • Seuraavia ohjelman käskyjä toistetaan, kunnes käyttäjä painaa välilyöntiä:
    • Jos käyttäjä painaa nuoli ylös -näppäintä, kissa liikkuu pystysuunnassa 20 pykälää ylöspäin ja vaihtaa asusteeseen asuste2 (costume2).
      • Etsi Liike-valikosta muuta y:n arvoa -ohjepalikka, jolla voit muuttaa kissan paikkaa pystysuunnassa. Ulkonäkö-valikosta löydät puolestaan vaihda asusteeksi -palikan, jota myös tarvitset.
    • Jos edellinen ehto ei käynyt toteen, mutta kissan sijainti pystysuunnassa on suurempi kuin nolla, se liikkuu pystysuunnassa 5 pykälää alaspäin ja vaihtaa asusteeseen asuste1 (costume1).

Vinkki: ehtolauseita voi sijoittaa myös toistensa sisään.

Loogista, rakas Watson

Tosielämässä jos-alkuiset lauseet voivat koostua useammastakin kuin yhdestä ehdosta. Eräs tällainen lause olisi ”Jos ulkona ei sada ja minulla on rahaa, käyn kaupassa.” Tässä kaksi ehtoa ovat ”ulkona ei sada” ja ”minulla on rahaa”. Nämä ehdot puolestaan liitetään yhteen ja-sanalla yhdeksi isoksi ehdoksi, jonka toteutuessa suoritetaan toimenpide ”käyn kaupassa”. Huomaa myös, miten ensimmäinen ehto on pohjimmiltaan ”ulkona sataa” -ehto ympäri käännettynä ei-sanalla.




Myös tietokonetta ohjeistaessa on tarpeellista pystyä yhdistelemään ehtoja keskenään tai kääntämään niiden totuusarvo päinvastaiseksi. Tätä varten ovat olemassa loogiset operaattorit. Tavanomaisimmat loogiset operaattorit ohjelmoinnissa ovat tai, ja sekä ei. Näin on asian laita myös Scratchin tapauksessa. Scratchissa löydät ne Toiminnot-valikon alta.


Scratchin loogiset operaattorit.

Kuvan tai-ehto käy toteen, kun käyttäjä painaa välilyöntiä tai hiiren näppäintä ei paineta.

Kuvan ehto käy toteen, kun hiiren osoitin on vaakasuunnassa koordinaattien -100 ja 100 välissä.

Scratch-pähkinä 1

Tässä ja seuraavassa kahdessa pulmapähkinätehtävissä täytyy selvittää, millä kaikilla x- ja y-sijainnin arvoilla annettu ehto on tosi. Ole tarkkana, mitkä palikat on kuvissa aseteltu toistensa päälle, sillä se määrää, mitkä kaksi ehtoa ja- sekä tai-operaattorit liittävät kussakin tapauksessa yhteen.

Millä kaikilla seuraavista x- ja y-sijainnin arvoista ehto on tosi?
x = 50, y = 30
x = 60, y = -40
x = 40, y = 40
x = -55, y = 35
x = - 50, y = -50
x = 0, y = 0

Scratch-pähkinä 2

Millä kaikilla seuraavista x- ja y-sijainnin arvoista ehto on tosi?
x = 0, y = 0
x = 0, y = 1
x = -1, y = 1
x = 100, y = 100
x = 0, y = -100
x = -200, y = -100

Scratch-pähkinä 3

Millä kaikilla seuraavista x- ja y-sijainnin arvoista ehto on tosi?
x = - 1, y = -1
x = 1, y = -1
x = 0, y = 0
x = -1, y = -1
x = 1, y = 1
x = 2, y = 1

Tehtävä 3: Hyppytunti

Loogiset operaattorit sisältävät ehtopalikat löydät Scratchissa Toiminnot-valikon alta. Tarvitset yhtä niistä tässä tehtävässä. Luomme seuraavaksi ohjelman, joka muistuttaa paljon tehtävässä kuusi luomaamme ohjelmaa, mutta tällä kertaa kissa ei voi jatkaa painovoiman uhmaamista äärettömiin.

Ohjelman tulee toimia seuraavasti:

  • Alussa kissa kääntyy osoittamaan oikealle. Tätä varten löydät osoita suuntaan -palikan Liike-valikon alapuolelta
  • Tämän jälkeen kissa liikkuu vaakasuunnassa kohtaan nolla ja pystysuunnassa kohtaan nolla. Käytä tähän mene kohtaan x y -palikkaa Liike-valikosta.
  • Seuraavia ohjelman käskyjä toistetaan, kunnes käyttäjä painaa välilyöntiä:
    • Jos käyttäjä painaa nuoli ylös -näppäintä silloin, kun kissan sijainti pystysuunnassa on nolla, kissa liikkuu pystysuunnassa 100 pykälää ylöspäin.
    • Jos kissan sijainti pystysuunnassa on suurempi kuin nolla, se liikkuu pystysuunnassa 5 pykälää alaspäin.

Asusteiden vaihtoa ei tässä tehtävässä tarvitse toteuttaa.

Soveltaminen

Kuten edellisessä luvussa, rakennamme näissä kahdessa soveltavassa tehtävässä jo tekemämme ohjelman pohjalle lisää ominaisuuksia saaden lopputuloksena aikaan yksinkertaisen pelin. Lähde liikkeelle kolmannesta tehtävästä. Kiinnitä huomiota jälleen siihen, miten iso kokonaisuus saadaan vähitellen aikaan ratkaisemalla pieniä osaongelmia.

Viimeinen tehtävä on tällä kertaa merkitty tavallista vaativammaksi. Erikoishaastavat tehtävät tunnista tästä eteenpäin asteriski- eli *-merkistä. Viimeisessä tehtävää varten saatat myös joutua kertaamaan, miten Scratchissa luodaan uusi ohjeistettava hahmo. Lue tarvittaessa siis edellisen luvun ohjeet uudelleen.

Tehtävä 4: Pomppulinna

Lähde liikkeelle tehtävästä 3. Muokkaa ohjelmaa siten, että pelkän paikallaan hyppimisen sijaan kissaa voi myös liikuttaa vaakatasossa vasemmalle ja oikealle vastaavia nuolinäppäimiä käyttäen. Kullakin silmukan kierroksella kissan sijainnin kuuluu muuttua vasemman tai oikean nuolinäppäimen painalluksesta näppäimen osoittamaan suuntaan 20 pykälää. Toteuta nämä tarkistukset jos x, niin -palikoita hyödyntäen. Kaikki muu ohjelmassa säilyy ennallaan.

Kun ohjelma on valmis, pystyt hyppimään kissallasi painamalla nuoli vasemmalle- tai nuoli oikealle -näppäimen pohjaan yhtä aikaa nuoli ylös -näppäimen kanssa!

Tehtävä 5: Agilitykissan esterata*

Tämä tehtävä on tavallista vaativampi soveltava tehtävä. Jatkossa huomaat kaikki erikoishaastavat tehtävät asteriski- eli *-merkistä!

Jatka edellisen tehtävän pohjalta. Ohjelmoidaan peli, jossa pelaajan nuolinäppäimillä ohjastaman kissan pitää hyppimällä väistellä kentällä edestakaisin liikkuvaa estettä.

Lisää kissan rinnalle uusi hahmo. Käytä esteenä kuvan kaltaista lastaa, joka löytyy hahmokirjastosta Asiat-kategoriasta.

Asiat-kategoriasta valittu uusi hahmo.

Aukaise uuden estehahmosi Skriptit-välilehti ja anna hahmolle seuraavanlaiset ohjeet aloituspaikalleen siirtymiseen:

  • Ohjelma aloitetaan, kun vihreää lippua painetaan.
  • Hahmo kääntyy osoittamaan suuntaan 90 astetta. Käytä tähän osoita suuntaan -palikkaa.
  • Tämän jälkeen hahmo menee vaakasuunnassa kohtaan 100 ja pystysuunnassa kohtaan -50. Käytä tähän mene kohtaan x y -palikkaa.
  • Hahmo odottaa vielä yhden sekunnin, että pelaaja on valmiina. Tätä varten löydät odota n sekuntia -palikan Ohjaus-valikon alta.

Näiden ohjeiden perään liitä vielä ohjeet hahmon liikkumista varten:

  • Seuraavia ohjeita toistetaan, kunnes käyttäjä painaa välilyöntiä tai kosketaan kissahahmoa:
    • Liiku 2 pykälää eteenpäin.
    • Jos kosketetaan reunaa, pomppaa reunasta

Ohjelman alussa lastan tulisi asettua paikoilleen ja alkaa sen jälkeen liikkua vaakatasossa edestakaisin.

Luotuasi tämän ohjelman, testaa sitä uudelle hahmollesi. Tämän jälkeen klikkaa kissahahmon ikonia Hahmot-tekstin alapuolella. Muokkaa sille edellisessä tehtävässä annettuja ohjeita seuraavasti:

  • Ohjelma aloitetaan, kun vihreää lippua painetaan.
  • Kun kissa on liikkunut kohtaan nolla vaaka- ja pystysuunnassa, odotetaan vielä sekunti, että pelaaja on valmiina. Tähän voit käyttää odota n sekuntia -palikkaa.
  • Edellisessä tehtävässä ohjelman käskyjä toistettiin niin kauan, kunnes käyttäjä painaa välilyöntiä. Nyt haluamme, että niitä toistetaan, kunnes käyttäjä painaa välilyöntiä tai kosketaan uuteen hahmoon.
  • Jos ohjelman lopussa ollaan kosketuksissa lastahahmon kanssa, naukaistaan. Naukaisua ei soiteta loppuun.

Testaa tämän jälkeen laajennettuja ohjeita kissahahmollesi. Sen jälkeen käynnistä ohjelma molemmille hahmoille vihreää lippua klikkaamalla ja kokeile väistellä palikkaa kissallasi mahdollisimman kauan nuolinäppäimillä sitä ohjaten! Voit hyppiä ympäriinsä painamalla yhtä aikaa nuoli ylös -näppäintä ja nuoli vasemmalle- tai nuoli oikealle näppäintä. Pelissä on ainakin eräs tapa huijata. Keksitkö, mikä se on?



Leikki- ja peli-ideoita

Eräs pätevä tapa ehtolauseiden ja operaattoreiden opettelemiseen on edellä Python-pähkinänä esitelty ehtolauselabyrintti. Leikin periaate on seuraava:

  • Pelinjohtaja luo ehtolauseista koostuvan labyrintin, jossa ehdon toteutuminen ja toteutumatta jääminen johtavat molemmat uusiin ehtolauseisiin.
  • Ehtolauseiden ehdot testaavat muiden pelaajien antamaa sanaa tai lukua.
  • Ehdot voivat sisältää loogisia operaattoreita ja lukujen tapauksessa vertailuoperaattoreita.
  • Labyrintissa vain yksi sana tai luku johtaa pelaajat vaadittuun reittiin.
  • Oikea reitti voidaan merkitä esimerkiksi ripottelemalle sen varrelle tavuja, joista muodostuu yhteenliitettynä pelaajia onnitteleva viesti.
  • Pelaajat yrittävät arvata oikeaa sanaa tai lukua, jolla he saisivat kuljettua oikeaa reittiä ja kerättyä labyrinttiin ripotelluista tavuista onnitteluviestin.
  • Jos labyrintti vaatii arvauksena lukua, ehtoina voidaan käyttää matemaattisia vertailuoperaattoreita.
  • Jos puolestaan arvataan sanaa, ehdot voivat liittyä esimerkiksi sanasta löytyviin kirjaimiin, tavuihin, sen sanaluokkaan ja niin edelleen.
  • Leikkiä voidaan vaikeuttaa piilottamalla aluksi kaikki labyrintin ehtolauseet sekä sinne ripotellut tavut ja paljastamalla niitä sitä mukaa, kun niihin pelaajien arvauksien myötä törmätään.
Ehtolauselabyrintillä voidaan opetella ehtolauseita leikin kautta.

Kuvalähteet

  1. Funepa licks Petey, Leif K-Brooks, lisenssi: CC BY-SA 2.0, muokkaus: teksti lisätty, kuvaa rajattu, koiran silmää muokattu.