Matematiikan jaos, Matti Lattu

Programmering i studentexamen

Då programmering får en viktigare ställning i och med de nya grunderna för gymnasiets läroplan har vi av lärare blivit tillfrågade hur man programmerar i Abitti. Syftet med denna text är att ge en lägesöverblick samt att beskriva programmeringsmiljön.

Händer på tangentbord.
Bild: Studentexamensnämnden.

Det första man bör lägga märke till är att det sist och slutligen inte kommer att vara så mycket programmering i gymnasiet. I lång matematik finns 26 studiepoäng som är uppdelade på 12 moduler. Programmering förekommer i en modul som omfattar två studiepoäng tillsammans med talteori. Programmering har alltså inte någon stor tyngdpunkt i grunderna för gymnasiets läroplan.

Dessutom bör man komma ihåg att det är frågan om läroämnet matematik. Det väsentligaste innehållet i studentexamensproven i matematik är även i framtiden matematiken. Också då det gäller programmering är den matematiska aspekten, d.v.s. algoritmiskt tänkande, det viktigaste. Algoritmiskt tänkande kan ta sig uttryck på många olika sätt. I uppgift 8 i provet i studentexamen våren 2021 kunde programkoden skrivas som pseudokod, med hjälp av ett kalkylprogram eller som konkret programkod. Pseudokod är naturligtvis inte ett fungerande alternativ om det ska vara möjligt att köra koden och det inte räcker att analysera strukturen. Den matematiska tanken är dock viktigast oavsett sättet på vilket uppgiften utförs.

Målsättningar

I Abitti används programmeringsspråket Python. Dessutom är det möjligt att programmera och köra program på JavaScript i webbläsaren. Studerandena kan dock ha programmeringsfärdigheter som de fått genom att öva programmering på olika programmeringsspråk. Dessutom är det inte alltid lätt eller ens ändamålsenligt att alltid minnas den exakta syntaxen. Målsättningen ligger i matematiken och det algoritmiska tänkandet och genomförandet av dessa algoritmer, inte i att exakt komma ihåg syntaxen eller hur semikolon och kolon används. De vanligaste kommandona och de bibliotek som behövs finns beskrivna i Abitti.

Genomförande

Enligt vad som framkommit i intervjuer med lärare som drar programmeringskurser i gymnasiet undervisas programmering i den närmaste framtiden på MAA12-kursen i lång matematik i den gamla läroplanen, i den nationella modulen MAA11 i den nya läroplanen och på eventuella valbara kurser som fokuserar specifikt på programmering och som gymnasierna ordnar lokalt. På den förstnämnda är det viktigt att programmeringsmiljön är enkel och snabbt kan tas i bruk, medan det i den senare används professionella programmeringsmiljöer (integrated development environment, IDE).

För närvarande är det möjligt att i Abitti programmera med Python i bildbehandlingsprogrammet GIMP, i räknarprogrammet Texas Instruments Nspire, med JavaScript i webbläsaren samt med lite trixande med skriptspråken Python, Perl och sh/bash. Som utgångspunkt för en mer lättanvänd programmeringsmiljö valdes MAA11 och en för den passande miljö som lämpar sig för att skriva högst några tiotals rader långa program. Utöver den egentliga editerings och körningsmiljön ville vi dessutom ta med material som bildar ett slags referensbibliotek i provmiljön.

Det beslöts att programmeringsmiljön innefattas som en del av instruktionerna i provmiljön. Dessa kan ses också utanför provmiljön på adressen cheat.abitti.fi. Instruktionerna för provmiljön är öppen källkod, och därmed är det lätt att föreslå förbättringar eller bygga in en identisk programmeringsfunktion i någon annan inlärningsplattform.

I programmeringsmiljön i Abitti kan examinanden kopiera en exempelkod ur instruktionerna, modifiera den och sedan köra den. Programkoden och utskriften kan kopieras över till svarsfältet som text eller som skärmdump. Vi avser inte att heller i framtiden stöda användningen av de skriptspråk (t.ex. Perl, bash) som finns med på Abitti-pinnen.

Skärmbild från cheat.abitti.fi, programmering.
Ohjelmointiympäristön toteutus koeympäristön ohjeissa.

Exempel med en gammal studentexamensuppgift

Följande sannolikhetskalkyluppgift utgjorde uppgift 12 i examen våren 2020:

Det geometriska medelvärdet av två positiva tal a och b är √(ab).

1. Ge exempel på två olika heltal a och b, där vardera talet ligger i intervallet 2–100 och för vilka √(ab) är ett heltal. (3 p.)
2. En slumptalsgenerator lottar ut två heltal i intervallet 1–100 oberoende av varandra och så att varje tal väljs med sannolikheten 1/100. Vilken är sannolikheten för att det geometriska medelvärdet av talen är ett heltal? Du kan beräkna händelsens klassiska sannolikhet exakt eller ge en uppskattning av sannolikheten med stöd av en simulering. (9 p.)

Den första punkten i uppgiften kräver endast att man hittar ett exempel. Den andra punkten kunde lösas t.ex. med ett kalkylprogram.

Simulationen kan utföras med Python t.ex. så här:

import random
import math
k=0
2
i=0
while i<500:
  a=random.randint(1,100)
  b=random.randint(1,100)
  c=math.sqrt(a*b)
  i=i+1
  print(a,b,c)
  if (c-round(c,0)==0):
    k=k+1
print(k/500)

Idén i lösningen är att man slumpmässigt väljer talpar a och b inom det givna intervallet och kollar om det geometriska medeltalet för detta slumpmässigt valda talpar är ett heltal. Sedan räknar man antalet talpar där detta är sant och dividerar antalet med storleken på det totala samplet.

Detta är en simuleringslösning. I praktiken kan man med denna lösning konstatera att om man kör koden några gånger får man resultat som varierar ganska mycket. En uppskattning kan dock göras på detta sätt.

Alla fall kan gås igenom på följande sätt:

import math
k=0
i=1
while i<101:
  j=1
  while j<101:
    c=math.sqrt(i*j)
    j=j+1
    if (c-round(c,0)==0):
      k=k+1
  i=i+1
print(k/10000)

Till sist dividerar man antalet positiva fall med det totala antalet möjliga fall.

 

Utvecklingsversionen av anvisningarna i provmiljön finns på adressen https://cheat.test.abitti.fi   

Respons om programmeringsmiljön kan skickas till abitti@ylioppilastutkinto.fi.

Med vänlig samarbetshälsning,

Matematiksektionen och specialsakkunnig Matti Lattu