Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Likninger og ulikheter som betingelser i programmering

Av Sigurd Rage - USN

Introduksjon

Denne aktiviteten har til hensikt å se på hvordan likninger og ulikheter i matematikk kan kobles til betingelser og tester i programmering.

Kompetansemål

    1. trinn: utforske matematiske egenskapar og sammenhenger ved å bruke programmering

    1. trinn: lage, løse og forklare ligninger knyttet til praktiske situasjoner

Forkunnskaper

Aktiviteten forutsetter at eleven/studenten har grunnleggende kjennskap til lineære likninger og ulikheter, og kjenner til begreper og symboler for likhet (ekvivalens) og ulikhet fra matematikken. Det er også en fordel at eleven/studenten har noe kjennskap til tekstprogrammering samt har brukt vilkår i programmering fra tidligere, men ikke strengt nødvendig. Kunnskap om de forskjellige datatypene i programmering er nyttig, men heller ikke nødvendig.

Didaktisk tilnærming

Aktiviteten er utviklet med utgangspunkt i PRIMM-metoden for undervisning i programmering, men kan med fordel forbedres ved å lage tydeligere par-oppgaver, spesielt på trinn 1: Predict (lese, diskutere og forutsi hva koden skal gjøre). Alle kodesnuttene kan kopieres fra opplegget og inn i et programmeringsmiljø. Ellers introduseres nye konsepter i programmeringsdelen trinnvis, og det er oppgaver til hver del. Det er lagt til rette for at brukeren kan gjøre små endringer i koden (Modify) for å undersøke hvordan programmet oppfører seg anderledes. Det er også noen oppgaver som oppfordrer til at brukeren lager egen kode som likner på eksemplene (Make).

Læringsmål for aktiviteten

  • å kunne se sammenhenger og ulikheter om hvordan likninger og ulikheter er representert i matematikk og programmering

  • å skjønne at likninger og ulikheter i programmering ikke handler om å regne ut et svar, men om å sjekke om noe er sant (True) eller usant (False)

  • kjenne til variabeltypen Boolean

  • kjenne til forskjellen mellom = som tildelingsoperator og == som ekvivalens i programmering

  • kunne bruke likninger (eller tester, som det heter i programmering) i betingelsesuttrykk (if-setninger) i programmering

Likninger og ulikheter i matematikk

Likninger og ulikheter er et stort tema innen algebra, og i matematikken er vi som regel ute etter konkrete løsninger på likningene som gjør at likningen er “sann”. Ta for eksempel x+4=8 x + 4 = 8 , her er vi ute etter det eksakte svaret x=4 x = 4 . Eller ulikheten x+3<5 x + 3 < 5 som gir løsningsmengden x<2 x < 2 . Men vi kan se på likninger som sanne eller usanne også, og dette er nyttig når vi lager betingelser.

Sanne og usanne erklæringer (statements)

Ta for eksempel likningen

4=44 = 4

Denne likningen er sann. 4 er det samme som 4, selvfølgelig! Men hvis jeg skriver:

4=54 = 5

Så er jo dette helt klart feil. I matematikken skriver vi da egentlig

454 \neq 5

Vi kan vel også da si at den første likningen er sann (True) og den andre likningen er usann (False).

For ulikheter gir det kanskje mer mening. Vi kan også introdusere en variabel xx:

x<5x < 5

Denne ulikheten er kun sann (True) dersom variabelen x har en verdi som er lavere enn 5. Dersom xx har en verdi på 5 eller høyere så er ulikheten usann (False)

Vi kan også se på likninger med uttrykk bå begge sider av likhetstegnet. I likningen

3x4=x+23x-4 = x + 2

er vi i matematikken interessert i å finne den verdien for x som gjør likningen sann. Vi løser den slik:

3xx=2+43x - x = 2 + 4

2x=62x = 6

x=3x = 3

Det betyr altså at likningen stemmer, eller er sann (True), for tilfeller hvor x=3x=3, men det betyr også at likningen er usann (False) for alle andre verdier av xx.

I matematikkundervisningen blir dette sjeldent snakket om, som regel snakker man bare om riktige eller gale løsninger for xx. I programmering derimot, brukes egenskapene sannhet (True) og usannhet (False) for likninger og ulikheter i programmets kontrollstrukturer. Den vanligste kontrollstrukturen vi bruker dette i er IF-setninger, men det brukes også i WHILE-setninger. I programmeringssammenheng kaller vi ofte likninger og ulikheter for tester, og resultatet av en test er enten sann eller usann.

Likninger og ulikheter i programmering

Boolean som datatype

I programmering har vi en egen datatype for sannhet/usannhet som heter Boolean. Boolean kan enten være “True” eller “False” I kodeeksempelet under skal jeg sjekke om 4 = 4 er sant. Legg merke til at i Python bruker vi ikke = som i matematikken, hvis vi skal sjekke ekvivalens så bruker vi notasjonen “==”.

# lager en variabel x og tildeler verdien 4
x = 4

# tester betingelsen x == 4 og lagrer resultatet
# i variabelen test (som nå er av typen boolean)
# x == 4 trenger egentlig ikke parentes, men har
# brukt det her for å tydeliggjøre hva som er betingelsen
resultat = (x == 4)

# skriver ut datatypen til variabelen resultat
print(type(resultat))

# Skriver ut verdien i variablelen resultat
print(resultat)
<class 'bool'>
True

Forklaring

Først så tildeles variabelen “x” verdien 4, legg merke til at i Python så bruker vi = som en tildelingsoperator. Dernest tester Python om ( x == 4 ), og siden 4 == 4 så tildeles resultatet av testen, som er True til variabelen “resultat” som er av typen Boolean. Til slutt skrives datatypen til “resultat” ut ( type(resultat) ), og selve verdien.

Du kan selv teste, kjøre og gjøre endringer på denne på din egen maskin - bare kopier og lim inn!

Mer om likninger og ulikheter som betingelser i if-tester

I eksempelet over brukte vi “==” som en test på ekvivalens (likhet). Vi har selvfølgelig flere tester vi kan bruke i Python:

Table 1:Oversikt over logiske operatorer i Python

OperatorForklaring
==tester for likhet
<tester for ulikhet (mindre enn)
>tester for ulikhet (større enn)
<=tester for ulikhet (mindre enn ELLER lik)
>=tester for ulikhet (større enn ELLER lik)
!=tester for ikke-lik

Kodeeksemplet nedenfor viser igjen et eksempl på hvordan vi kan vite resultatet av en betingelse (test)

# Lager en variabel x og angir verdi
x = 3

resultat = (x == 4)
print(resultat)
False

Kopier denne koden inn ditt Python-program (slett den gamle koden først) og se på denne oppgaven:

Bruk av likninger og ulikheter i IF-tester

IF-tester brukes av datamaskinen til å ta avgjørelser og er et veldig sentralt element i koding. Det er også et viktig språklig verktøy i dagligtale for å kommunisere avgjørelser. HVIS noe er SANT så skal du gjøre en ting, HVIS IKKE så skal du kanskje gjøre noe annet. Det er nettopp her vi bruker matematikk og tester for å avgjøre om betingelsen oppfører seg som vi ønsker

Vi kan ta utgangspunkt i høydekravet til berg-og-dalbanen Speedmonster på Tusenfryd. Dersom man er lavere en 140 cm, så får man ikke kjøre denne berg-og-dalbanen. Oppgaven til vakten er å sjekke høyden til barna og ta en avgjørelse om de får lov til å kjøre eller ikke. I Python kan dette for eksempel se slik ut:

hoyde = 120

if hoyde < 140:
    print("Du får ikke lov denne gangen, dessverre!")
else:
    print("Versågod, ta plass")
Du får ikke lov denne gangen, dessverre!

I denne koden er det ulikheten (høyde < 140) som nå blir sann (True) og som bestemmer at teksten “du får ikke lov” skrives ut.

Ekvivalent kode

I eksempelet over sjekker vi for om høyden er mindre enn 140 cm, altså for om personen er under høydegrensen. Det går også an å tenke omvendt, at vi sjekker for om personen er høy nok. Det kan se slik ut:

hoyde = 120

if hoyde >= 140:
    print("Versågod, ta plass")
else:
    print("Du får ikke lov denne gangen, dessverre!")
Du får ikke lov denne gangen, dessverre!

Denne koden vil oppføre seg 100% likt som den forrige, og da kan vi si at kodene er ekvivalente - Det er opp til den som programmerer å velge den ene eller andre måten!

Bruke Python til å sjekke svar på en likning

En annen fin øvelse i programmering er å lage seg en likningstester. Vi kan ta utganspunkt i denne relativt enkle likningen:

2x4=x+32x - 4 = x + 3

Vi løser den kjapt også:

2xx=3+42x - x = 3 + 4

x=7x = 7

Vi kan faktisk ta utgangspunkt i den opprinnelige likningen og lage oss en test om vi har funnet svaret:

# Vi lar x være det vi tror er løsningen
x = 7

# Her kan vi teste om høyre og venstre side av den opprinnelige likningen er like
if 2*x-4 == x+3:
    print("løsningen x = " + str(x) + " er riktig")
else:
    print("løsningen x = " + str(x) +  " er ikke riktig")
løsningen x = 7 er riktig

Legg bare merke til at python krever at man skriver ut alle operatorer, inkludert gangetegnet *

Skriv ditt eget program

Skriv et program som utfører jobben til en konduktør på toget. Alle under 18 skal ha barnebillett, alle som er 67 eller eldre skal ha honnørbillett. Resten skal ha ordinær billett. Lykke til! Hint: i dette programmet kan det være lurt å bruke denne strukturen:

if test1:
    gjør noe
elif test2:
    gjør noe annet
else:
    gjør noe hvis ikke de to andre testene er sanne (TRUE)

TODO

Utvide opplegget til å bruke Boolsk algebra med sammensatte betingelser, OR AND NOT. Skjulte løsningsforslag på siste oppgave. mm