Har du hørt setningen om «at hvis en ape trykker tilfeldig på en skrivemaskin over et uendelig langt tidsrom, vil den nesten helt sikkert inntaste eller forfatte en gitt tekst, for eksempel William Shakespeares komplette verker..» Kan dette stemme? Og hvor lang tid kan det ta? La oss lage et matematisk forsøk på dette.

Vi skal lage et program i Scratch, hvor vår ape skal lage tilfeldige to-bokstavers ord fra vårt alfabet, og hvor vi skal sjekke disse ordene mot en liste vi har laget. Vi skal telle opp antall forsøk det tar å lage et av de 10 ordene vi har i listen.
Kompetansemål matematikk etter 7.trinn:
– bruke programmering til å utforske data i tabeller og datasett
Kompetansemål matematikk etter 8.trinn:
– beregne og vurdere sannsynlighet i statistikk og spill
– simulere utfall i tilfeldige forsøk og beregne sannsynligheten for at noe skal inntreffe, ved å bruke programmering
Krav til programmet
Elevene skal lage et program, som lager tilfeldige ord med bokstaver i vårt alfabet. Deretter skal vi teste et og et ord mot en ordliste som vi har definert. Underveis skal den telle opp antall forsøk den trenger på å lage et ord.
En ferdig versjon av programmet kan du prøve her: https://scratch.mit.edu/projects/598216699
Steg 1 – Pseudokoding
Dette programmet består av to deler, og det kan være en ide å beskrive de to delene ved hjelp av pseudokode sammen med elevene, slik at en blir bevisst hvordan de to delene er bygd opp, hvilke variabler som trengs og hvilke løkker som er nødvendig.
Steg 2 – Klargjøring av prosjekt
Siden vi snakker om aper, la oss erstatte den originale katten med en ape. Finn deretter en passende bakgrunn.
Steg 3 – Lage ord
Apen skal lage tilfeldige ord utfra vårt alfabet. Vi må derfor hente ut en og en bokstav fra alfabetet vårt, og sette sammen til et ord. Vi trenger derfor to variabler til å begynne med som heter «bokstav» og «ord_laget». «ord_laget variabelen er et viktig å sette blank før vi begynner med å hente ut bokstavene, slik at den ikke har med seg bokstaver og ord fra tidligere.

Deretter skal vi hente ut tilfeldige bokstaver fra alfabetet til ordene våre. Vi setter først variabelen «bokstav» med en tilfeldig bokstav fra alfabetet. Vi bruker her blokken «bokstav» og et tilfeldig tall mellom 1 og 29 (vi har 29 bokstaver i alfabetet) fra en tekstbit som er selve alfabetet. Til slutt setter vi bokstaven inn i variabelen «ord_laget».

Programmet skal være fleksibelt, så vi lager en løkke rundt denne koden, og kjører den så mange ganger som lengden på ordet. Er det snakk om ord med to bokstaver, kjøres løkken to ganger.

Steg 4 – Test – lager den ord?
Det er på tide å teste om programmet lager ord. La variabelen «ord_laget» være synlig og kjør koden. Kommer det ord fram i variabelen?
Steg 5 – Teste ord
Da har vi laget et ord, og det er på tide å teste om dette ordet finnes i listen med ord som vi skal teste mot. Vi lager en funksjon som vi kaller «ordtest», som kjøres etter at ordet er ferdig laget.
Funksjonen «ordtest», skal teste om ordet vi laget i sted, finnes i listen. Altså må vi lage en liste, som vi kaller «ordliste». I denne legger vi inn 10 ord på to bokstaver. Vi skal teste ett og ett element i listen, så vi lager en variabel vi kaller «element» som skal sørge for at vi tester rett ord. Denne variabelen setter vi til 1 før vi begynner.
Siden vi skal gjøre samme testen mange ganger, faktisk så mange ganger som det er elementer i listen, lager vi en løkke som vi legger rundt testen.

Vi henter ut første element i listen og sjekker om dette er likt ordet som vi laget i forrige steg.
Hvis det er funnet, må vi lage en form for flagg slik at vi stopper testen. Er ikke nødvendig å teste flere ord i listen, når vi har funnet et som er likt. Vi lager en variabel vi kaller «funnet», som vi setter til «1» dersom ordet er funnet og som er «0» så lenge det ikke er funnet.
Om ordet er ulikt, endrer vi variabelen «element» med 1, slik at den ved neste runde i løkken henter ut neste ord og tester.

Steg 6 – Lage mange ord og teste dem
Vi går tilbake til koden vi laget i steg 3. Når vi har laget ordet, skal programmet kalle funksjonen «ordtest» som vi laget i steg 4 for å sjekke om ordet finnes i listen.
Om det ikke finnes, må vi lage et nytt ord. Dette gjør vi ved å legge en løkke rundt programkoden som lager ordene vi skal teste. Denne skal kjøres til flagget vi laget, «funnet» har fått verdien den fikk når ordet ble funnet.

Steg 7 – Legge inn teller
En ting er å finne ordet, en annen ting er å lage en teller som holder styr på hvor mange forsøk apen trenger for å finne et av ordene i listen. Vi lager en variabel vi kaller «forsøk», som vi setter til 0 idet programmet starter, og som endres med 1 for hver gang ordtesten er kjørt.
Steg 8 – Gi tilbakemelding
Da er det på tide å gi apen tilbakemelding på hvor mange forsøk han trengte for å finne et ord i listen. Vi har talt opp antall forsøk med telleren vi kalte forsøk, og denne informasjonen bruker vi i teksten vi presenterer for brukeren. Vi kan også fortelle hvilket ord han laget.

La oss starte programmet når du klikker på apen. Det første som må skje etterpå er at det er to variabler som må settes før ordene kan lages og testes. Det er teller og flagget.

Steg 10 – Teste programmet
Det er tid for å teste programmet vårt. Når du tester kan det være en ide å la alle variabler være synlig, da er det lettere å feilsøke. Sørg for at det er ord i listen, og klikk på apen for å starte programmet.
- lager apen ord?
- teller programmet opp antall forsøk?
- finner programmet ord som er like?
- settes flagget når det finner et likt ord?
- stopper programmet og informerer apen om antall forsøk og hvilket ord
Steg 11 – Prøv også dette
For hver test, diskuter i forkant hva dere tror kommer til å skje og prøv å forklare hvorfor.
a) Legg inn flere ord i listen. Bruker den flere eller færre forsøk på å finne et ord?
b) Endre systemet til å lage 3 bokstaver lange ord. Legg inn 3 bokstavers ord i listen. Hva skjer nå?
c) Endre systemet til å lage 4 bokstaver lange ord. Legg inn 4 bokstavers ord i listen. Hva skjer nå?
d) Hvor mange potensielle kombinasjoner finnes for de ulike oppgavene. Fyll inn i listen:
Antall bokstaver | Regnestykke | Antall ord |
2 | 29^2 | |
3 | ||
4 | ||
5 |
Utvidelse
Klarer du å legge inn en klokke som tar tiden?
Klarer du å ta vare på antall forsøk i en egen tabell, og finne min, maks og gjennomsnitt?
Legg igjen en kommentar