Programmering i matematik

Relevanta dokument
Programmering i matematik

Lennart Rolandsson, Uppsala universitet, Ulrica Dahlberg och Ola Helenius, NCM

Aktiviteter Del 4. h succesivt anta mindre värden, som till exempel π. , och låta programmet summera sekanternas längder från x = a till x = b.

Flera digitala verktyg och räta linjens ekvation

Att undervisa med programmering

Flera digitala verktyg och exponentialfunktioner

Matematiska undersökningar med kalkylprogram

Extramaterial till Matematik X

Om programmering i matematikundervisning

Aktivitetsbank. Matematikundervisning med digitala verktyg II, åk 1-3. Maria Johansson, Ulrica Dahlberg

Slump och statistik med Scratch

Slump och statistik med Scratch. Se video

Talföljer och cirklar: Algoritmer, geometri och mönster 2 av 4

Digitalt lärande och programmering i klassrummet

Programmering med matematik

Om programmering i matematikundervisning

Om programmering i matematikundervisning

Undersökande arbetssätt i matematik 1 och 2

Programmering i gymnasieskola och vuxenutbildning

Programmera ett övergångsställe

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Aktivitetsbank. Matematikundervisning med digitala verktyg II, åk 7-9. Ulrihca Malmberg, Maria Johansson, Ulrica Dahlberg

Undervisningen i ämnet matematik ska ge eleverna förutsättningar att utveckla följande:

PROGRAMMERING I MATEMATIK. Ämnets dag 2017 Göteborgs universitet, Matematiska Vetenskaper Åse Fahlander och Laura Fainsilber

Programmering som språk

Svar och arbeta vidare med Student 2008

MATEMATIK. Ämnets syfte

Programmering i matematik och teknik i grundskolan

formulera och lösa problem med hjälp av matematik samt värdera valda strategier och metoder,

Programmering i matematik. grundskolan, gymnasieskolan och vuxenutbildningen

Programmering i matematik och teknik i grundskolan

MATEMATIK. Ämnets syfte

Varför programmering i läroplanerna?

Koda ett mattetest 5 av 5. Lektionen handlar om att göra ett mattetest som fungerar för alla multiplikationstabeller. Koda ett mattetest 5 av 5

Programmera ett kärnkraftverk

Matematikundervisning med digitala verktyg* Översikt över modulstrukturen

Arbetsområde: Jag får spel

MATEMATIK ÅK 9 TAL. Matematik - Måldokument Lena Folkebrant

Koda ett mattetest 3 av 5. Lektionen handlar om att göra en variabel i programmet för ett multiplikationstest. Koda ett mattetest 3 av 5

Koda ett mattetest (lektion 4 av 5)

JavaScript Block Editor:

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Om LGR 11 FÖRMÅGOR CENTRALT INNEHÅLL. De matematiska förmågor som undervisningen i åk 1-9 syftar till att eleverna ska utveckla.

Lokal pedagogisk planering i matematik för årskurs 9

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Programmering från början

Statistik, sannolikhet, algebra och funktioner, 3 hp. Studenter i lärarprogrammet F-3 III, 12F380 ht17 Varberg

Koda ett mattetest 1 av 5. Lektionen handlar om att använda programmeringskunskaper för att skapa ett enkelt multiplikationstest.

Koda ett mattetest 4 av 5. Lektionen handlar om att utveckla mattetest så det fungerar för alla multiplikationstabeller. Koda ett mattetest 4 av 5

Arbetsområde: Från pinnar till tal

Matematiska lägesmått med en micro:bit

Arbeta vidare med aritmetik 2018

Jörgen Lagnebo PLANERING OCH BEDÖMNING MATEMATIK ÅK 9

Programmering från början

Optimering av olika slag används inom så vitt skilda områden som produktionsplanering,

Bakgrund: När man programmerar på professionell nivå så går det ut på att koppla gränssnittet till funktioner.

Övning: hitta buggarna

KOMPLEMENT TILL MATTE DIREKT BORGEN UPPLAGA

Provmoment: Tentamen Matematik och matematikdidaktik, 3 hp, tillfälle 1

Programmering, dans och loopar

Programmera en mänsklig robot. Lektionen handlar om att skapa och följa instruktioner. Programmera en mänsklig robot

Ur kursplanen för ämnet matematik I detta arbetsområde ska eleven utveckla sin förmåga att:

Skolverkets arbete med skolans digitalisering

Matematik: Det centrala innehållet i kurserna i Gy 2011 i relation till kurserna i Gy 2000

Förslag den 25 september Matematik

Programmera ett dörrlarm. Se video

formulera och lösa problem med hjälp av matematik samt värdera valda strategier och metoder,

Programmering i matematik på gymnasial nivå: workshop

Orkestrering av matematikundervisning med stöd av digitala

Studiehandledning. kurs Matematik 1b

Jörgen Lagnebo PLANERING OCH BEDÖMNING MATEMATIK ÅK 8

Lösningsförslag Cadet 2014

Matematiska lägesmått med en micro:bit

Om LGR 11 FÖRMÅGOR CENTRALT INNEHÅLL. De matematiska förmågor som undervisningen i åk 1-9 syftar till att eleverna ska utveckla.

MATEMATIK. Ämnets syfte

Lokal pedagogisk planering i matematik för åk 8

Scanner Detektor lärarhandledning Mojäng

måndag, 2010 oktober 11

Lektion i geometri. Lektionens innehåll. Centralt innehåll matematik 1b och matematik 1C. Mål med lektionen. Lektionsupplägg.

Faktorisering med hjälp av kvantberäkningar. Lars Engebretsen

Anpassning av problem

Svar och lösningar. Kängurutävlingen 2009 Cadet för gymnasiet

7F Ma Planering v2-7: Geometri

Extramaterial till Matematik Y

Programmering från början

Programmera en mänsklig robot

Fördjupningsforum för gymnasielärare i matematik

Kursplan för Matematik

Slumpförsök för åk 1-3

Programmering, dans och loopar

Programmera och hitta buggarna. Se video

Om LGR 11 FÖRMÅGOR CENTRALT INNEHÅLL. De matematiska förmågor som undervisningen i åk 1-9 syftar till att eleverna ska utveckla.

En parallellogram har delats i två delar P och Q som figuren visar. Vilket av följande påståenden är säkert sant?

Vad är algoritmer? Lektionen handlar om att få en grundläggande förståelse för vad en algoritm är. Vad är algoritmer?

8F Ma Planering v2-7 - Geometri

Programmering. Den första datorn hette ENIAC.

NYA PI OCH LÄROPLANSGRUNDERNA

Här är två korta exempel på situationer då vi tillämpar den distributiva lagen:

Stokastisk geometri. Lennart Råde. Chalmers Tekniska Högskola och Göteborgs Universitet

Utmanande uppgifter som utvecklar. Per Berggren och Maria Lindroth

Transkript:

Matematik Grundskola åk 7-9 Modul: Matematikundervisning med digitala verktyg II Del 4: Programmering i matematik Programmering i matematik Ola Helenius, NCM, Morten Misfeldt, Aalborg universitet och Lennart Rolandsson, Uppsala universitet Matematik är ett speciellt ämne eftersom det å ena sidan består av sina objekt, som fem, cirklar, rationella tal, polynom och fyrdimensionella kuber, och å andra sidan är ett utövande. När man i kursplanen har valt att skriva fram förmågor som syftet med matematikundervisningen, så är det ett utslag av att lyfta fram matematiken som en handling, det vill säga det som människor gör när de är matematiska; de löser problem, utvecklar och använder olika matematiska begrepp, representationer och rutiner. Ibland säger man att matematiken är autopoietisk, självgenererande. Det är genom att vara matematisk som man skapar matematik, och man är matematisk när man sysslar med matematiska begrepp. Programmering kan anknytas till båda sidorna av matematiken. Vi kan ställa flera frågor som är matematiska till sin natur men som också har en didaktisk sida. 1. Vilka matematiska problem kan man lösa med programmering? Vilka är lämpliga att arbeta med ur ett undervisningsperspektiv, och varför? Hur ska det i så fall gå till? 2. Vilka matematiska objekt kan programmeras? Eller mer exakt: vilka matematiska objekt kan representeras med eller via programmering? Vilka är lämpliga att arbeta med ur ett undervisningsperspektiv, och varför? Hur ska det i så fall gå till? 3. Vilka tekniska och matematiska kunskaper och resurser behövs för att arbeta med dessa problem och objekt (punkt 1 och 2)? 4. Har lösningar till matematiska problem som baseras på programmering andra egenskaper än lösningar som inte baseras på programmering, och vad kan i så fall skillnaden vara? De flesta programmeringsuppgifter så här långt i modulen har handlat om att programmera något som i sig inte är ett matematisk problem, men där matematik på olika sätt används i arbetet eller för att representera till exempel en rörelseriktning eller en position. I denna sista del i modulen ska vi fokusera på att programmera i matematiken. Även om det inte finns några generella svar på frågorna ovan, så är det just sådana frågor som hjälper oss att förstå de didaktiska dilemman som uppkommer när man arbetar med programmering i matematiken. https://larportalen.skolverket.se 1 (7)

Tre exempel För att kunna föra en mer generell diskussion om olika användningsområden för programmering i matematiken inleder vi med tre exempel. Alla passar kanske inte att göra i alla årskurser, men syftet är att illustrera olika aspekter av programmering i matematik. Exempel 1. Primtalstestning Ett av de viktigaste begreppen inom den multiplikativa sidan av området tal och operationer är primtal. Primtal är sådana heltal (större än 1) som endast har två faktorer, 1 och talet självt. Alla heltal kan faktoriseras i en produkt av potenser av heltal, på ett entydigt sätt sånär som på faktorernas ordningsföljd. Om man vill testa om ett tal n är ett primtal så kan man först testa om det är delbart med 2, sedan med 3, 4, 5 osv till n-1. Egentligen behöver man bara testa med primtal och bara med tal som är mindre än n, men eftersom man inte alltid har tillgång till listor med primtal och eftersom en dator normalt inte knorrar om man ber den att göra lite extrajobb så fungerar den elementära algoritmen som prövar med alla tal upp till n-1. Det är relativt enkelt att programmera en primtalstestare. I figur 1 ser vi ett exempel på hur en sådan skulle kunna se ut, med så kallad pseudokod. Pseudokoden måste sedan skrivas om till kod i ett programmerimgsspråk, till exempel Scratch. Sätt nämnare = 2 Sätt tal = [siffran du vill undersöka] Medan nämnare är mindre än tal Om tal / nämnare = jämt Skriv Tal är INTE primtal Annars Öka nämnare med 1 Figur 1. Pseudokod där programmet testar om ett tal är ett primtal. En möjlig utveckling av programmet är att få det att skriva ut faktorerna för sådana tal som inte är primtal. Om man söker (googlar) på Scratch och primtal kan man hitta mer avancerade varianter som till exempel listar alla primtal mellan 2 och något stort tal (till exempel 100000). Ett relaterat problem är att hitta största gemensamma delare till två tal. Det är användbart bland annat när man förenklar bråk. Om man vill hitta exempel på sådana Scratchprogram kan man googla på scratch eucledian algorithm eller scratch gcd (greatest common divisor, största gemensamma delare). En lektion om primtal och primtalstestare kan läggas upp på olika sätt beroende på elevernas tidigare kännedom om både primtal och programmering. Vad behöver man göra för att konstatera om ett tal är ett primtal eller ej? Hur ser en algoritmisk/schematisk https://larportalen.skolverket.se 2 (7)

beskrivning av detta resonamang ut? Om eleverna har tidigare erferenhet av programmering och av någon konkret programmeringsmiljö kan de möjligen själva eller i grupp prova att skapa kod av algoritmen. Primtalstestaren ovan är ett exempel på ett matematiskt verktyg. Det är ju inte bara ett speciellt problem man löser med den och det är inte heller bara en aktivitet för att lära sig någon viss matematik. Det program som man har skapat går att använda även i helt andra fall när man vill veta om ett tal är ett primtal. Problemet som vi har berört här är relativt enkelt att förstå konceptuellt, men arbetssamt att hantera med papper och penna så snart talen blir någorlunda stora. Det är just därför det är lämpligt att programmera så att en dator får sköta beräkningarna. Sådana här fall, eller fall där man vill göra ett stort antal likartade beräkningar, är typiska kandidater för när det är lämpligt att programmera ett matematiskt verktyg. Exempel 2. Ett geometriproblem programmering som problemlösning Betrakta geometriproblemet i figur 2. Hur lång är kvadratens sida? Figur 2. Geometriproblem där programmering ger en annan sorts lösning. Detta problem går att lösa med flera olika klassiska geometriska tekniker som går ut på att dra några smarta hjälplinjer och sedan till exempel utnyttja kongruens mellan vissa trianglar. Men vi ska studera en lösning av ett annat slag, som går att implementera även i en visuell programmeringsmiljö som Scratch. Vi tänker oss att origo är i nedre vänstra hörnet (kalla punkten A) och att sträckan 14 är i x- led. Vi kör 14 cm framåt, svänger 90 grader vänster, kör 7 cm, svänger 90 grader höger och kör 9 cm och hamnar då i motsatt hörn (C). Sedan mäter vi, eller använder Pythagoras sats, för att räkna ut avståndet till utgångspunkten vilket är kvadratens diagonal, d. Vet man att sidan är 1/ 2 gånger diagonalen kan man räkna ut svaret på frågan direkt. Men vi kan också fortsätta att använda samma teknik för att rita ut kvadratens andra hörn och, om vi vill, hela kvadraten. Vi kan gå från C mot A halva diagonalens längd, d/2, och då vara i kvadratens centrum. Vi kan svänga 90 grader och gå d/2 och vara i ett nytt hörn (B) sedan svänga 180 grader och gå då i den riktningen och då få det sista hörnet (D). Sedan kan vi mäta en sida. https://larportalen.skolverket.se 3 (7)

Den ritade kvadraten har en annan orientering än den på bilden, men sidan är ju densamma. Se Figur 3. B C A D Figur 3. En anna orientering av bilden i Figur 2. I en programmiljö som Scratch är detta relativt enkelt att implementera eftersom miljön är byggd bland annat för att kunna styra figurer på skärmen. En variant på lösning finns i länken: https://scratch.mit.edu/projects/184575160/. I Python är det mer komplext, men med hjälp av t ex Turtle Graphics för Python kan man utföra instruktionerna och rita resultatet som skissas ovan med några få enkla kommandon, ungefär som i Scratch. Det program som skissades ovan är inte ett generellt matematiskt verktyg, som primtalsprogrammet, utan har bara direkt relevans som lösning på just detta problem. I det här fallet är det inte datorns beräkningskraft som vi är ute efter, utan kodens möjligheter att skapa en viss typ av grafiska representationer, vilket vi sedan utnyttjar för problemlösningen. Möjligheten att lösa problemet med ett program gör att nya sätt att tänka på geometri uppenbarar sig. Att styra figurer i miljöer som Scratch är något som man kan göra relativt tidigt när man lär sig programmering. Det som problemet ovan med dess lösning visar, är att samma tänkande som man använder när man styr figurer, också kan användas till att lösa geometriska problem. Exempel 3. Simulera många fall utforska en matematisk princip eller idé Vårt tredje exempel på programmering som matematisk teknik handlar om simulering och sannolikhet. Problem som handlar om sannolikheter kan ofta blir svåra att behandla analytiskt och dessutom ofta leda vår egen intuitionen fel. De flesta elever inser att sannolikheten att få till exempel en femma vid ett tärningsslag är 1/6 och de flesta resonerar sig snabbt fram till att om man summerar två tärningsslag kan man får resultaten 2, 3., 12. Men vad är sannolikheten för de olika utfallen? Det går att resonera sig fram genom att göra en tabell för alla möjliga utfall och undersöka hur många gånger varje summa förekommer. Men att göra samma sak med tre tärningar eller fler är svårare. https://larportalen.skolverket.se 4 (7)

Ett sätt att hantera detta problem med programmering är att slumpa fram två (eller något annat antal) tärningskast och registrera summan. Sedan gör man detta 1000 gånger och håller ordning på antalet gånger varje summa dyker upp och summerar det hela i en tabell. Detta kallas en simulering och är en mycket användbar matematisk teknik. När man väl har lärt sig några enkla standardmetoder för hur man bygger kod för att simulera, är det ganska enkelt att hantera även sådana problem som är ytterst komplicerade att hantera med penna och papper. För Scratch, Python och Javascript kan man hitta många exempel genom att googla (till exempel) Python sum of two dice. Karakterisering av de tre exemplen De tre exemplen ovan är av olika karaktär. I primtalsexemplet skapas ett matematiskt verktyg. Om man har en viss klass av problem som man kan skapa en algoritm för att lösa, så kan man också omvandla algoritmen till kod och därigenom skapa ett matematisk verktyg. Oftast är det svårare att skapa koden än att lösa ett problem, men fördelen med koden är att när programmet väl är klart kan man snabbt lösa alla problem i den givna klassen. I fallet med primtalsprogrammet används dessutom datorns egenskap att mycket snabbt kunna genomföra många beräkningar. Att se om 16 eller 17 är primtal är ju enklare att göra för hand än genom att skapa ett programbaserat verktyg för saken. Men om vi vill ta reda på om 65537 är ett primtal så är programmet överlägset. Geometriexemplet är, till skillnad från frågan om primtal och faktorisering, inte så intressant annat än som en uppgift att lösa. I just det här fallet visade det sig att specifika möjligheter i en viss programmeringsmiljö skapade alternativa sätt att tänka om problemet. När man väl har löst uppgiften med hjälp av ett program så inser man kanske att samma tankesätt (pythagoras sats) går att använda även med papper och penna. Den som inser det har kanske för alltid fått ett utvidgat sätt att se på geometri. Värdet här var alltså inte programmet i sig, utan de matematiska resonemang som blev en följd av att angripa problemet med programmering. Det kan dock vara svårt att veta på förhand om ett visst problem är intressant att angripa med programmering, det vill säga om det kommer att ge några speciella matematiska insikter att göra så. I simuleringsexemplet utnyttjas en teknik som man typiskt inte möter i grundskolan. Den kod som skapas är visserligen specifik för just det problem man löser (som i geometriexemplet) men själva tekniken är i högre grad generell. Man kan säga att det här handlar om att upptäcka en strategi för en viss problemtyp. Ett sätt att tänka om orkestrering av lektioner Som vi har beskrivit tidigare i modulen ställer undervisning om och med programmering i matematikundervisningen speciella krav eftersom det både handlar om programmering och matematik. Eleverna ska få möjlighet att bekanta sig med och lära sig programmeringsmiljön och att experimentera, genom tinkering eller modifikation av kod som andra har gjort. När programmering ska användas i matematiken är det rimligt att det är än större fokus på det matematiska innehållet. I de tre exempel som vi har givit ovan är den ingående matematiken väldigt specifik och kanske också utmanande. Det matematiska https://larportalen.skolverket.se 5 (7)

innehållet avgör vilken lektionsdesign man väljer att använda. I modulens tidigare delar har lärarledda diskussioner av det matematiska innehållet med fördel kunnat placeras i slutet av lektionen. Eleverna kan ju mycket väl ha använt olika matematiska idéer eller principer för att lösa samma programmeringsuppgift, eller arbetat med något olika programmeringsuppgifter. Läraren kan då lyfta det matematiska i efterhand. Men när programmering ska användas för matematiska syften, är det rimligt att anta att det matematiska innehåll som eleverna ska möta kräver en introduktion av läraren. Kanske behöver även relevanta programmeringskonstruktioner och -koncept introduceras. Det kan också vara lämpligt att hålla klassen mer samlad runt ett gemensamt matematiskt innehåll eller ett gemensamt problem. De lektionsförslag som finns i den här delen baseras alla på sådana orkestreringsmönster. Nästa avsnitt beskriver ett möjligt upplägg. Förslag på orkestrering Det är bra att före lektionen tänka igenom vilka matematiska begrepp och procedurer som aktiviteten kommer att innehålla och att fundera igenom vilka av dessa som betraktas som förkunskaper och vilka som du vill att eleverna ska utforska eller öva på. Om du repeterar eller lämnar ut formelblad eller liknande för det som du ser som förkunskaper kan dessa begrepp och procedurer användas på ett instrumentellt sätt av eleverna och inte i onödan hindra dem i arbetet med de begrepp och procedurer som ska utforskas. Fundera också igenom vilka programmeringsrelaterade konstruktioner och koncept som kommer att behövas och vilka av dessa du betraktar som förkunskaper och vilka som du snarare vill att eleverna ska utforska eller öva på. Lämna också inom detta område ut instruktioner för det som du anser är förkunskaper, så att delar av koden kan användas på ett instrumentellt sätt av eleverna och inte i onödan hindrar dem i arbetet med att utforska relationerna mellan matematiska representationer och kodrepresentationer. Planera hur du ska summera lektionen eller lektionsserien. Lyft i denna avslutning fram: a: vilka matematiska begrepp och procedurer vi har utnyttjat, och b: vilka programmeringstekniker vi har utnyttjat. Var noga med terminologi och precision genom att själv omformulera elevernas kommunikation med korrekta begrepp om det behövs. Sammanfattning av modulen Den här modulen har handlat om programmering i matematikundervisningen. Kursplanens skrivningar innebär inte att matematikundervisningen ska användas för att göra eleverna till kompetenta programmerare i allmänhet. Formuleringarna som berör programmering är alltid knutna till centralt innehåll eller matematiska förmågor. Detta har påverkat modulens budskap så att den i högre grad fokuserar på att undersöka och modifiera existerande program än att skapa helt egna. Den behandlar också i högre grad vilken matematik eller vilka matematiska förmågor som relaterar till programmering än olika programmeringstekniska begrepp. Men, med ledning från forskningen om digitala verktyg https://larportalen.skolverket.se 6 (7)

från bland annat Trouche (2004), så är det viktigt att uppmärksamma att eleverna får möjlighet att lära sig verktyget. Språk och miljöer byts ut och förändras över tid, men med kunskaper om grundläggande principer och byggstenar får eleverna verktyg för att lösa problem och förverkliga idéer, med hjälp av programmering. På det didaktiska planet har vi utgått från att många lärare är nybörjare när det gäller att lyfta in programmering i matematikundervisningen. Programmeringsinslagen i lektionsförslagen är därför oftast varit av utforskande karaktär, där läraren inte alltid förväntas ha alla svar färdiga. Men även en sådan undervisning måste vara välplanerad, kanske mer välplanerad än undervisning som bygger på att läraren ger eleverna explicita instruktioner och förklaringar. Därför behandlar modulen hur lektionen orkestreras och olika möjligheter att orkestrera lektioner som kan passa i olika sammanhang. En lektion som innehåller programmering är ofta mer organisatoriskt komplicerad än andra lektioner eftersom själva tekniken också måste beredas lämplig plats, men också observeras så att den inte tar över. Detta är en del av orkestreringen. Eftersom programmering är nytt för många lärare, så kan det med fördel byggas in i en existerande matematikundervisning, där läraren har en upparbetad trygghet. Det är av det skälet som modulen har varit upplagd så att den startade med ett större fokus på frågor som har med själva programmeringen att göra för att i slutet handla om programmeringens roll i matematiken. Referenser Trouche, L. (2004). Managing the complexity of human/machine interactions in computerized learning environments: Guiding students command process through instrumental orchestrations. International Journal of Computers for Mathematical Learning, 9, 281-307. https://larportalen.skolverket.se 7 (7)