Siirry pääsisältöön

Ohjelmointia pitkässä matematiikassa - miten käytännössä?


OPH on julkaissut pe 15.3.2019 kommentoitavaksi luonnoksen lukion opetussuunnitelman perusteista 2019. Luonnokseen voi tutustua täällä.

while True:
    print("Vihdoin ohjelmointia lukiossa!")


Tartun näin julkaisupäivän iltana yhteen yksityiskohtaan: Valinnaisiin opintoihin kuuluva moduuli "Maa11 Algoritmit matematiikassa" sisältää ohjelmointia! Pidän uudistusta erittäin tervetulleena, onhan matematiikan soveltamisessa ohjelmoinnista suuri apu. (Paljon suurempi kuin esimerkiksi CAS-laskennasta, jota lukiossa harjoitellaan paljon.) Uudistus sopii myös hyvin yhteen peruskoulun vuoden 2014 opetussuunnitelman perusteiden kanssa, joiden myötä ohjelmointia tuotiin hieman peruskoulun matematiikan opetukseen.

Sisältö

LOPS-luonnosta lainaten moduulin MAA11 keskeiset sisällöt ovat
  • konnektiivit ja totuusarvot
  • kokonaislukujen jaollisuus ja jakoyhtälö
  • Eukleideen algoritmi
  • aritmetiikan peruslause
  • algoritmisen ajattelun peruskäsitteet: sekvenssi, ehto ja toisto
  • matemaattisten ongelmien ratkaiseminen ohjelmoimalla
Rupesin miettimään, millaisen kurssin näistä aineksista voisi kasata. Syksyllä 2021 peruskoulusta tulevat ikäluokat ovat jo tutustuneet ohjelmointiin, mutta mahdollisesti varsin kevyesti. Ohjelmointiosion tulee siis lähteä alkeista ja sallia osaavammille nopeampi eteneminen kurssin ylittävään osioon.

Jos käytettävissä on esimerkiksi 17 kappaletta 75 min oppitunteja, kurssi voisi näyttää tältä.
  1. Logiikka (4 oppituntia)
    - Luonnollisen kielen ja formaalin kielen ero, looginen päättely
    - Loogiset konnektiivit "ja", "tai", "ei", totuusarvotaulut
    - Implikaatio ja ekvivalenssi
    - Loogiset portit ja tietokoneen toiminnan perustuminen logiikalle
  2. Lukuteoria (4 oppituntia)
    - Jaollisuus ja jakoyhtälö
    - jaollisuussäännöt luvuille 2 - 11
    - suurin yhteinen tekijä ja Eukleideen algoritmi
    - Alkuluvun käsite, Eratostheneen seula, aritmetiikan peruslause
  3. Ohjelmoinnin alkeet (5 oppituntia, esimerkit lukuteoriasta)
    - Ohjelmoinnin perusidea, ensimmäinen ohjelma "Hello World"
    - Käyttäjältä syötteen kysyminen, ehtolauseet (if-else-rakenne)
    - Edellisen harjoittelua, katsaus tietotyyppeihin (teksti, kokonaisluku, liukuluku, lista)
    - silmukat: while-komento
    - harjoittelua
  4. Muiden matemaattisten ongelmien ratkaisua ohjelmoimalla (4 oppituntia, käsitelty laajuus opiskelijoiden oman etenemistahdin mukaan, osalle jo kaksi ensimmäistä ovat kylliksi)
    - Yhtälön ratkaisu puolitushaulla
    - tapoja laskea likiarvo luvulle π
    - Numeerisen integroinnin toteuttaminen ohjelmoimalla
    - Newtonin menetelmä yhtälön numeerisessa ratkaisussa
    -  ...
Käytännössä osiot 2 ja 3 voitaisiin opettaa limittäin niin, että ohjelmointia päästäisiin käyttämään mahdollisimman varhain ja esimerkit liittyisivät käsiteltyyn lukuteoriaan.

Millä kielellä?

Kurssiin mahtuvat asiat ovat varsin alkeellisia, joten kielen valinta ei ole kovin oleellinen kysymys. Tärkeintä on, että tulee kokeilleeksi jotakin tekstipohjaista ohjelmointikieltä, joka on oikeasti laajassa käytössä. Tällä hetkellä valitsisin kurssin kieleksi Pythonin, koska sillä on lähestyttävä syntaksi ja hyvät matematiikkakirjastot. Käytännössä kielivalintaa tulee rajoittamaan se, mitä Abitti-ympäristössä on tarjolla.

Mistä materiaalit?

Kustantamot laativat varmasti materiaalia osaksi pitkän matematiikan kirjasarjoja. Tällä hetkellä olemassa olevista materiaaleista paras (ja ilmainen) lienee tie.koodariksi -sivuston laadukas Ohjelmoinnin alkeet -kurssi, jossa on itse tarkistuvat Python-tehtävät. Materiaalia riittää runsaasti tämän kurssin tarpeiden yli.

Kuka opettaa?

Peruskoulun matematiikan opettajat ovat saaneet opiskella/kerrata ohjelmointia vuoden 2014 OPS-muutoksen tullessa voimaan. Nyt on lukion opettajien täydennyskoulutuksen vuoro. Onneksi työmäärä ei ole mahdoton ja aikaa hyvin, opetetaanhan ensimmäiset uuden LOPSin mukaiset MAA11-kurssit aikaisintaan vuonna 2022.

Millaisia tehtäviä?

Tässä joitakin vanhoja ohjelmointikurssini harjoitustehtäviä, jotka sopisivat MAA11-kurssille aihepiirinsä ja tasonsa puolesta.

Tehtävä. Laadi ohjelma, joka tekee seuraavaa:
- aloitetaan positiivisesta kokonaisluvusta n
- jos n on parillinen, se jaetaan kahdella
- jos n on pariton, se kerrotaan kolmella ja tuloon lisätään yksi
- näin jatketaan, kunnes tulos on 1. Laita ohjelmasi tulostamaan välivaiheet.
Collatzin konjektuurin mukaan tämä prosessi päättyy aina riippumatta siitä, mistä luvusta lähdettiin liikkeelle. Konjektuuria ei ole vielä onnistuttu todistamaan oikeaksi tai vääräksi.

Ratkaisu.
n = 7
print(n) 

while n > 1:
    if n % 2 == 0:
        n = n//2
    else:
        n = 3*n + 1
    print(n)


Tehtävä. Laadi ohjelma, joka tarkistaa, onko käyttäjän antava vuosi karkausvuosi. Karkausvuosia ovat vuodet, jotka ovat neljällä jaollisia, mutta eivät sadalla jaollisia. Poikkeuksena edelliseen luvulla 400 jaolliset vuodet ovat karkausvuosia.

Ratkaisu.

vuosi = int(input("Anna vuosi: "))
if vuosi % 400 == 0 or (vuosi % 4 == 0 and vuosi % 100 != 0) :
    print("Vuosi on karkausvuosi.")
else:
    print("Vuosi ei ole karkauvuosi.")



Tehtävä. Laadi ohjelma, joka tarkistaa, onko käyttäjän antama luku alkuluku. Kuinka suurista luvuista se selviää? Miten ohjelmaa voisi nopeuttaa?

Ratkaisu.
import math
luku = int(input("Anna lukua 1 suurempi kokonaisluku: "))
ylaraja = int(math.sqrt(luku))
jakaja = 2
on_alkuluku = True
while jakaja <= ylaraja:
    if luku % jakaja == 0:
        on_alkuluku = False
        break
    jakaja += 1

if (on_alkuluku):
    print("Luku on alkuluku.")
else:
    print("Luku ei ole alkuluku.")


Tehtävä. Laadi ohjelma, joka ratkaisee funktion nollakohdan likimain puolitushaulla. Tarkkuuden tulee olla säädettävä. 

Ratkaisu.
# Ratkaistaan funktion f välillä ]a,b[ sijaitseva nollakohta puolitushaulla.

def f(x):
    return x**2 - 5

a = 1
b = 3
tarkkuus = 10**(-6)

while b-a > tarkkuus:
    c = (a+b)/2
    if f(a)*f(c)< 0:
        b = c
    else:
        a = c

print("Nollakohta on likimain ",(a+b)/2 )

Kommentit

Tämän blogin suosituimmat tekstit

Alumneja ja verkostoitumista Otaniemen lukion databileissä

Alumneja ja verkostoitumista Otaniemen lukion databileissä Otaniemen lukiossa järjestettiin syksyllä 2019 lukion historian ensimmäiset databileet. Olarin lukiossa näitä on järjestetty jo yli 20 vuotta. Ajatuksena on lukiona ja opettajina pitää yhteyttä alumneihin ja toisaalta muodostaa verkostoa nykyisten ja entisten opiskelijoiden välille. Databileet ovat matematiikka- ja luonnontiedelukion vuosittain toistuva juhla, joka järjestetään aina samaan aikaan vuodesta ja toistaiseksi myös aina samalla kaavalla. Databileiden nimi juontuu siitä, että juhliin on alusta asti kutsuttu kaikki lukion ma-lu- eli D-ryhmien opiskelijat. Erikoislukion ryhmän tunnus oli alusta asti Olarin lukiossa D ja siitä tuli nimitys datat. Kun alumneja alkoi siunaantua, kutsuttiin myös entiset datat mukaan ja vähitellen syksyisin alkoi tipahdella s-postilla kysymyksiä: Milloin on Databileet? Oli syntynyt perinne! Suunnitelmissa on ollut jopa jatkaa toimintaa niin, että nykyinen opiskelija voisi pääs

Mitä vierailukierroksesta jäi mieleen?

Mitä vierailukierroksesta jäi mieleen? Edellisessä postauksessa kerroimme tutustumiskierroksesta Suomen matemaattis-luonnontieteellisen alan erityistehtävälukioihin. Tässä lisätunnelmia kierroksesta.  Vierailimme lukuvuoden 2018-2019 aikana 13 eri lukiossa kehittämistehtäviemme puitteissa. Vierailujen tavoitteena oli tutustua luonnontieteen, matematiikan ja teknologian erityistehtävän saaneiden lukioiden toimintaan sekä lukioiden opettajiin ja rehtoreihin. Vierailuryhmään kuuluivat aina Kirsi Vakkilainen Olarista (tästä syksystä alkaen Otaniemen lukio) ja Ville Tilvis Maunulasta ja lisäksi mukanamme oli vaihtelevasti koulujemme muita opettajia ja rehtoreita. Olemme todella otettuja, että meidät otettiin niin lämpimästi vastaan ja kouluissa oltiin valmiita uhraamaan yhteiselle tapaamiselle aikaa. Tapasimme mahtavia kollegoja, kokeneita konkariopettajia, todellisia opettajapersoonia, idearikkaita ja innokkaita pedagogeja ja intohimoisia oman alansa asiantuntijoita. L

Suomen matemaattis-luonnontieteellisen alan erityisen koulutustehtävän lukiot ja uusi LUKEMA-verkosto

Kyllä Suomessa on hienoja kouluja! Otaniemen (ent. Olarin) lukion sekä Maunulan yhteiskoulun ja Helsingin matematiikkalukion opettajat kiersivät lukuvuoden 2018-2019 aikana tutustumassa Suomen matemaattis-luonnontieteellisesti suuntautuneisiin erityistehtävälukioihin. Kierros oli osa luonnontieteiden ja matematiikan elokuussa 2018 käynnistyneitä valtakunnallisia kehittämistehtäviä, jotka OKM on lukioillemme myöntänyt. Kävimme kierroksen kaikissa lukioissa, joilla on matemaattis-luonnontieteellinen erityinen koulutustehtävä. Alueittain järjesteltynä nämä koulut ovat Kokkolan suomalainen lukio, Kokkola (luonnontieteet ja teknologia) Nurmon lukio, Seinäjoki (luonnontieteet ja matematiikka) Porin suomalainen yhteislyseo, Pori (luonnontieteet) Tampereen klassillinen lyseo, Tampere (luonnontieteet) Kerttulin lukio, Turku (luonnontieteet, ICT) Turun suomalaisen yhteiskoulun lukio, Turku (luonnontieteet) Lahden lyseo, Lahti (luonnontieteet, matematiikka ja teknologia) Kaurialan