11.1 Algoritmer og pseudokode
Hva er en algoritme, flytdiagram og pseudokode.
Algoritmar og pseudokode
Har du nokon gong tenkt over at ein oppskrift på ei kake eigentleg er ein algoritme? Ein oppskrift er ei steg-for-steg-skildring av kva du skal gjera for å oppnå eit bestemt resultat. På same måten er ein algoritme ei presis oppskrift for å løysa eit problem.
I matematikk brukar vi algoritmar heile tida, til dømes når vi delar to tal med lang divisjon, eller når vi finn fellesnemnar. I dette kapitlet skal du læra:
- Kva ein algoritme er og kvifor det er nyttig
- Korleis du lagar flytdiagram
- Korleis du skriv pseudokode
- Klassiske algoritmar som Euklids algoritme
Ein algoritme er ei endeleg, presis skildring av ein framgangsmåte for å løysa eit problem eller utføra ei oppgåve.
Ein god algoritme har desse eigenskapane:
- Presis: Kvart steg er eintydig skildra
- Endeleg: Algoritmen stoggar etter eit endeleg tal steg
- Generell: Ho fungerer for all gyldige inndata, ikkje berre eitt spesifikt tilfelle
Algoritmar kan skildra med vanleg tekst, med pseudokode eller med flytdiagram.
Skildra ein algoritme som finn det største av tre tal , og .
Steg 1: Sett
Steg 2: Viss , sett
Steg 3: Viss , sett
Steg 4: er no det største av dei tre tala
La oss testa med , , :
- Steg 1: størst
- Steg 2: , så størst
- Steg 3: er usant, så størst er framleis
- Svar: Det største talet er .
Skildra ein algoritme (med vanleg tekst) som avgjer om eit tal er positivt, negativt eller null.
Eit flytdiagram er ei grafisk framstilling av ein algoritme. Vi brukar standardiserte symbol:
| Symbol | Tyding |
|---|---|
| Oval (avrundt rektangel) | Start / Stopp |
| Rektangel | Prosess / Berekning |
| Diamant (rombe) | Avgjerding (ja/nei) |
| Parallellogram | Inn-/utdata |
| Pil | Flyt / retning |
Flytdiagram gjer det lettare å sjå strukturen i ein algoritme og er særleg nyttige når det er forgreningar (if/else) eller løkker (gjentakingar).
Skildra eit flytdiagram som avgjer om eit tal er partal eller oddetal.
Flytdiagrammet ser slik ut i tekstform:
1. [Start]
2. [Les inn tal n] (parallellogram)
3. [Er n deleleg med 2?] (diamant)
- Ja [Skriv ut "Partal"] [Stopp]
- Nei [Skriv ut "Oddetal"] [Stopp]
Vi sjekkar om er deleleg med 2 ved å sjå om resten ved divisjon er 0:
Til dømes: : , altso er 14 eit partal.
Tegn eit flytdiagram som sjekkar om eit tal er positivt, negativt eller null. Bruk diamantsymbol for avgjeringar og parallellogram for inn- og utdata.
Vanlege element i pseudokode:
- LES / SKRIV: Inn- og utdata
- SETT / LA: Tilordna verdiar
- VISS ... SÅ ... ELLES: Vilkår (forgreningar)
- GJENTA ... MEDAN / FOR ... TIL: Løkker (gjentakingar)
- RETURNER: Gi tilbake eit resultat
Pseudokode treng ikkje fylgja strenge syntaksreglar, men ho bør vera presis nok til at nokon kan omsetja ho til eit ekte programmeringsspråk.
Skriv pseudokode som bereknar summen .
LES n
SETT sum = 0
FOR i = 1 TIL n
SETT sum = sum + i
SLUTT FOR
SKRIV "Summen er " + sumTest med :
| Steg | ||
|---|---|---|
| Start | — | 0 |
| 1 | 1 | |
| 2 | 2 | |
| 3 | 3 | |
| 4 | 4 | |
| 5 | 5 |
Summen av tala frå 1 til 5 er .
Vi kan sjekka med formelen: \checkmark
Skriv pseudokode som bereknar produktet (altso — n fakultet). Test pseudokoden din for .
Skriv pseudokoden.
Test pseudokoden for ved å laga ein tabell over verdiane i kvart steg.
Euklids algoritme
Ein av dei eldste kjende algoritmane er Euklids algoritme, oppkalla etter den greske matematikaren Euklid som skildra ho omkring 300 f.Kr. Denne algoritmen finn den største felles divisor (SFD) av to tal.
Den største felles divisor av to tal og er det største talet som går opp i båe. Vi skriv .
Til dømes er fordi 4 er det største talet som delar båe 12 og 8.
1. Viss , er . Stopp.
2. Berekna resten (resten når blir delt på ).
3. Sett og .
4. Gå til steg 1.
I pseudokode:
LES a, b
GJETA MEDAN b ≠ 0
SETT r = a mod b
SETT a = b
SETT b = r
SLUTT GJETA
SKRIV "SFD er " + aBruk Euklids algoritme til å finna .
| Steg | |||
|---|---|---|---|
| 1 | 48 | 18 | |
| 2 | 18 | 12 | |
| 3 | 12 | 6 | |
| 4 | 6 | 0 | Stopp! |
Når , er svaret .
Svar: .
Vi kan sjekka: og . Stemmer! \checkmark
Bruk Euklids algoritme til å finna den største felles divisor.
Finn .
Finn .
Finn .
Sorteringsalgoritmar
Sortering er ein av dei vanlegaste oppgåvene innan programmering. Når du søkjer etter noko på nettet, sorterer eit digitalt musikklibiotek, eller rangerer ein tabell, blir sorteringsalgoritmar brukte.
Ein enkel sorteringsalgoritme er boblsortering (bubble sort). Ideen er:
1. Gå gjennom lista og samanlikn kvart par av naboelementar
2. Viss to naboar er i feil rekkjefølgje, byt dei
3. Gjenta til heile lista er sortert
Namnet «boblsortering» kjem av at dei største verdiane gradvis «boblar» opp til rett posisjon, litt som luftbobler i vatn.
Sorter lista med boblsortering. Vis kvart steg.
Runde 1 (gå gjennom lista):
- Samanlikn 5 og 3: , byt
- Samanlikn 5 og 8: , ok
- Samanlikn 8 og 1: , byt
- Samanlikn 8 og 2: , byt
Runde 2:
- , ok
- , byt
- , byt
Runde 3:
- , byt
- , byt
Runde 4:
- , ok. Ingen byttar ferdig!
Svar: Sortert lista: .
Sorter lista med boblsortering. Skriv ned lista etter kvar runde.
Skriv pseudokode for ein algoritme som finn det minste talet i ei liste med tal.
Oppsummering
I dette kapitlet har du lært:
- Ein algoritme er ein presis, endeleg oppskrift for å løyse eit problem
- Flytdiagram bruker standardiserte symbol (ovalar, rektanglar, diamantar, parallellogram) for å visualisere algoritmar
- Pseudokode er ein uformell tekstbeskrivelse av ein algoritme som liknar eit programmeringsspråk
- Euklids algoritme finn største felles divisor ved gjentatt divisjon med rest
- Boblsortering sorterer ei liste ved å samanlikne og bytte naboar gjentatte gonger
Nøkkelbegrep
| Begrep | Forklaring |
|---|---|
| Algoritme | Presis, endeleg fremgangsmåte for å løyse eit problem |
| Flytdiagram | Grafisk framstilling av ein algoritme med standardsymbol |
| Pseudokode | Uformell tekstbeskrivelse som liknar programmeringsspråk |
| SFD | Største felles divisor – det største talet som deler begge tal |
| Boblsortering | Sorteringsalgoritme som byttar naboar i feil rekkjefølgje |
Skriv pseudokode for ein algoritme som sjekkar om eit tal er eit primtal. Test pseudokoden din for og .
Skriv pseudokoden.
Test for .
Test for .
Ei brøk kan forkortast ved å dele teljaren og nemnaren med . Skriv ein algoritme (pseudokode eller flytdiagram) som les inn ei brøk og skriv ut den forkortede brøken. Test med .
FOR i = 1 TIL n
FOR j = 1 TIL n
VISS liste[j] > liste[j+1]
BYTTLISTE[j] OG liste[j+1]Ho testar med lista , men programmet krasjar. Finn feilen og forklar kva som gjekk galet.
Ein algoritme er det same som eit dataprogram.
a) Gi tre døme på algoritmar du møter i kvardagen, og forklar kort kva dei gjer.
b) Diskuter fordelar og ulemper med at algoritmar tek avgjerder som påverkar menneske. Kan ein algoritme vere «urettferdig»? Gi døme.
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.