11.1 Algoritmer og pseudokode
Hva er en algoritme, flytdiagram og pseudokode.
Algoritmer og pseudokode
Har du noen gang tenkt over at en oppskrift på en kake egentlig er en algoritme? En oppskrift er en steg-for-steg-beskrivelse av hva du skal gjøre for å oppnå et bestemt resultat. På samme måte er en algoritme en presis oppskrift for å løse et problem.
I matematikk bruker vi algoritmer hele tiden, for eksempel når vi deler to tall med lang divisjon, eller når vi finner fellesnevner. I dette kapittelet skal du lære:
- Hva en algoritme er og hvorfor det er nyttig
- Hvordan du lager flytdiagrammer
- Hvordan du skriver pseudokode
- Klassiske algoritmer som Euklids algoritme
En algoritme er en endelig, presis beskrivelse av en fremgangsmåte for å løse et problem eller utføre en oppgave.
En god algoritme har disse egenskapene:
- Presis: Hvert steg er entydig beskrevet
- Endelig: Algoritmen stopper etter et endelig antall steg
- Generell: Den fungerer for alle gyldige inndata, ikke bare ett spesifikt tilfelle
Algoritmer kan beskrives med vanlig tekst, med pseudokode eller med flytdiagrammer.
Beskriv en algoritme som finner det største av tre tall , og .
Steg 1: Sett
Steg 2: Hvis , sett
Steg 3: Hvis , sett
Steg 4: er nå det største av de tre tallene
La oss teste med , , :
- Steg 1: størst
- Steg 2: , så størst
- Steg 3: er usant, så størst er fortsatt
- Svar: Det største tallet er .
Beskriv en algoritme (med vanlig tekst) som avgjør om et tall er positivt, negativt eller null.
Et flytdiagram er en grafisk fremstilling av en algoritme. Vi bruker standardiserte symboler:
| Symbol | Betydning |
|---|---|
| Oval (avrundet rektangel) | Start / Stopp |
| Rektangel | Prosess / Beregning |
| Diamant (rombe) | Beslutning (ja/nei) |
| Parallellogram | Inn-/utdata |
| Pil | Flyt / retning |
Flytdiagrammer gjør det lettere å se strukturen i en algoritme og er spesielt nyttige når det er forgreninger (if/else) eller løkker (gjentakelser).
Beskriv et flytdiagram som avgjør om et tall er partall eller oddetall.
Flytdiagrammet ser slik ut i tekstform:
1. [Start]
2. [Les inn tall n] (parallellogram)
3. [Er n delelig med 2?] (diamant)
- Ja [Skriv ut "Partall"] [Stopp]
- Nei [Skriv ut "Oddetall"] [Stopp]
Vi sjekker om er delelig med 2 ved å se om resten ved divisjon er 0:
For eksempel: : , altså er 14 et partall.
Tegn et flytdiagram som sjekker om et tall er positivt, negativt eller null. Bruk diamantsymboler for beslutninger og parallellogrammer for inn- og utdata.
Vanlige elementer i pseudokode:
- LES / SKRIV: Inn- og utdata
- SETT / LA: Tilordne verdier
- HVIS ... SÅ ... ELLERS: Betingelser (forgreninger)
- GJENTA ... MENS / FOR ... TIL: Løkker (gjentakelser)
- RETURNER: Gi tilbake et resultat
Pseudokode trenger ikke følge strenge syntaksregler, men den bør være presis nok til at noen kan oversette den til et ekte programmeringsspråk.
Skriv pseudokode som beregner 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 tallene fra 1 til 5 er .
Vi kan sjekke med formelen: \checkmark
Skriv pseudokode som beregner produktet (altså — n fakultet). Test pseudokoden din for .
Skriv pseudokoden.
Test pseudokoden for ved å lage en tabell over verdiene i hvert steg.
Euklids algoritme
En av de eldste kjente algoritmene er Euklids algoritme, oppkalt etter den greske matematikeren Euklid som beskrev den rundt 300 f.Kr. Denne algoritmen finner den største felles divisor (SFD) av to tall.
Den største felles divisor av to tall og er det største tallet som går opp i begge. Vi skriver .
For eksempel er fordi 4 er det største tallet som deler både 12 og 8.
1. Hvis , er . Stopp.
2. Beregn resten (resten når deles på ).
3. Sett og .
4. Gå til steg 1.
I pseudokode:
LES a, b
GJENTA MENS b ≠ 0
SETT r = a mod b
SETT a = b
SETT b = r
SLUTT GJENTA
SKRIV "SFD er " + aBruk Euklids algoritme til å finne .
| Steg | |||
|---|---|---|---|
| 1 | 48 | 18 | |
| 2 | 18 | 12 | |
| 3 | 12 | 6 | |
| 4 | 6 | 0 | Stopp! |
Når , er svaret .
Svar: .
Vi kan sjekke: og . Stemmer! \checkmark
Bruk Euklids algoritme til å finne den største felles divisor.
Finn .
Finn .
Finn .
Sorteringsalgoritmer
Sortering er en av de vanligste oppgavene i programmering. Når du søker etter noe på nettet, sorterer et digitalt musikkbibliotek, eller rangerer en tabell, brukes sorteringsalgoritmer.
En enkel sorteringsalgoritme er boblsortering (bubble sort). Ideen er:
1. Gå gjennom listen og sammenlign hvert par av naboelementer
2. Hvis to naboer er i feil rekkefølge, bytt dem
3. Gjenta til hele listen er sortert
Navnet "boblsortering" kommer av at de største verdiene gradvis "bobler" opp til riktig posisjon, litt som luftbobler i vann.
Sorter listen med boblsortering. Vis hvert steg.
Runde 1 (gå gjennom listen):
- Sammenlign 5 og 3: , bytt
- Sammenlign 5 og 8: , ok
- Sammenlign 8 og 1: , bytt
- Sammenlign 8 og 2: , bytt
Runde 2:
- , ok
- , bytt
- , bytt
Runde 3:
- , bytt
- , bytt
Runde 4:
- , ok. Ingen bytter ferdig!
Svar: Sortert liste: .
Sorter listen med boblsortering. Skriv ned listen etter hver runde.
Skriv pseudokode for en algoritme som finner det minste tallet i en liste med tall.
Oppsummering
I dette kapittelet har du lært:
- En algoritme er en presis, endelig oppskrift for å løse et problem
- Flytdiagrammer bruker standardiserte symboler (ovaler, rektangler, diamanter, parallellogrammer) for å visualisere algoritmer
- Pseudokode er en uformell tekstbeskrivelse av en algoritme som ligner et programmeringsspråk
- Euklids algoritme finner største felles divisor ved gjentatt divisjon med rest
- Boblsortering sorterer en liste ved å sammenligne og bytte naboer gjentatte ganger
Nøkkelbegreper
| Begrep | Forklaring |
|---|---|
| Algoritme | Presis, endelig fremgangsmåte for å løse et problem |
| Flytdiagram | Grafisk fremstilling av en algoritme med standardsymboler |
| Pseudokode | Uformell tekstbeskrivelse som ligner programmeringsspråk |
| SFD | Største felles divisor – det største tallet som deler begge tall |
| Boblsortering | Sorteringsalgoritme som bytter naboer i feil rekkefølge |
Skriv pseudokode for en algoritme som sjekker om et tall er et primtall. Test pseudokoden din for og .
Skriv pseudokoden.
Test for .
Test for .
En brøk kan forkortes ved å dele teller og nevner med . Skriv en algoritme (pseudokode eller flytdiagram) som leser inn en brøk og skriver ut den forkortede brøken. Test med .
FOR i = 1 TIL n
FOR j = 1 TIL n
HVIS liste[j] > liste[j+1]
BYTT liste[j] OG liste[j+1]Hun tester med listen , men programmet krasjer. Finn feilen og forklar hva som gikk galt.
En algoritme er det samme som et dataprogram.
a) Gi tre eksempler på algoritmer du møter i hverdagen, og forklar kort hva de gjør.
b) Diskuter fordeler og ulemper med at algoritmer tar beslutninger som påvirker mennesker. Kan en algoritme være «urettferdig»? Gi eksempler.
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.