Tilbake
3.3
Pseudokode og flytdiagrammer

3.3 Pseudokode og flytdiagrammer

Lær å beskrive algoritmer ved hjelp av pseudokode og flytdiagrammer.

55 min
7 oppgaver
PseudokodeFlytdiagramProsessymbolBeslutningssymbol
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 7 oppgaver

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.

Pseudokode
Pseudokode er ei uformell, tekstleg skildring av ein algoritme som bruker strukturerte nøkkelord for kontrollstrukturar (som HVIS, ELLERS, GJENTA, SÅ LENGE, FOR HVER), men som ikkje er bunden til syntaksen til noko bestemt programmeringsspråk. Pseudokoden skal vere presis nok til at ein programmerar kan omsetje han direkte til kode, men lesbar nok til at også ikkje-programmerarar kan forstå han. Det finst ingen offisiell standard for pseudokode, men det er vanleg å bruke innrykk for å vise struktur.

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.

✏️Pseudokode for å berekne karaktersnitt

Skriv pseudokode for eit program som les inn karakterar til brukaren skriv -1, og deretter bereknar og viser gjennomsnittet.

Pseudokode:
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:

SymbolFormTyding
Start/StoppAvrunda rektangel (oval)Markerer starten og slutten av algoritmen
ProsessRektangelEi handling eller berekning (t.d. «sum = a + b»)
AvgjerdRombe (diamant)Eit val basert på eit vilkår (Ja/Nei)
Inn/UtParallellogramInnlesing eller utskrift av data
PilPil (→)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

✏️Flytdiagram for partal/oddetal

Skildre flytdiagrammet for ein algoritme som sjekkar om eit tal er partal eller oddetal.

Skildring av flytdiagrammet (ovanfrå og ned):

[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)
✏️Frå pseudokode til flytdiagram til Python

Lag pseudokode, skildre flytdiagrammet, og skriv Python-kode for ein algoritme som finn summen av alle partal frå 1 til n.

Pseudokode:
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 " + sum

Flytdiagram (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 30

Partala 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:

EigenskapPseudokodeFlytdiagram
RepresentasjonTekstlegVisuell
Best forDetaljerte algoritmarOverordna logikkflyt
VilkårTydeleg med HVIS/ELLERSSvært visuelt med rombe
LøkkerKompakt skrivemåtePiler som går tilbake
Komplekse algoritmarSkalerer godtKan bli uoversiktleg
Omsetjing til kodeSvært direkteKrev meir tolking
KommunikasjonTeknisk publikumBreiare 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.
✏️Kompleks pseudokode: passordvalidering

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.

Pseudokode:
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 kreves
📝Oppgave 3.3.1

Kva form blir brukt for å representere ei avgjerd (eit vilkår) i eit flytdiagram?

📝Oppgave 3.3.2

Kva er hovudfordelen med pseudokode samanlikna med å skrive kode direkte?

📝Oppgave 3.3.3

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 total

📝Oppgave 3.3.4

Skriv 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.

📝Oppgave 3.3.5

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.

📝Oppgave 3.3.6

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.

📝Oppgave 3.3.7

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


BegrepForklaring
PseudokodeUformell tekstleg skildring av ein algoritme
FlytdiagramGrafisk 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.