📄 Løsningsforslag: Eksamen#

Her er mine løsningsforslag til eksamen i Informasjonsteknologi 2.

Ta kontakt med meg på tobiasmelb@viken.no eller Teams hvis du finner noen feil eller om du har noen kommentarer.

Eksamen H23#

Dette er et løsningsforslag til eksamen H23. Du finner denne eksamen også på UDIR sine nettsider (lenke). Oppgavene er gjengitt her, men med små modifikasjoner.

Om eksamen fremover

Eksamensveiledningen for neste eksamen (V24) gir noen viktige hint om fremtiden for skriftlig eksamen IT2.

  • Første del skal dreies i en mer objektorientert retning.

  • Det kan bli bedt om testfunksjoner eller testmetoder. Se Testing II.

  • Det kan bli bedt om dynamiske brukergrensesnitt. Se Brukergrensesnitt.

Oppgave 1#

Hvilket av følgende er ikke et typisk kjennetegn på pseudokode? Velg riktig alternativ.

  • Den har uformell syntaks.

  • Den ligner på vanlig menneskespråk.

  • Den kan kjøres direkte på en datamaskin.

  • Den brukes ofte i planleggingsfasen av programmering.

Oppgave 2#

Hvilken av de følgende påstandene er riktige om for- og while-løkker innen programmering? Velg riktig alternativ.

  • En for-løkke kan bare brukes med tallsekvenser.

  • En while-løkke kjører alltid et bestemt antall ganger.

  • En for-løkke er best egnet når du vet hvor mange ganger løkken skal kjøre

  • En while-løkke kan ikke bruke en teller for å holde rede på hvor mange ganger den har kjørt.

Oppgave 3#

Hva er hovedprinsippet bak objektorientert programmering (OOP)? Velg riktig alternativ.

  • Å lage lineære og sekvensielle programkoder.

  • Å bryte ned et problem i et sett med funksjoner.

  • Å representere data og funksjoner som objekter.

  • Å minimere bruken av variabler.

Oppgave 4#

Hvilke av de følgende sekvensene med pseudokode skriver ut tallene fra og med \(1\) til og med \(5\)? Flere alternativer kan være riktige. Velg riktige svar.

SET i TO 1
FOR hver i LESSER OR EQUAL 5
    PRINT i
ENDFOR
SET i TO 1
WHILE i < 5
    PRINT i
    INCREMENT i
ENDWHILE
SET i TO 0
FOR hver i LESSER OR EQUAL 4
    PRINT i+1
ENDFOR
SET i TO 1
WHILE i <= 5
    PRINT i
    INCREMENT i BY 2
ENDWHILE

Oppgave 5#

Et system som beregner billettprisen avhengig av kjøperens alder, bruker følgende regler for billettkategorier:

  • Hvis brukeren er \(15\) år gammel eller yngre, skal brukeren få barnebillett til \(30\) kroner.

  • Hvis brukeren er \(16\) år gammel eller eldre, skal brukeren få voksenbillett til \(50\) kroner.

  • Hvis brukeren er \(67\) år gammel eller eldre, skal brukeren få pensjonistbillett til \(35\) kroner.

Lag et flytdiagram for et program der brukeren skriver inn alderen på kjøperen og programmet regner ut og skriver ut riktig billettpris.

Oppgave 6#

Du får i oppgave å finne det nest største tallet i en liste med tall. Dersom det finnes flere tall som er størst, skal ingen av disse regnes som nest størst.

a) Under finner du fire alternative løsninger for denne oppgaven skrevet i pseudokode. Hvilke to løsninger er riktige?

SET størst TO negativt uendelig tall 
FOR hvert tall i listen
        IF tall GREATER THAN størst
        SET størst TO tall
    ENDIF
ENDFOR
Fjern størst fra listen
SET nestStørst TO negativt uendelig tall
FOR hvert tall i listen
    IF tall GREATER THAN nestStørst
        SET nestStørst TO tall
    ENDIF
ENDFOR
DISPLAY nestStørst
SET størst TO første tall i listen
SET nestStørst TO andre tall i listen
IF nestStørst GREATER THAN størst
    Bytt størst og nestStørst
ENDIF
FOR hvert tall i listen med start fra tredje tall
    IF tall GREATER THAN størst
        SET nestStørst TO størst
        SET størst TO tall
    ELSEIF tall GREATER THAN nestStørst AND tall NOT EQUAL TO størst
        SET nestStørst TO tall
    ENDIF
ENDFOR
DISPLAY nestStørst
SET størst TO negativt uendelig tall
SET nestStørst TO negativt uendelig tall 
FOR hvert tall i listen
    IF tall GREATER THAN størst
        SET nestStørst TO størst
        SET størst TO tall
    ELSEIF tall GREATER THAN nestStørst
        SET nestStørst TO tall
    ENDIF
ENDFOR
DISPLAY nestStørst
Sorter listen i synkende rekkefølge 
FOR hvert tall i listen
    IF tall NOT EQUAL TO neste tall i listen
        DISPLAY neste tall i listen
        avbryt for-løkken
    ENDIF
ENDFOR

b) Vurder og sammenlikn de to løsningene du valgte i punkt a.

Oppgave 7#

Elementene i en liste skal sorteres etter i stigende rekkefølge etter følgende algoritme:

  • Man sammenlikner hvert element fra venstre til høyre i listen med neste element, og hvis elementet er større enn neste element, bytter de plass.

  • Deretter går man videre til neste element og sammenlikner på nytt frem til hele listen er gjennomgått.

  • Dette gjentas til hele listen gjennomgås uten at det forekommer noen ombyttinger.

Under finner du deler av pseudokoden for denne algoritmen. Her er a en liste med n elementer, og a[i] er elementet på plass i i listen.

SET i TO 0
FOR hver i LESSER THAN n - 1
    IF a[i] GREATER THAN a[i+1]
        CALL bytt_plass()
    ENDIF
ENDFOR

a) Hva blir innholdet i listen etter at vi har kjørt programmet representert ved pseudokoden over for listen a = [8, 5, 2, 6, 12]? Velg riktig alternativ.

  1. [5, 8, 2, 6, 12]

  2. [5, 2, 8, 6, 12]

  3. [5, 2, 6, 8, 12]

  4. [2, 5, 6, 8, 12]

b) Utvid pseudokoden slik at programmet den representerer, sorterer ferdig listen a i stigende rekkefølge etter algoritmen som vist øverst. Forklar endringene du gjør. Obs! Du må også lage pseudokode for funksjonen bytt_plass().

c) Implementer pseudokoden i ditt programmeringsspråk. Listen skal leses inn automatisk, og den ferdig sorterte listen skal skrives til terminalvinduet eller vises i programmet.

Oppgave 8#

Kommer

Oppgave 9#

Kommer

Oppgave 10#

Kommer

Oppgave 11#

Du skal lage et program som leser inn og presenterer informasjon fra et datasett. Du finner datasettet i forberedelsesdelen for eksamen H23 på UDIR sine nettsider (lenke).

Programmet du lager i denne oppgaven skal inneholde en flerlinjet kommentar øverst som beskriver vurderinger og antagelser du har gjort. Du kan velge om du svarer på oppgave a og b i samme oversikt, eller om du lager en oversikt for hvert oppgavepunkt.

a) Lag et program som finner og presenterer de ti landene i datasettet som har flest YouTube-kanaler.

b) Utvid programmet til å regne ut og presentere gjennomsnittlig tall på abonnementer og videovisninger per kanal hvor hvert av disse landene.

Oppgave 12#

I denne oppgaven skal du lage et spill som heter Manic Mansion.

I Manic Mansion styrer spilleren et menneske som prøver å hente hjem sauene sine en etter en. På veien må mennesket ta seg forbi hindringer og unngå å bli tatt av spøkelser.

Spillet starter med et spillebrett, et menneske, et spøkelse, tre hindringer og tre sauer. Mennesket skal styres av spilleren, og målet med spillet er å komme seg over på den andre siden av brettet og hente en sau flest mulig ganger uten å være i kontakt med noen av spøkelsene.

Du bør sette av om lag to timer til denne oppgaven.

Krav:

  • Ved oppstart skal spillet bestå av et spillebrett, et menneskeobjekt, et spøkelsesobjekt, tre hindringsobjekter og tre saueobjekter.

  • Det skal være en liten frisone både på venstre og høyre side av spillebrettet hvor kun mennesker og sauer kan oppholde seg, mens det ikke kan være spøkelser eller hindringer der.

  • Spøkelses- og hindringsobjektene plasseres på tilfeldige steder på spillebrettet, menneskeobjektet i frisonen på venstre side av spillebrettet og sauene på tilfeldige steder i frisonen på høyre side av spillebrettet. Ingen objekter skal være oppå hverandre.

  • Ulike typer objekter skal være visuelt forskjellige.

  • Menneskeobjektet starter i ro og kan bevege seg i rolig hastighet opp, ned, til venstre eller til høyre. Retningen styres med piltaster (alternativt tastene W, S, A og D).

  • Spøkelsesobjektene starter på et tilfeldig sted på spillebrettet, men altså ikke i noen av frisonene. Spøkelsesobjektene beveger seg med konstart fart i en tilfeldig retning. Spøkelsesobjektene kan bevege seg på skrå i flere forskjellige vinkler. Når et spøkelse treffer kanten av spillebrettet eller kanten på en av frisonene, endrer spøkelset retning. Spøkelset blokkeres ikke av hindringer eller av andre spøkelser, men går tvers gjennom dem.

  • Når menneskeobjektet treffer en hinding eller kanten av spillebrettet, blokkeres menneskeobjektet helt til retningen endres.

  • Når menneskeobjektet treffer et saueobjekt, skal det følgende skje:

  1. Saueobjektet fjernes fra spillebrettet (dette representerer at mennesket bærer sauen). (Alternativt: Saueobjektet «festes» til menneskeobjektet og følger mennesekeobjektets bevegelser.)

  2. Farten til menneskeobjektet reduseres.

  3. Fram til saueobjektet er levert på den andre siden, vil en kollisjon mellom menneskeobjektet og et annet saueobjekt føre til at spillet stoppes.

  • Når menneskeobjektet kommer tilbake til startsonen på venstre side av spillebrettet, skal det følgende skje:

  1. Spilleren får et poeng.

  2. Farten til menneskeobjektet økes til samme fart som ved spillets start.

  3. Et nytt saueobjekt plasseres et tilfeldig sted i frisonen til høyre på spillebrettet.

  4. Et nytt spøkelsesobjekt og et nytt hindringsobjekt plasseres på tilfeldige steder på spillebrettet.

  • Når menneskeobjektet, med eller uten sau, treffer et spøkelsesobjekt, skal spillet stoppes.

På figuren under ser du et forslag til en objektorientert modell for spillet.

../_images/H23_12.png

a) Forkar modellen.

b) Ta utgangspunkt i modellen, gjør tilpasninger av egenskaper og metoder der du mener det er nødvendig, og implementer spillet slik det er beskrevet i kravene. Tilpasningene du gjør, skal dokumenteres med kommentarer i programkoden.