Fibonaccitall i pseudokode
Lov på eksamen
- Datamaskin med programmeringsverktøy
- Lærebok, dokumentasjon og egne notater og programmer
Ikke åpent internett (bare noen utvalgte nettressurser), kommunikasjon med andre eller kunstig intelligens.
Kan den løses uten PC?
Alle deloppgavene kan løses uten PC.
Fra 2027 er det bare kalkulator og skriftlige hjelpemidler på del 2. Vurderingen er gjort med KI og kan inneholde feil.
Ta utgangspunkt i følgende pseudokode:
SET n TO 10
SET a[0] TO 0
SET a[1] TO 1
FOR hvert heltall i fra og med 2 til n
SET a[i] TO a[i-1] + a[i-2]
ENDFOR
DISPLAY a[n]
Hva blir resultatet av programmet som er beskrevet i pseudokoden ovenfor?
Forklar algoritmen som er beskrevet i pseudokoden ovenfor.
Utvid/endre algoritmen slik at den viser de ti første av tallene som er generert på denne måten og som er partall. Lag et flytskjema som representerer denne nye algoritmen.
Fasit
Indeksfeil: Løkka går fra og med 2 til (men ikke med) , så a[10] blir aldri satt. Leser vi «til» som «til og med», blir resultatet .
Algoritmen lager Fibonacci-tallene i en indeksert variabel: Hvert tall er summen av de to foregående, og til slutt vises det siste tallet.
En WHILE-løkke lager nye tall til ti partall er vist, og en IF med a[i] % 2 EQUAL TO 0 bestemmer hvilke tall som vises. De ti første partallene i følgen er . Regner vi ikke startverdien med, blir det .
LøsningsforslagKI-generert
Løkka går «fra og med 2 til ». I oppgave 3 skriver eksamen uttrykkelig «til og med», så her tolker vi «til» som «til, men ikke med». Da går i fra 2 til 9:
i | a[i-2] | a[i-1] | a[i] |
|---|---|---|---|
| 2 | 0 | 1 | 1 |
| 3 | 1 | 1 | 2 |
| 4 | 1 | 2 | 3 |
| 5 | 2 | 3 | 5 |
| 6 | 3 | 5 | 8 |
| 7 | 5 | 8 | 13 |
| 8 | 8 | 13 | 21 |
| 9 | 13 | 21 | 34 |
Etter løkka inneholder a plassene 0 til 9. DISPLAY a[n] prøver å vise a[10], som aldri er satt. Resultatet blir en indeksfeil, for eksempel IndexError i Python.
Hadde løkka gått til og med 10, ville den også regnet ut a[10] = 21 + 34 = 55, og programmet ville vist 55.
Algoritmen lager Fibonacci-tallene i en indeksert variabel (liste) a:
- De to første tallene settes til
a[0] = 0oga[1] = 1. - Løkka går gjennom plassene fra 2 og oppover. Hvert nytt tall er summen av de to foregående:
a[i] = a[i-1] + a[i-2]. Listen blir . - Når løkka er ferdig, vises tallet på plass
ntil brukeren.
Hensikten er altså å finne Fibonacci-tall nummer , som er 55. Siden løkka stopper før i = 10, finnes ikke a[10], og visningen gir indeksfeil (se a). Feilen rettes ved å la løkka gå til og med n.
Vi vet ikke på forhånd hvor mange tall vi må lage før vi har funnet ti partall. En FOR-løkke med fast antall runder passer derfor dårlig. I stedet bruker vi en WHILE-løkke og en teller antall som holder styr på hvor mange partall som er vist:
SET a[0] TO 0
SET a[1] TO 1
DISPLAY a[0]
SET antall TO 1
SET i TO 2
WHILE antall LESSER THAN 10
SET a[i] TO a[i-1] + a[i-2]
IF a[i] % 2 EQUAL TO 0
DISPLAY a[i]
INCREMENT antall
ENDIF
INCREMENT i
ENDWHILE
Forklaring av endringene:
ntrengs ikke lenger. Løkka stopper nårantallhar nådd 10.- Startverdien
a[0] = 0er et partall og vises før løkka, såantallstarter på 1. Talleta[1] = 1er et oddetall og skal ikke vises. - Et tall er partall når resten ved deling med 2 er null (
a[i] % 2 EQUAL TO 0). Bare da vises tallet og telleren økes. iøkes i hver runde, uansett om tallet var partall eller ikke.
Programmet viser . Hvert tredje Fibonacci-tall er et partall, så løkka må lage tallene helt fram til a[27] = 196418. Vil vi ikke regne med startverdien 0, fjerner vi DISPLAY a[0] og setter antall til 0. Da slutter programmet med a[30] = 832040.

Flytskjemaet bruker standardsymbolene: ellipse for start og slutt, rektangel for tilordninger og beregninger, parallellogram for visning (utdata) og rombe for valg. Løkka er pila fra i = i + 1 tilbake til testen antall < 10 ?. Når svaret er «nei», er ti partall vist, og programmet stopper.
Sensorveiledning
Oppgaven gir til sammen 4,5 poeng
Det gis full uttelling for “indeksfeil” eller tilsvarende svar og halv uttelling for “55” som svar.
Det gis uttelling for forklaring av at løkken genererer en indeksert variabel med tall, at hvert tall er summen av de to foregående tallene og at det siste tallet i variabelen vises til bruker, etter at variabelen er ferdig generert, eventuelt for at visningen gir indeksfeil.
Det gis uttelling inntil 2p for flytdiagram med korrekt symbolbruk og inntil 2p for utvidelsen av algoritmen.