Lær å beskrive algoritmer ved hjelp av pseudokode og flytdiagrammer.
Pseudokode og flytdiagram
Før du set deg ned og skriv kode, er det lurt å planleggje løysinga di. Akkurat som ein arkitekt teiknar planteikningar før byggjearbeidarane byrjar, bør ein programmerar skildre algoritmen sin før hen byrjar å kode. To av dei viktigaste verktøya for dette er pseudokode og flytdiagram.
Pseudokode lèt deg skildre algoritmen i ei blanding av naturleg språk og programmering, utan å bekymre deg for syntaksreglar og semikolon. Flytdiagram gjev deg eit visuelt bilete av korleis algoritmen flyt, noko som er spesielt nyttig for å forstå forgreiningar og løkker.
I dette kapittelet skal du lære å skrive klar og strukturert pseudokode, teikne flytdiagram med standardiserte symbol, og omsetje mellom pseudokode, flytdiagram og Python-kode. Desse ferdigheitene er verdifulle både på eksamen og i profesjonell programvareutvikling.
Korleis skrive god pseudokode
Sjølv om det ikkje finst éin offisiell standard for pseudokode, er det nokre konvensjonar som gjer pseudokoden lettare å lese og omsetje til kode:
Nøkkelord for kontrollstrukturar:
- LES eller INNDATA – les inn data frå brukaren
- SKRIV eller VIS – skriv ut data til skjermen
- SETT – tilordne ein verdi til ein variabel
- HVIS ... SÅ ... ELLERS – vilkår
- GJENTA SÅ LENGE – while-løkke
- FOR HVER ... I ... – for-løkke
- FUNKSJON – definere ein funksjon
- RETURNER – returnere ein verdi frå ein funksjon
Reglar for god pseudokode:
1. Bruk innrykk for å vise kva linjer som høyrer saman (som i Python)
2. Skriv nøkkelord med store bokstavar for å skilje dei frå vanleg tekst
3. Bruk skildrande variabelnamn som gjer det klart kva variabelen inneheld
4. Hald kvart steg på éi linje der det er mogleg
5. Nummerer linjene viss det gjer det lettare å referere til dei
6. Ver presis – unngå tvetydige formuleringar
Pseudokode er ikkje meint å køyrast av ei datamaskin. Han er eit kommunikasjonsverktøy mellom menneske, og den viktigaste eigenskapen hans er klarleik.
Skriv pseudokode for eit program som les inn karakterar til brukaren skriv -1, og deretter bereknar og viser gjennomsnittet.
SETT sum = 0
SETT antall = 0
LES karakter
GJENTA SÅ LENGE karakter != -1:
SETT sum = sum + karakter
SETT antall = antall + 1
LES karakter
HVIS antall > 0:
SETT gjennomsnitt = sum / antall
VIS "Gjennomsnittet er " + gjennomsnitt
ELLERS:
VIS "Ingen karakterer ble skrevet inn"Tilsvarande Python-kode:
summen = 0
antall = 0
karakter = int(input("Skriv inn karakter (-1 for å avslutte): "))
while karakter != -1:
summen += karakter
antall += 1
karakter = int(input("Skriv inn karakter (-1 for å avslutte): "))
if antall > 0:
gjennomsnitt = summen / antall
print(f"Gjennomsnittet er {gjennomsnitt:.2f}")
else:
print("Ingen karakterer ble skrevet inn")Legg merke til kor direkte omsetjinga er frå pseudokode til Python. GJENTA SÅ LENGE blir while, HVIS/ELLERS blir if/else, LES blir input(), og VIS blir print().
Flytdiagram
Eit flytdiagram er ei visuell framstilling av ein algoritme. Det bruker standardiserte symbol kopla saman med piler for å vise korleis data og kontroll flyt gjennom programmet. Flytdiagram er spesielt nyttige for å visualisere vilkår og løkker.
Standardsymbol i flytdiagram:
| Symbol | Form | Tyding |
|---|---|---|
| Start/Stopp | Avrunda rektangel (oval) | Markerer starten og slutten av algoritmen |
| Prosess | Rektangel | Ei handling eller berekning (t.d. «sum = a + b») |
| Avgjerd | Rombe (diamant) | Eit val basert på eit vilkår (Ja/Nei) |
| Inn/Ut | Parallellogram | Innlesing eller utskrift av data |
| Pil | Pil (→) | Viser retninga flyten følgjer |
Reglar for gode flytdiagram:
1. Kvart flytdiagram har nøyaktig éin Start og minst éin Stopp
2. Alle symbol skal ha piler som viser flyten
3. Avgjerdssymbol har alltid to utgangar: Ja og Nei
4. Pilene skal aldri krysse kvarandre der det kan unngåast
5. Flyten skal gå ovanfrå og ned som hovudretning
6. Bruk konsekvent stil og storleik på symbola
Skildre flytdiagrammet for ein algoritme som sjekkar om eit tal er partal eller oddetal.
[Start]
↓
[Les inn tall]
↓
<Er tall % 2 == 0?>
/ \
Ja Nei
↓ ↓
[Vis [Vis
"Partall"] "Oddetall"]
↓ ↓
\ /
↓
[Stopp]Forklaring:
1. Start-symbolet markerer byrjinga
2. Eit parallellogram (Inn/Ut) les inn talet
3. Ein rombe (Avgjerd) sjekkar om talet er deleleg med 2
4. Basert på svaret blir anten «Partall» eller «Oddetall» skrive ut
5. Begge greinene fører til Stopp-symbolet
Tilsvarande Python-kode:
tall = int(input("Skriv inn et tall: "))
if tall % 2 == 0:
print("Partall")
else:
print("Oddetall")Flytdiagrammet gjer det visuelt tydeleg at det er to moglege vegar gjennom programmet, avhengig av vilkåret.
Flytdiagram med løkker
Løkker i flytdiagram blir viste ved at ei pil går tilbake til eit tidlegare punkt i diagrammet, slik at ei gruppe symbol blir gjenteke. Her er eit døme på ei while-løkke som tel ned frå 5 til 1:
[Start]
↓
[Sett teller = 5]
↓
<Er teller > 0?>──Nei──→[Vis "Ferdig!"]──→[Stopp]
|
Ja
↓
[Vis teller]
↓
[Sett teller = teller - 1]
|
└────────→ (tilbake til beslutningen)Tilsvarande Python-kode:
teller = 5
while teller > 0:
print(teller)
teller -= 1
print("Ferdig!")Pila som går tilbake oppover er det som skaper løkka. Utan denne pila ville koden berre køyrt éin gong. Det er viktig at noko inne i løkka endrar vilkåret (her: teller blir redusert), slik at løkka til slutt stoppar.
For-løkker kan også visast i flytdiagram. Dei har ein teljar som blir auka automatisk i kvart gjennomløp:
[Start]
↓
[Sett i = 1]
↓
<Er i <= 10?>──Nei──→[Stopp]
|
Ja
↓
[Vis i * i]
↓
[Sett i = i + 1]
|
└────────→ (tilbake til beslutningen)Dette tilsvarer:
for i in range(1, 11):
print(i * i)Lag pseudokode, skildre flytdiagrammet, og skriv Python-kode for ein algoritme som finn summen av alle partal frå 1 til n.
LES n
SETT sum = 0
FOR HVER i FRA 1 TIL n:
HVIS i % 2 == 0:
SETT sum = sum + i
VIS "Summen av partall fra 1 til " + n + " er " + sumFlytdiagram (skildring):
[Start]
↓
[Les inn n]
↓
[Sett sum = 0, i = 1]
↓
<Er i <= n?>──Nei──→[Vis sum]──→[Stopp]
|
Ja
↓
<Er i % 2 == 0?>
/ \
Ja Nei
↓ |
[sum = sum + i] |
↓ |
\ /
↓
[i = i + 1]
|
└────────→ (tilbake til "Er i <= n?")Python-kode:
n = int(input("Skriv inn n: "))
summen = 0
for i in range(1, n + 1):
if i % 2 == 0:
summen += i
print(f"Summen av partall fra 1 til {n} er {summen}")Kjøring med n = 10:
Skriv inn n: 10
Summen av partall fra 1 til 10 er 30Partala frå 1 til 10 er 2, 4, 6, 8, 10, og summen er 2+4+6+8+10 = 30.
Når bør du bruke kva?
Både pseudokode og flytdiagram er nyttige verktøy, men dei har ulike styrkar:
| Eigenskap | Pseudokode | Flytdiagram |
|---|---|---|
| Representasjon | Tekstleg | Visuell |
| Best for | Detaljerte algoritmar | Overordna logikkflyt |
| Vilkår | Tydeleg med HVIS/ELLERS | Svært visuelt med rombe |
| Løkker | Kompakt skrivemåte | Piler som går tilbake |
| Komplekse algoritmar | Skalerer godt | Kan bli uoversiktleg |
| Omsetjing til kode | Svært direkte | Krev meir tolking |
| Kommunikasjon | Teknisk publikum | Breiare publikum |
Tilråding: Bruk flytdiagram for å visualisere den overordna logikken, spesielt for vilkår og løkker. Bruk pseudokode for å skildre detaljane i algoritmen. I praksis bruker mange programmerarar begge delar: først eit flytdiagram for å forstå den store strukturen, deretter pseudokode for å skildre kvart steg i detalj.
Uansett kva verktøy du bruker, er det viktigaste at du planlegg før du kodar. Erfarne programmerarar bruker ofte meir tid på planlegging og design enn på sjølve kodinga.
Du kan teikne flytdiagram for hand på papir, men det finst også gode digitale verktøy. draw.io (diagrams.net) er gratis og nettbasert, og har ferdige malar for flytdiagram. Lucidchart har ein gratis versjon for studentar. I VS Code finst utvidinga Draw.io Integration som lèt deg teikne diagram direkte i editoren. Å bruke digitale verktøy gjer det enkelt å redigere og dele diagramma dine.
Skriv pseudokode for eit program som validerer eit passord. Passordet må ha minst 8 teikn, innehalde minst éin stor bokstav, minst éin liten bokstav, og minst eitt siffer.
FUNKSJON valider_passord(passord):
HVIS lengden av passord < 8:
RETURNER "For kort – minst 8 tegn kreves"
SETT har_stor = USANN
SETT har_liten = USANN
SETT har_siffer = USANN
FOR HVERT tegn I passord:
HVIS tegn er stor bokstav:
SETT har_stor = SANN
HVIS tegn er liten bokstav:
SETT har_liten = SANN
HVIS tegn er siffer:
SETT har_siffer = SANN
HVIS IKKE har_stor:
RETURNER "Mangler stor bokstav"
HVIS IKKE har_liten:
RETURNER "Mangler liten bokstav"
HVIS IKKE har_siffer:
RETURNER "Mangler siffer"
RETURNER "Passordet er gyldig!"
LES passord
VIS valider_passord(passord)Python-kode:
def valider_passord(passord):
if len(passord) < 8:
return "For kort – minst 8 tegn kreves"
har_stor = False
har_liten = False
har_siffer = False
for tegn in passord:
if tegn.isupper():
har_stor = True
if tegn.islower():
har_liten = True
if tegn.isdigit():
har_siffer = True
if not har_stor:
return "Mangler stor bokstav"
if not har_liten:
return "Mangler liten bokstav"
if not har_siffer:
return "Mangler siffer"
return "Passordet er gyldig!"
passord = input("Skriv inn passord: ")
print(valider_passord(passord))Kjøring:
Skriv inn passord: Hemmelig123
Passordet er gyldig!
Skriv inn passord: kort
For kort – minst 8 tegn krevesKva form blir brukt for å representere ei avgjerd (eit vilkår) i eit flytdiagram?
Kva er hovudfordelen med pseudokode samanlikna med å skrive kode direkte?
Kva tilsvarer denne pseudokoden i Python?
SETT total = 0
FOR HVER tall I [3, 7, 2, 9]:
HVIS tall > 5:
SETT total = total + tall
VIS totalSkriv pseudokode for ein algoritme som sjekkar om eit ord er eit palindrom (blir lese likt frå begge retningar, som «anna» eller «regninger»). Omset deretter pseudokoden til Python.
Skildre eit flytdiagram (med tekst, som i døma) for ein algoritme som les inn tal frå brukaren heilt til brukaren skriv 0, og deretter viser det største talet som vart skrive inn.
Skriv pseudokode og Python-kode for eit program som gjettar eit tilfeldig tal mellom 1 og 100. Programmet skal gje tilbakemelding om gjettet er for høgt, for lågt eller riktig, og telje talet på forsøk.
Gjeve følgjande flytdiagram-skildring:
1. Start
2. Sett n = 1
3. Er n > 5? Ja: gå til 7. Nei: gå til 4.
4. Vis n * n
5. Sett n = n + 1
6. Gå til 3.
7. Stopp.
Kva er den fullstendige utskrifta frå dette flytdiagrammet?
Oppsummering
I dette kapittelet har du lært:
- Pseudokode: uformell, strukturert skildring av ein algoritme.
- Flytdiagram: grafisk framstilling av ein algoritme.
- Symbol: start/stopp, prosess, avgjerd og inn/ut-data.
- Omsetjing: mellom pseudokode, flytdiagram og Python.
- Når bruke kva: planlegging før koding.
Nøkkelbegrep
| Begrep | Forklaring |
|---|---|
| Pseudokode | Uformell tekstleg skildring av ein algoritme |
| Flytdiagram | Grafisk framstilling av ein algoritme |
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.