Forstå og lage algoritmer for matematiske problemer.
Algoritmar i matematikk
Du bruker algoritmar kvar dag utan å tenkje over det. Når du følgjer ei oppskrift for å lage mat, eller når du sorterer spelkorta dine, utfører du ein algoritme. Ein algoritme er rett og slett ei oppskrift – ein steg-for-steg-plan for å løyse eit problem.
I matematikken har algoritmar blitt brukte i tusenvis av år. Den greske matematikaren Euklid skildra ein algoritme for å finne den største felles divisoren allereie rundt 300 f.Kr. I dag bruker vi datamaskinar til å utføre algoritmar lynraskt.
I dette kapittelet skal du lære:
- Kva ein algoritme er og kva som kjenneteiknar ein god algoritme
- Å lage flytdiagram for å skildre algoritmar visuelt
- Å kode klassiske algoritmar: finne primtal og sortere tal
Ein algoritme er ei nøyaktig, steg-for-steg-skildring av korleis ein løyser eit problem eller utfører ei oppgåve.
Kjenneteikn på ein god algoritme:
1. Endeleg: Han må stoppe etter eit avgrensa tal steg
2. Eintydig: Kvart steg må vere klart og presist, utan rom for tolking
3. Inndata: Han kan ta imot informasjon (input)
4. Utdata: Han gir eit resultat (output)
5. Effektiv: Han bør løyse problemet utan unødvendige steg
Kvardagsdøme: Algoritme for å krysse vegen:
1. Gå til eit gangfelt
2. Sjå til venstre
3. Sjå til høgre
4. Dersom det ikkje kjem bilar: gå over
5. Dersom det kjem bilar: vent, og gå tilbake til steg 2
Eit flytdiagram er ei visuell framstilling av ein algoritme. Det bruker ulike former for å vise dei forskjellige delane:
- Oval (avrunda rektangel): Start og slutt
- Rektangel: Ei handling/instruksjon
- Rombe (diamant): Eit val (ja/nei-spørsmål)
- Piler: Viser retninga – kva som skjer neste
Døme: Flytdiagram for «er eit tal partal?»
Start → Les inn talet → Er utan rest? → Ja: « er partal» → Slutt
→ Nei: « er oddetal» → Slutt
Flytdiagram er nyttige fordi dei gir oss eit oversyn over heile algoritmen før vi byrjar å kode.
Skildre ein algoritme som finn det største av tre tal , og .
1. Les inn tala , og
2. Set
storst = a3. Dersom
storst, set storst = b4. Dersom
storst, set 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)Døme: Med , og :
1. storst = 5
2. Er ? Ja, så storst = 12
3. Er ? Nei, storst held fram som
4. Svar:
Denne algoritmen fungerer uansett kva tal vi set inn!
«Ein algoritme må alltid skrivast som eit dataprogram for å kunne brukast.»
If-setningar (vilkår)
For å lage algoritmar som tek val, treng vi if-setningar. Dei lèt programmet velje ulike vegar basert på eit vilkår:
alder = int(input("Hvor gammel er du? "))
if alder >= 18:
print("Du er myndig")
else:
print("Du er ikke myndig ennå")Forklaring:
- if sjekkar om vilkåret er sant
- Dersom det er sant, køyrer koden under if
- Dersom det er usant, køyrer koden under else
Vi kan òg sjekke fleire vilkår 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 sjekkar vilkåra frå toppen. Så snart eit vilkår er sant, køyrer den tilhøyrande koden, og resten blir hoppa over.
Skriv ein algoritme som sjekkar om eit gitt tal er eit primtal.
Algoritme:
1. Les inn talet
2. Dersom : «Ikkje primtal»
3. For kvart tal frå til :
- Dersom er deleleg med : «Ikkje primtal», stopp
4. Dersom vi kom gjennom heile løkka utan å finne ein delar: «Primtal»
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")Døme:
- : Vi sjekkar – ingen gir rest , så er eit primtal
- : Vi sjekkar (rest !) – er ikkje eit primtal
Nøkkelord: break avsluttar løkka med ein gong. Når vi finn ein delar, treng vi ikkje sjekke fleire.
Bruk silen til Eratosthenes til å finne alle primtal opp til .
Algoritme:
1. Skriv opp alle tal frå til
2. Start med det minste talet (). Det er eit primtal.
3. Stryk alle multiplum av (bortsett frå sjølv):
4. Gå til neste tal som ikkje er strøke (). Det er eit primtal.
5. Stryk alle multiplum av (bortsett frå sjølv):
6. Hald fram med til du har gått gjennom alle
7. Tala som står att er primtala
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 primtal mellom og .
I silen til Eratosthenes brukte vi ei liste. Ei liste er ei samling av verdiar:
# 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 indekserte frå , ikkje . Det første elementet har indeks , det andre har indeks , og så vidare.
Vi kan lage ei liste med like verdiar:
# En liste med 10 nuller
nuller = [0] * 10
# Gir: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]Skildre og programmer ein algoritme som sorterer ei liste med tal frå minst til størst.
Algoritme:
1. Gå gjennom lista frå start til slutt
2. Samanlikn kvart element med neste element
3. Dersom dei er i feil rekkjefølgje, byt dei
4. Gjenta steg 1–3 til ingen byter trengst
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):
- → byt:
- → byt:
- → byt:
- → byt:
Etter første gjennomgang er det største talet () «bobla» til slutten. Vi treng fleire gjennomgangar for å sortere resten.
Bruk algoritmen til Euklid 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)Døme:
Skriv inn a: 48
Skriv inn b: 18
SFD av 48 og 18 er: 6Sjekk: Divisorane til er . Divisorane til er . Den største dei har felles er
Lage flytdiagram
Eit flytdiagram hjelper oss å planleggje ein algoritme visuelt før vi skriv kode. La oss lage eit flytdiagram for «sjekk om eit tal er deleleg 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 å teikne flytdiagram:
- Start alltid med ein oval «Start»
- Bruk rektangel for handlingar (utrekningar, utskrift)
- Bruk rombar for ja/nei-spørsmål
- Sørg for at alle vegar fører til «Slutt»
- Piler viser retninga gjennom algoritmen
Når du skal løyse eit programmeringsproblem, kan du følgje denne framgangsmåten:
1. Forstå problemet: Kva er input? Kva er ønskt output?
2. Skildre med ord: Skriv algoritmen med vanlege norske setningar
3. Teikn flytdiagram: Visualiser stega og vala
4. Skriv kode: Set om flytdiagrammet til Python
5. Test: Køyr programmet med ulike verdiar og sjekk at svaret er rett
Det er mykje lettare å feilsøkje ein algoritme i eit flytdiagram enn i kode!
Forklar med eigne ord kva ein algoritme er. Gi eit døme frå kvardagen som ikkje handlar om datamaskinar.
Kva skriv dette programmet ut? Er eit primtal?
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")Teikn eit flytdiagram for ein algoritme som avgjer om eit tal er positivt, negativt eller null.
Bruk algoritmen til Euklid (med penn og papir) til å finne SFD av følgjande talpar.
SFD
SFD
SFD
Bruk silen til Eratosthenes med penn og papir til å finne alle primtal opp til .
Skriv eit program som finn alle primtal mellom og ved å bruke silen til Eratosthenes.
Vis steg for steg korleis boblesortering sorterer lista .
Teikn eit flytdiagram for algoritmen til Euklid (finne SFD av to tal). Set deretter om flytdiagrammet til Python-kode.
Skriv eit program som ber brukaren om eit tal og skriv ut alle delarar (faktorane) til .
Lag ein algoritme (med flytdiagram eller pseudokode) og eit Python-program som gjettar eit hemmeleg tal mellom og . Programmet skal bruke «halveringssøk»: det gjettar midt i intervallet og brukaren svarar om det hemmelege talet er høgare, lågare eller rett.
Oppsummering
Algoritmar
- Ein algoritme er ei steg-for-steg-oppskrift for å løyse eit problem
- Kjenneteikn: endeleg, eintydig, med inndata og utdata
- Vi har brukt algoritmar i matematikken i tusenvis av år
Flytdiagram
- Visuell framstilling av ein algoritme
- Ovalar = start/slutt, rektangel = handlingar, rombar = val
- Nyttig for planlegging og kommunikasjon
Klassiske algoritmar
- Silen til Eratosthenes: Finn primtal ved å stryke multiplum systematisk
- Boblesortering: Sorterer tal ved å byte naboar i feil rekkjefølgje
- Algoritmen til Euklid: Finn største felles divisor (SFD) med gjentatt divisjon
- Binærsøk: Finn eit tal ved å halvere søkjeområdet for kvart steg
If-setningar
-
if, elif, else lèt programmet ta val- Samanlikningsoperatorar:
==, !=, <, >, <=, >=Lister
- Samling av verdiar:
tall = [3, 7, 2, 9]- Indekserte frå :
tall[0] gir -
len(tall) gir talet på elementProblemløysing
1. Forstå problemet (kva er input og output?)
2. Skildre algoritmen med ord
3. Teikn flytdiagram
4. Skriv kode
5. Test med ulike verdiar
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.