Pseudokode og flytskjema#

Pseudokode og flytskjema er måter å representere programmer eller rutiner. Disse representasjonsformene er nyttig for å kommunisere på tvers av programmeringsspråk.

Vi skal vi ta utgangspunkt i FizzBuzz for å lage diagrammer og skrive pseudokode.

FizzBuzz

Lag et program som skriver ut tallene fra og med \(1\) til og med \(100\), men…

  • … om tallet er delbart på \(3\) skal du skrive ut Fizz

  • … om tallet er delbart på \(5\) skal du skrive ut Buzz

  • … om tallet er delbart på både \(3\) og \(5\) skal du skrive ut FizzBuzz

Pseudokode#

I pseudokode bruker vi et uformelt språk for å representere en programflyt, men uten å kompilere det til et program som skal kunne kjøre på datamaskinen. Selv om språket er uformelt, så er det nyttig å være enig om hvordan man skriver enkelte ting. Her kommer noe av det språket som brukes på eksamen.

Logiske operatorer#

Logiske operatorer returnerer sannhetsverdier (True eller False) for utsagn. Man kan sette sammen flere utsagn med AND eller OR.

NOT, OR, AND, EQUAL TO, LESSER THAN, GREATER THAN
a LESSER THAN 100
a LESSER THAN 100 OR a EQUAL TO 100
Pythonsk
a < 100
a <= 100

Output og input#

I Python tar vi input med input() og skriver output med print().

READ
READ a
Pythonsk
a = input()
DISPLAY

Man kan også bruke PRINT eller SHOW

DISPLAY "Hello World!"
Pythonsk
print("Hello World!")

Operasjoner#

Operasjoner er ting som å sette lik, lese fra input og vise output til bruker.

SET TO
SET a TO 1
SET ferdig TO False
Pythonsk
a = 1
a = False
INCREMENT, DECREMENT
INCREMENT a
DECREMENT b
Pythonsk
a += 1
b -= 1
CALL, RETURNING
SET a TO 4
CALL sqrt(a) RETURNING svar
DISPLAY svar
Pythonsk
a = 4
svar = sqrt(a)
print(svar)

Flytkontroll (branching)#

Flytkontroll gjør at vi kan styre flyten av programmet. I Python gjør vi det med løkker, if-setninger, klasser og funksjoner.

FOR
FOR x IN liste
    DISPLAY x
ENDFOR
FOR n IN [1, 2, ..., 100]
    DISPLAY n
ENDFOR
Pythonsk
for x in liste:
    print(x)
for n in range(1, 101):
    print(n)
WHILE
SET n TO 1
WHILE n LESSER THAN 10
    DISPLAY n
    INCREMENT n
ENDWHILE
Pythonsk
n = 1
while n < 10:
    print(n)
    n += 1
FUNCTION
FUNCTION f(x)
    RETURN x**2
ENDFUNCTION
Pythonsk
def f(x):
    return x**2
IF
IF alder GREATER THAN 67 
THEN SET pris TO 50
ELSE IF alder LESS THAN 18 
THEN SET pris TO 25
ELSE SET pris TO 75
IF kunde_type EQUALS TO "Administrator" 
THEN SEQUENCE
    DISPLAY "Trykk 1 for å vise passordene"
    READ a
    IF a EQUALS TO "1"
    THEN DISPLAY passord_liste
Pythonsk
if alder > 67:
    pris = 50
elif alder < 18:
    pris = 25
else:
    pris = 75
if kunde_type == "Administrator":
    a = input("Trykk 1 for å vise passordene")
    if a == "1":
        print(passord_liste)

Eksempel: FizzBuzz#

Her er et eksempel på hvordan man kan skrive FizzBuzz med pseudokode. Prøv gjerne selv før du åpner eksempelet.

Flytskjema#

Her er et flytskjema som representerer programflyten for FizzBuzz. Flytskjemaet er tegnet i draw.io.

Et flytskjema som representerer programflyten for FizzBuzz for tallene fra og med 1 til og med 100.

Her er en forklaring på tegnene som brukes.

  • Diamanter ♦️ brukes for if-setninger

  • Parallellogrammer brukes for input/output

  • Bokser brukes for prosesser hvor man endrer på data.

  • Rundede bokser brukes til start og stopp på programmet.

Sirkelen nede til venstre er bare en måte å rydde litt i tegnene; litt cable management.


Oppgaver#

Oppgave 1 🅰️

Et karaktersystem er som følger:

Måloppnåelse

Prosent riktig

Høy

80% - 100%

Middels

60% - 79%

Lav

0% - 59%

Du skal lage et program som tar en poengsum og en maks_poengsum som input, regner ut prosent riktig, og printer en måloppnåelse basert på tabellen over.

  1. Lag et flytskjema for programmet.

  2. Lag en pseudokode for programmet.

  3. Implementer programmet i Python.