Forstå og lage algoritmer for matematiske problemer.
Algoritmer i matematikk
Du bruker algoritmer hver dag uten å tenke over det. Når du følger en oppskrift for å lage mat, eller når du sorterer spillkortene dine, utfører du en algoritme. En algoritme er rett og slett en oppskrift – en steg-for-steg-plan for å løse et problem.
I matematikken har algoritmer blitt brukt i tusenvis av år. Den greske matematikeren Euklid beskrev en algoritme for å finne den største felles divisoren allerede rundt 300 f.Kr. I dag bruker vi datamaskiner til å utføre algoritmer lynraskt.
I dette kapittelet skal du lære:
- Hva en algoritme er og hva som kjennetegner en god algoritme
- Å lage flytdiagram for å beskrive algoritmer visuelt
- Å kode klassiske algoritmer: finne primtall og sortere tall
En algoritme er en nøyaktig, steg-for-steg-beskrivelse av hvordan man løser et problem eller utfører en oppgave.
Kjennetegn på en god algoritme:
1. Endelig: Den må stoppe etter et begrenset antall steg
2. Entydig: Hvert steg må være klart og presist, uten rom for tolkning
3. Inndata: Den kan ta imot informasjon (input)
4. Utdata: Den gir et resultat (output)
5. Effektiv: Den bør løse problemet uten unødvendige steg
Hverdagseksempel: Algoritme for å krysse veien:
1. Gå til et gangfelt
2. Se til venstre
3. Se til høyre
4. Hvis det ikke kommer biler: gå over
5. Hvis det kommer biler: vent, og gå tilbake til steg 2
Et flytdiagram er en visuell fremstilling av en algoritme. Det bruker ulike former for å vise de forskjellige delene:
- Oval (avrundet rektangel): Start og slutt
- Rektangel: En handling/instruksjon
- Rombe (diamant): En beslutning (ja/nei-spørsmål)
- Piler: Viser retningen – hva som skjer neste
Eksempel: Flytdiagram for «er et tall partall?»
Start → Les inn tallet → Er uten rest? → Ja: « er partall» → Slutt
→ Nei: « er oddetall» → Slutt
Flytdiagram er nyttige fordi de gir oss en oversikt over hele algoritmen før vi begynner å kode.
Beskriv en algoritme som finner det største av tre tall , og .
1. Les inn tallene , og
2. Sett
storst = a3. Hvis
storst, sett storst = b4. Hvis
storst, sett storst = c5. Skriv ut
storstPython-kode:
a = int(input("Skriv inn a: "))
b = int(input("Skriv inn b: "))
c = int(input("Skriv inn c: "))
storst = a
if b > storst:
storst = b
if c > storst:
storst = c
print("Det største tallet er:", storst)Eksempel: Med , og :
1. storst = 5
2. Er ? Ja, så storst = 12
3. Er ? Nei, storst forblir
4. Svar:
Denne algoritmen fungerer uansett hvilke tall vi setter inn!
«En algoritme må alltid skrives som et dataprogram for å kunne brukes.»
If-setninger (betingelser)
For å lage algoritmer som tar beslutninger, trenger vi if-setninger. De lar programmet velge ulike veier basert på en betingelse:
alder = int(input("Hvor gammel er du? "))
if alder >= 18:
print("Du er myndig")
else:
print("Du er ikke myndig ennå")Forklaring:
- if sjekker om betingelsen er sann
- Hvis den er sann, kjøres koden under if
- Hvis den er usann, kjøres koden under else
Vi kan også sjekke flere betingelser med elif (kort for «else if»):
poeng = int(input("Hvor mange poeng fikk du? "))
if poeng >= 90:
print("Karakter: 6")
elif poeng >= 75:
print("Karakter: 5")
elif poeng >= 60:
print("Karakter: 4")
elif poeng >= 40:
print("Karakter: 3")
elif poeng >= 25:
print("Karakter: 2")
else:
print("Karakter: 1")Python sjekker betingelsene fra toppen. Så snart en betingelse er sann, kjøres den tilhørende koden, og resten hoppes over.
Skriv en algoritme som sjekker om et gitt tall er et primtall.
Algoritme:
1. Les inn tallet
2. Hvis : «Ikke primtall»
3. For hvert tall fra til :
- Hvis er delelig med : «Ikke primtall», stopp
4. Hvis vi kom gjennom hele løkken uten å finne en deler: «Primtall»
Python-kode:
n = int(input("Skriv et tall: "))
if n < 2:
print(n, "er ikke et primtall")
else:
er_primtall = True
for i in range(2, n):
if n % i == 0:
er_primtall = False
break # Trenger ikke sjekke flere
if er_primtall:
print(n, "er et primtall")
else:
print(n, "er ikke et primtall")Eksempler:
- : Vi sjekker – ingen gir rest , så er et primtall
- : Vi sjekker (rest !) – er ikke et primtall
Nøkkelord: break avslutter løkken umiddelbart. Når vi finner en deler, trenger vi ikke sjekke flere.
Bruk Eratosthenes' sil til å finne alle primtall opp til .
Algoritme:
1. Skriv opp alle tall fra til
2. Start med det minste tallet (). Det er et primtall.
3. Stryk alle multipler av (unntatt selv):
4. Gå til neste tall som ikke er strøket (). Det er et primtall.
5. Stryk alle multipler av (unntatt selv):
6. Fortsett med til du har gått gjennom alle
7. Tallene som gjenstår er primtallene
Python-kode:
grense = 50
er_primtall = [True] * (grense + 1)
er_primtall[0] = False
er_primtall[1] = False
for i in range(2, grense + 1):
if er_primtall[i]:
# Stryk alle multipler av i
for j in range(i * 2, grense + 1, i):
er_primtall[j] = False
# Skriv ut alle primtall
print("Primtall opp til", grense, ":")
for i in range(2, grense + 1):
if er_primtall[i]:
print(i, end=" ")Utskrift:
Primtall opp til 50:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47Det er primtall mellom og .
I Eratosthenes' sil brukte vi en liste. En liste er en samling av verdier:
# Lage en liste med tall
tall = [3, 7, 2, 9, 1]
print(tall) # [3, 7, 2, 9, 1]
print(tall[0]) # 3 (første element, indeks 0)
print(tall[2]) # 2 (tredje element, indeks 2)
print(len(tall)) # 5 (antall elementer)Viktig: Lister i Python er indeksert fra , ikke . Det første elementet har indeks , det andre har indeks , og så videre.
Vi kan lage en liste med like verdier:
# En liste med 10 nuller
nuller = [0] * 10
# Gir: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]Beskriv og programmer en algoritme som sorterer en liste med tall fra minst til størst.
Algoritme:
1. Gå gjennom listen fra start til slutt
2. Sammenlign hvert element med neste element
3. Hvis de er i feil rekkefølge, bytt dem
4. Gjenta steg 1–3 til ingen bytter trengs
Python-kode:
tall = [64, 25, 12, 22, 11]
print("Før sortering:", tall)
n = len(tall)
for i in range(n - 1):
for j in range(n - 1 - i):
if tall[j] > tall[j + 1]:
# Bytt de to tallene
tall[j], tall[j + 1] = tall[j + 1], tall[j]
print("Etter sortering:", tall)Utskrift:
Før sortering: [64, 25, 12, 22, 11]
Etter sortering: [11, 12, 22, 25, 64]Steg for steg (første gjennomgang):
- → bytt:
- → bytt:
- → bytt:
- → bytt:
Etter første gjennomgang er det største tallet () «boblet» til slutten. Vi trenger flere gjennomganger for å sortere resten.
Bruk Euklids algoritme til å finne den største felles divisoren (SFD) av og .
Steg for steg:
1. : →
2. : →
3. : → Ferdig! SFD
Python-kode:
a = int(input("Skriv inn a: "))
b = int(input("Skriv inn b: "))
# Lagre originalverdiene for utskrift
a_orig, b_orig = a, b
while b != 0:
rest = a % b
a = b
b = rest
print("SFD av", a_orig, "og", b_orig, "er:", a)Eksempel:
Skriv inn a: 48
Skriv inn b: 18
SFD av 48 og 18 er: 6Sjekk: Divisorene til er . Divisorene til er . Den største de har felles er
Lage flytdiagram
Et flytdiagram hjelper oss å planlegge en algoritme visuelt før vi skriver kode. La oss lage et flytdiagram for «sjekk om et tall er delelig med »:
Flytdiagram (tekstversjon):
┌──────────┐
│ START │
└────┬─────┘
│
┌────▼─────┐
│ Les inn │
│ tall n │
└────┬─────┘
│
┌────▼─────────┐
│ Er n % 3 == 0│
│ (rest=0?) │
└──┬────────┬──┘
│ Ja │ Nei
┌────▼────┐ ┌─▼──────────┐
│ Skriv: │ │ Skriv: │
│ "n er │ │ "n er ikke │
│ delelig │ │ delelig │
│ med 3" │ │ med 3" │
└────┬────┘ └─┬──────────┘
│ │
┌──▼────────▼──┐
│ SLUTT │
└──────────────┘Tips for å tegne flytdiagram:
- Start alltid med en oval «Start»
- Bruk rektangler for handlinger (beregninger, utskrift)
- Bruk romber for ja/nei-spørsmål
- Sørg for at alle veier fører til «Slutt»
- Piler viser retningen gjennom algoritmen
Når du skal løse et programmeringsproblem, kan du følge denne fremgangsmåten:
1. Forstå problemet: Hva er input? Hva er ønsket output?
2. Beskriv med ord: Skriv algoritmen med vanlige norske setninger
3. Tegn flytdiagram: Visualiser stegene og beslutningene
4. Skriv kode: Oversett flytdiagrammet til Python
5. Test: Kjør programmet med ulike verdier og sjekk at svaret er riktig
Det er mye lettere å feilsøke en algoritme i et flytdiagram enn i kode!
Forklar med egne ord hva en algoritme er. Gi et eksempel fra hverdagen som ikke handler om datamaskiner.
Hva skriver dette programmet ut? Er et primtall?
n = 15
er_primtall = True
for i in range(2, n):
if n % i == 0:
er_primtall = False
break
if er_primtall:
print("Primtall")
else:
print("Ikke primtall")Tegn et flytdiagram for en algoritme som avgjør om et tall er positivt, negativt eller null.
Bruk Euklids algoritme (med penn og papir) til å finne SFD av følgende tallpar.
SFD
SFD
SFD
Bruk Eratosthenes' sil med penn og papir til å finne alle primtall opp til .
Skriv et program som finner alle primtall mellom og ved å bruke Eratosthenes' sil.
Vis steg for steg hvordan boblesortering sorterer listen .
Tegn et flytdiagram for Euklids algoritme (finne SFD av to tall). Oversett deretter flytdiagrammet til Python-kode.
Skriv et program som ber brukeren om et tall og skriver ut alle delere (faktorene) til .
Lag en algoritme (med flytdiagram eller pseudokode) og et Python-program som gjetter et hemmelig tall mellom og . Programmet skal bruke «halveringssøk»: det gjetter midt i intervallet og brukeren svarer om det hemmelige tallet er høyere, lavere eller riktig.
Oppsummering
Algoritmer
- En algoritme er en steg-for-steg-oppskrift for å løse et problem
- Kjennetegn: endelig, entydig, med inndata og utdata
- Vi har brukt algoritmer i matematikken i tusenvis av år
Flytdiagram
- Visuell fremstilling av en algoritme
- Ovaler = start/slutt, rektangler = handlinger, romber = beslutninger
- Nyttig for planlegging og kommunikasjon
Klassiske algoritmer
- Eratosthenes' sil: Finner primtall ved å stryke multipler systematisk
- Boblesortering: Sorterer tall ved å bytte naboer i feil rekkefølge
- Euklids algoritme: Finner største felles divisor (SFD) med gjentatt divisjon
- Binærsøk: Finner et tall ved å halvere søkeområdet for hvert steg
If-setninger
-
if, elif, else lar programmet ta beslutninger- Sammenligningsoperatorer:
==, !=, <, >, <=, >=Lister
- Samling av verdier:
tall = [3, 7, 2, 9]- Indeksert fra :
tall[0] gir -
len(tall) gir antall elementerProblemløsning
1. Forstå problemet (hva er input og output?)
2. Beskriv algoritmen med ord
3. Tegn flytdiagram
4. Skriv kode
5. Test med ulike verdier
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.