lauantai 4. marraskuuta 2017

Ylioppilastehtävä ennen ja nyt

Jossakin Facebook-keskustelussa nousi esiin vuoden 1960 ylioppilastehtävien vertailu digiajan mahdollisuuksiin. Kevään ensimmäinen pitkän matematiikan tehtävä oli tuolloin seuraava:

Laske kaikkien niiden positiivisten kolminumeroisten kokonaislukujen summa, jotka eivät ole jaollisia 9:llä eivätkä 11:llä.

Epäilen, olisiko tehtävä voinut olla ensimmäisenä enää muutaman viime vuosikymmenen aikana, vaikka se onkin puhtaasti numeerinen. Jotta työmäärästä ei tulisi kohtuutonta tarvitaan kyllä jokin matemaattinen idea: tietyllä tekijällä jaolliset luvut muodostavat aritmeettisen jonon. Laskemalla muutama aritmeettinen summa päädytään melko helposti tulokseen 399 996.

Toisiko laskenta- tai digitaalitekniikka sitten jotakin uutta tehtävän ratkaisemiseen?

Jos yksinkertainen ohjelmointi ohjausrakenteineen on käytettävissä, tehtävä ratkeaa sangen suoraviivaisesti. Muutama vuosikymmen sitten olisi käytetty BASIC-kieltä:
 
Sama onnistuu Nspire-laskimella tai vastaavalla tietokoneohjelmalla, joskin käsittääkseni suoraa skriptiä ei voida kirjoittaa vaan laskenta on paketoitava ohjelmaksi:

Tällainen laskenta on tietenkin periaatteessa raa'an voiman käyttöä, käydäänhän siinä lävitse kaikki kolminumeroiset kokonaisluvut ja testataan jokaisen jaollisuus. Käsin laskettaessa tässä ei olisi mieltä, mutta koneella laskettaessa tulos tulee saman tien ja ohjelman kirjoittaminenkin on varsin suoraviivaista.

On esitetty, että ohjelmoinnin opettaminen koulussa voisi perustua eräänlaisen palikkamallin käyttöön. Silmiini osui sattumalta Mika Spåran kehittelemä BlockyMath, PalikkaMatikka, http://beeblebrox.edu.hel.fi/bm/. Tällä myös onnistuu:
Ohjelmointityylejä on erilaisia eikä toistosilmukan käyttö ole välttämätöntä, jos kielestä löytyy muita sopivia komentoja tai funktioita. Esimerkkeinä Nspire ja GeoGebra:



Nspiren koodi on tosin hieman kryptinen: iso sigma -summaus syntyy funktiolla sumSeq (tai valikosta) ja symboli ifFn on myös erikoinen. Käyttäjänhän täytyy hallita tämmöiset. GeoGebra on myös hieman ongelmallinen: jos syötteestä jättää Sequence-funktion pois, mistään syntaksivirheestä ei varoiteta, mutta tulos on väärä. Sama rakenne toimii oikein Mathematicassa.

Kumpi ratkaisutapa sitten olisi parempi, ohjelmointi vai aritmeettiset summat käsin laskettuina? Riippuu tietenkin paremmuuden kriteereistä. Ehkä aritmeettisten summien käyttö painottaa jonkinlaista matemaattista ajattelua, ohjelmointi taitoa jäsentää ongelma ja muodostaa algoritmi sen ratkaisemiseen. En osaa valita näiden välillä, mielelläni ottaisin molemmat. Opetussuunnitelman laatijan ongelma on tietenkin juuri tässä. Kaikkea ei voi saada.

Esimerkki kuitenkin osoittaa, että ohjelmoinnilla on sijansa matematiikassa. Sitä ei pidä perusteitta hylätä, vaan etsiä luontevaa sijoituspaikkaa kurssirakenteeseen.