Ehtolause ja algoritminen ajattelu

Miten opettaa ehtolause ja samalla yhdistää siihen algoritmista ajattelua ?

Tässä jutussa käsitellään ohjelmointia yleisesti, eikä asian ymmärtämiseen tarvita yleistä ohjelmointikielen osaamista.

Ohjelmointi on ongelman ratkaisemista.

Ohjelmoinnissa – EHTO – on etukäteen asetettu vaatimus, jonka toteutuminen ohjaa laitteen toimintaa. Esimerkiksi, jos nappula painetaan pohjaan tapahtuu jotain. Ehtoja voi olla yksi tai useita – riippuen aivan ehtolauseen rakenteesta. Yleensä, ehdon toteutuminen ohjaa laitteen/ohjelman toimintaa ennalta mietittyyn reaktioon. Ohjelmoinnin opettelussa, ehtolauseen toiminnan ymmärtäminen on yleensä ensimmäisiä vaatimuksia kun alkeista lähdetään liikkumaan eteenpäin.

Algoritminen ajattelu ymmärretään taasen kykynä analysoida ja ratkaista ongelmia sekä ymmärryksenä siitä miten yksinkertaiset toistuvat ohjelmakuviot auttavat ongelmien ratkaisemisessa.

ALKUTILANNE – Ongelman antaminen

Jutun kirjoittaja yleensä ohjelmointia opettaessaan antaa tehtävät kolmen ryhmissä. Alussa antamaan kaksi tehtävää, jotka kaikki ratkaisevat vaivatta ja lopuksi yksi hankalampi. Ehtolauseen opetuksessa on käytössä ollut seuraavanlainen tehtävä ja laitetyyppi.

1. Pyörillä liikkuva laite, jonka etuosassa on yksi tai kaksi törmäysanturia. Tämä minimivarustus.
2. Järeämpiä höylättyjä lankunpätkiä, joista voi rakennella erilaisia tehtäviä/ratoja.

Tehtävä on seuraava:
Kentissä 1-2. Pitää laitteen ajaa ulos lähtöruudusta, johonkin suuntaan kääntyen esteen havaittuaan.
Kentässä 3. on sokkelo, jossa on suorat seinät ja vähintään kolme poikkiseinää. Laitteen pitää ajaa ulos lähtöruudusta samalla koodilla, kun labyrintti on myös peilikuva itsestään. Siis kaksi labyrinttiä.

Mitä opetetaan aluksi

– Käytössä olevan laitteen perustoiminnot, kuten miten liikkuu, eteenpäin/taaksepäin. Pysähtyy. Kääntyy.
– Mikä on ehtolause ja havainnollistetaan ehtolauseen toimintaa tekemällä vaikkapa ohjelmakoodi jossa laite ajaa eteenpäin-törmää-pysähtyy ja kääntää kulkusuuntaansa. Lisäksi puhutaan erityyppisistä ehtolauseista. Ehtotyyppiä valittaessa on mietittävä mikä ehtolause soveltuu tehtävään parhaiten.
– Miten ohjelmakoodi syötetään laitteeseen ja miten laitteen saa kytkettyä tilaan jossa tehty koodi suoritetaan.

Tehtävä ruudut 1-2 ovat oppilaille yleensä helppoja. Niitä voi myös luonnehtia perusharjoitteiksi, joissa opetellaan perustaitoja eli lähtemään liikkeelle – pysähtymään ja tekemään ehtolause.

1.Laite ohjelmoidaan:
– Lähtemään liikkeelle.
– Odotetaan kunnes… Kun edessä oleva anturi painuu pohjaan.
– Laite pysähtyy.
– Käännetään laite 90ast oikealle.
– Pysäytetään laite.
– Lähdetään taas liikkeelle eteenpäin.

2.Laite ohjelmoidaan:
– Lähtemään liikkeelle.
– Odotetaan kunnes… Kun edessä oleva anturi painuu pohjaan.
– Laite pysähtyy.
– Peruutetaan takaisinpäin
– Laite pysähtyy.
– Käännetään laite 90ast oikealle.
– Pysäytetään laite.
– Lähdetään taas liikkeelle eteenpäin.

 

Mutta… Tehtävä kolme on erilainen. Siinä on kaksi erilaista labyrinttiä, jotka ovat peilikuvat toisistaan. Ne ratkeavat myös liikkumalla eteenpäin ja törmäämällä. Mutta jotain onkin nyt eritavalla? Osa oppilaista lähtee ratkaisemaan ongelmaa aivan kuin tehtäviä yksi ja kaksi. Laite kääntyy oikealle ja vasemmalle jne… Ongelma tulee esille kun labyrintti muutetaan peilikuvaksi itsestään. Enää laite ei menekään labyrintistä läpi. Pitää tehdä algoritmista ajattelua eli suunnitella, mitä laiteen pitäisi tehdä ennen kuin ohjelmoidaan.

Laitteen pitää siis läpäistä molemmat labyrintit samalla ohjelmakoodilla.

Ongelman ratkaisemisen kannalta olisi tärkeää saada oppilas piirtämään kuvioita ja harakanvarpaita suttupaperille, juttelemaan ja pohtimaan. Ratkaisu on varsin yksinkertainen mutta siihen pääsemiseksi oppilaan pitää oppia tekemään ongelman ratkaisua. Yritystä ja erehtymistä. Annetaan vinkkejä ja kehotetaan vaikka ”laatikon” kanssa käsipelillä ajamaan labyrinttia lävitse ja miettimään miten laitteen pitää reagoida. Kannustaa yrittämään ja miettimään. Vinkiksi voi heittää, että miettikää kääntymisjärjestyksiä.

Mikä on ratkaisu?

Ratkaisu on miettiä missä järjestyksessä käännytään. Ratkaisun ydin on löytää kääntymisistä itseään toistavia kuvioita, kuten kuvassa oikealla. Siinä oikean ja vasemman radan kääntymisjärjestykset on listattu. Nopeasti katsomalla niistä ei löydy mitään yhtenäistä. Se nopeus onkin juuri oppilaan ongelmanratkaisun turma.

Kun lähdetään siirtämään jompaa kumpaa riviä alaspäin – tapahtuukin ihme.  Sieltä löytyy samanlainen itseään toistava kääntymisjärjestys. Kun toistamme löytynyttä järjestystä loputtomiin kulkee laite miten pitkästä labyrintistä tahansa lävitse.
Vasen – oikea – oikea – vasen. Tarvitsee ohjelmoida vain neljä käännöstä ja laite kulkee aina oikein. Mallisuoritus youtubessa.

Labyrintissä olisi hyvä siis olla vähintään kolme poikkiseinää niin kääntymisjärjestystä pohdittaessa löytyy säännönmukainen kuvio paljon helpommin.

Ohjelmointi on yksinkertaisten säännöllisten kuvioitten tunnistamista ja hyväksikäyttämistä.

Millaisia ovat yleiset ehtolauseen tyypit?

Tässä esimerkkinä kahden C-kielisen ohjelmointikielen ehtotyypit. Näitä luovasti yhdistelemällä saa ratkaistua kaiken. Esimerkin mukaisessa koodissa käyttäisin lähinnä WAIT UNTIL tyyppistä ehtolausetta. WAIT-UNTIL tyyppinen ehtolause pysäyttää ohjelmakoodin etenemisen kunnes ehto on tosi. Toiset ehtolauseet taasen hyppäävät ehdon yli jos se ei ole sillä hetkellä tosi kun sen vuoro tulee ohjelmakoodin suorituksessa. Jos hypätään ehtolauseen yli niin kääntymisjärjestys menee sekaisin. Toisissa ehtolauseissa ehto ja sen tila tarkistetaan ehtolauseen lopussa jne… Ehtolauseen valinta ei ole aina alussa helppoa.

Harri Bläuer