Maailmantutkijan kasvatuskirja

Luku 7: Ohjelmoinnin alkeet

7.1 Komentosarjat ja muuttujat

Tarvikkeet Kynä ja paperia. Paljon paperilappuja (esim. muistilappuja).

Ohjeet

Kirjoita kahdelle lapulle yksi luku kummallekin (esim. $3$ ja $5$). Nimeä nämä laput kirjoittamalla niiden kulmiin “$a$” ja “$b$”. Laita pöydälle myös yksi tyhjä paperilappu ja nimeä se merkinnällä “$c$”. Lisäksi laita pöydälle yksi A4-paperiarkki.

Selitä lapselle harjoituksen säännöt, jotka ovat seuraavat:

Hänellä on käytössänsä yhteenlaskun plussa $+$, joka laskee kahdessa lapussa olevien lukujen yhteenlaskun ja kirjoittaa vastauksen kolmannelle paperilapulle. Esimerkiksi

a + b → c

kirjoittaisi lappujen $a$ ja $b$ lukujen summan lapulle $c$ (esim. $3 + 5 = 8$). Lappujen $a$ ja $b$ luvut pysyvät muuttumattomina.

Käytetyt operaatiot kirjoitetaan A4-paperille muistiin.

Operaatioita voi tehdä useammankin. Esimerkiksi jos paperille kirjoittaa

a + b → c
a + c → c

suoritettaisiin ensiksi ensimmäinen operaatio (paperille $c$ kirjoitetaan $3 + 5 = 8$) ja sitten toinen operaatio (jolloin paperin $c$ luku korvataan luvulla $3 + 8 = 11$).

Huomaa, että plus-operaatio ylikirjoittaa aiemman luvun tilalle uuden. Sitä voi soveltaa myös niin, että sama lappu esiintyy komennossa yli yhden kerran. Ylikirjoittaessa yliviivaa lapussa aiemmin ollut luku ja kirjoita uusi, ja jos paperi alkaa olla liian sotkuinen, korvaa se uudella.

Huomaa, että operaatioihin ei vielä saa kirjoittaa lukuja (esim. $3$), vaan ainoastaan lappujen nimiä (esim. $a$).

Aktiviteetti 1: sääntöjen ymmärrys

Varmista, että lapsi ymmärtää tämän kaiken: Laita pöydälle muutama lappu ja kirjoita niihin lukuja. Kysy seuraavanlaisia kysymyksiä:

  • Mikä luku on kirjoitettu lappuun $c$?
  • Mihin lappuihin on kirjoitettu luku $3$?
  • Mitä komento $b + c \to a$ tekee: mikä luku kirjoitetaan mihin lappuun? Entä komento $b + b \to b$?

Aktiviteetti 2: tavoiteluvun muodostaminen

Anna lapselle aina alkutilanne, jossa kolmelle lapulle on kirjoitettu jotkin luvut, ja joissa lapsen täytyy sitten muodostaa tietty tavoiteluku. Haaste on kiinnostavampi, jos yrittää onnistua mahdollisimman pienellä määrällä siirtoja. Esimerkkejä:

  1. Luvut: $3, 4$ ja $5$. Tavoiteluku: $8$. (Onnistuu yhdellä siirrolla.)
  2. Luvut: $2, 3$ ja $4$. Tavoiteluku: $9$. (Onnistuu kahdella siirrolla.)
  3. Luvut: $1, 2$ ja $3$. Tavoiteluku: $8$. (Onnistuu kahdella siirrolla.)
  4. Luvut: $1, 3$ ja $5$. Tavoiteluku: $11$. (Onnistuu kahdella siirrolla.)
  5. Luvut: $1, 2$ ja $3$. Tavoiteluku: $15$. (Onnistuu kolmella siirrolla.)
  6. Luvut: $2, 5$ ja $6$. Tavoiteluku: $19$. (Onnistuu kolmella siirrolla.)
  7. Luvut: $2, 3$ ja $5$. Tavoiteluku: $17$. (Onnistuu kolmella siirrolla.)
  8. Luvut: $3, 4$ ja $5$. Tavoiteluku: $23$. (Onnistuu kolmella siirrolla.)
  9. Luvut: $1, 2$ ja $3$. Tavoiteluku: $17$. (Onnistuu neljällä siirrolla.)
  10. Luvut: $3, 4$ ja $6$. Tavoiteluku: $25$. (Onnistuu neljällä siirrolla.)

Pyydä lasta aina kirjoittamaan tehtävän ratkaiseva komentosarja paperille. Jos lapsi ei osaa kirjoittaa tai se olisi muuten epämiellyttävää, voit myös kirjoittaa komentosarjan itse lapsen kuvaillessa sen. Näytä valmista komentosarjaa lapselle aina tehtävän valmistuttua – se valmistaa häntä monimutkaisemmille komentosarjoille.

Voit myös kokeilla antaa lapselle tehtävän, jossa kaikki luvut ovat parillisia (esim. $2, 4$ ja $6$) ja tavoiteluku on pariton (esim. $25$). Seuraa, hoksaako lapsi, että tämä ei ole mahdollista.

Jos haluaa vielä lisäpuuhaa, niin voi yrittää selvittää, kuinka monta siirtoa tarvitaan aloitusluvuista $1, 1$ ja $1$ eri tavoitelukuihin pääsemiseksi. Alla olevasta taulukosta löytyy minimimäärä siirtoja tavoiteluvuille, jotka ovat enintään $50$.

10115216317417
21124226325427
32135236336437
42145245346447
53155256357457
63164266366467
74175276377478
83185286387486
94196297397497
104205306406507

Aktiviteetti 3: kaikissa tapauksissa toimivat ratkaisut

Käsittele sitten seuraavaa tehtävää: Pöydällä on viisi lappua. Niistä neljään on kirjoitettu jotkin luvut. Tavoitteena on saada kirjoitettua viidenteen lappuun luku, joka on suurempi kuin mikään näistä neljästä luvusta. (Ensimmäisen neljän lapun lukuja ei saa ylikirjoittaa muilla komennoilla.)

Lapsi voi tarjota tähän monenlaisia ratkaisuja riippuen lappuihin kirjoitetuista luvuista. Jos lappujen luvut esimerkiksi ovat $1, 2, 3, 4$, voisi lapsi tarjota komentosarjan

c + d → e

Komentosarja toimii tässä tapauksessa, mutta ei toimisi, jos lappujen luvut olisivat vaikkapa $4, 3, 2, 1$.

Siispä kysy lapselta, toimiiko tämä komentosarja jokaisessa mahdollisessa tapauksessa. Pyydä häntä keksimään ratkaisu, joka toimii kaikissa tilanteissa.

Voit konkretisoida tätä seuraavilla tavoilla:

  • Kirjoita lappuihin luvut lapselta piilossa ja laita laput ylösalaisin pöydälle. Nyt lapsen tulee sanoa komennot ilman, että hän tietää lappujen lukuja. (Huomaa, että hän voi silti onnistua yhdessä tapauksessa, vaikka ratkaisu ei toimisikaan aina.)
  • Kysy lapselta, toimisiko esimerkiksi komentosarja

    a + b → e
    a + c → e
    

    kaikissa tapauksissa. (Tämä ei toimi, jos lapun $d$ luku olisi hyvin suuri, siis esimerkiksi $1, 2, 3, 10$.) Pyydä häntä keksimään tapaus, jossa se ei toimi.

  • Pyydä lasta kirjoittamaan komentosarja paperille etukäteen ennen kuin sinä kirjoitat luvut lapulle. Tällöin jos komentosarja ei toimi kaikissa tapauksissa, voit valita juuri sellaiset luvut, joissa se epäonnistuu.

Tässä on lista tehtävistä, joissa halutaan ratkaisu, joka toimii kaikissa tapauksissa.

  1. Yllä mainittu esimerkki: neljällä lapulla on luvut ja viidenteen halutaan luku, joka on suurempi kuin kaikki neljä edellistä.
  2. Kahdelle lapulle on kirjoitettu luvut. Kolmanteen lappuun halutaan luku, joka on suurempi kuin $15$.
  3. Kahdelle lapulle on kirjoitettu luvut. Kolmanteen lappuun halutaan luku, joka on parillinen.
  4. Kahdelle lapulle kirjoitetaan luvut. Ensimmäisen lapun luku on vähintään $5$ ja enintään $10$. Toisen lapun luku on väliltä $20$ ja $30$. Kolmanteen lappuun halutaan luku, joka on väliltä $25$ ja $40$.
  5. Kahdelle lapulle kirjoitetaan luvut. Ensimmäisen lapun luku on vähintään $2$ ja enintään $6$. Toisen lapun luku on väliltä $6$ ja $8$. Kolmanteen lappuun halutaan luku, joka on väliltä $20$ ja $30$.

(Kaikissa näissä tehtävissä oletetaan, että luvut ovat positiivisia kokonaislukuja: ei negatiivisia lukuja eikä desimaalilukuja.)

Voit myös käyttää tehtävää, jossa kahdesta luvusta halutaan tuottaa pariton luku kolmannelle lapulle. Tähän ei ole ratkaisua, joka toimisi aina. Erityisesti mikään komentosarja ei toimi tapauksessa, jossa molemmat aloitusluvut ovat parillisia. Testaa, huomaako lapsi tämän.

Selitys

Tämä harjoitus tutustuttaa lapselle kolmea hyödyllistä konseptia.

Yksi on idea komentosarjoista. Erilaisia prosesseja pystyy kuvaamaan sarjalla yksinkertaisia, yksiselitteisiä komentoja. Tietokoneet osoittavat, kuinka pitkillä ja monimutkaisilla komentosarjoilla pystyy ratkomaan yllättävänkin vaikeita ja tärkeitä oikean maailman ongelmia. (Lapselle ei kuitenkaan vielä tarvitse puhua tietokoneista.)

Toinen on muuttujat. Monessa tilanteessa on kätevää, kun lukuihin voi viitata jollakin nimellä. Tehtävissä tulikin vastaan tällainen tilanne: lapussa oleva luku ei ollut tiedossa (koska vanhempi oli kääntänyt paperin ylösalaisin tai koska sitä muutettiin eri tapauksien välillä). Tällöin on kätevää pystyä puhumaan “siitä luvusta, joka on tuossa lapussa”. Yleensä kätevyyden vuoksi nimet ovat yksikirjaimisia tai muuten lyhyitä.

(Ja vaikka lapputehtävät ovatkin keinotekoisia, vastaavaa ilmiötä tulee jatkuvasti vastaan oikeassa elämässä: esimerkiksi “tuon puun korkeus metreinä” ja “kaupan tänään myymien mehupurkkien määrä” ovat nimiä luvuille, joita ei tiedetä.)

Kolmas on validi päättely. Yksi ajattelun kulmakivi on johtopäätösten tekeminen havainnoista ja oletuksista: “jos tämä ja tuo asia pätevät, niin sitten pätee myös tämä asia”. Näissä tehtävissä tätä harjoitellaan muodossa “jos tämä komentosarja suoritetaan ja lappujen luvut ovat positiivisia, niin lopuksi tuossa lapussa oleva luku on suurempi kuin minkään muun lapun luku”.

Päättelyssä on tärkeää, että se toimii kaikissa mahdollisissa tapauksissa: ei saisi tapahtua niin, että oletukset pätevät ja niistä kuitenkin saadaan “pääteltyä” jotakin, mikä ei päde. Jos näin käy, niin päättelyssä on mennyt jotakin vikaan (tai oletukset eivät pädekään).

Siten vaikka esimerkiksi komento “$c + d \to e$” tuottaisikin joissakin tapauksissa halutun lopputuloksen, ei olisi oikein sanoa “jos lappujen luvut ovat positiivisia ja tämä komento suoritetaan, niin lopuksi viidennessä lapussa on suurempi luku kuin muissa lapuissa”: johtopäätös ei seuraa oletuksista.

Ratkaisuja

Tässä on valikoituihin tehtäviin ratkaisuja.

“Luvut: $2, 3$ ja $4$. Tavoiteluku: $9$. (Onnistuu kahdella siirrolla.)”

Jos lapuilla $a$, $b$ ja $c$ on luvut $2$, $3$ ja $4$, luvun $9$ voi tuottaa lappuun $c$ seuraavalla komentosarjalla:

a + b → a
a + c → c

“Luvut: $3, 4$ ja $5$. Tavoiteluku: $23$. (Onnistuu kolmella siirrolla.)”

Yksi muttei ainut ratkaisu:

c + c → c
c + c → c
a + c → c

“Neljällä lapulla on luvut ja viidenteen halutaan luku, joka on suurempi kuin kaikki neljä edellistä.”

a + b → e
c + e → e
d + e → e

Tällöin lapussa $e$ on lappujen $a, b, c$ ja $d$ lukujen summa. Kun luvut ovat positiivisia, on summa suurempi kuin mikään luku yksinään.

Ongelmaa ei pysty ratkaisemaan vain kahdella komennolla: silloin jää aina joitakin tapauksia, joissa komentosarja ei toimi.

Lukua $15$ suurempi luku muodostuu seuraavasti:

a + a → c
c + c → c
c + c → c
c + c → c

Tehtävissä oletetaan, että lapuissa aluksi olevat luvut ovat positiivisia kokonaislukuja ja siten vähintään $1$. Tästä huomataan, että lappuun $c$ kirjoitetaan aluksi luku, joka on vähintään $1 + 1 = 2$. Toisen komennon jälkeen lapun luku on vähintään $2 + 2 = 4$, kolmannen komennon jälkeen vähintään $4 + 4 = 8$ ja neljännen komennon jälkeen vähintään $8 + 8 = 16$.

Mikään kolmen komennon sarja ei toimi, jos lappuihin $a$ ja $b$ on aluksi kumpaankin kirjoitettu $1$.

“Kahdelle lapulle kirjoitetaan luvut. Ensimmäisen lapun luku on vähintään $2$ ja enintään $6$. Toisen lapun luku on väliltä $6$ ja $8$. Kolmanteen lappuun halutaan luku, joka on väliltä $20$ ja $30$.”

Tähän toimii seuraava komentosarja:

b + b → c
b + c → c
a + c → c

Koska lapun $a$ luku on vähintään $2$ ja lapun $b$ luku on vähintään $6$, lappuun $c$ kirjoitetaan aluksi luku joka on vähintään $12$, sitten vähintään $18$ ja lopuksi vähintään $20$.

Vastaavasti koska lapun $a$ luku on enintään $6$ ja lapun $b$ enintään $8$, lappuun $c$ kirjoitetaan järjestyksessä luvut, jotka ovat enintään $16, 24$ ja $30$.