Læringsmål

Oversikt over læringsmål dekket i TDT4110 Informasjonsteknologi grunnkurs

Kilde: Læringsmålene er utformet av Skolesaga på grunnlag av emnets eksamensoppgaver, sensorveiledninger og emnebeskrivelse. De er ikke institusjonens offisielle læringsutbyttebeskrivelser.

186 kompetansemål47 av 47 kapitler har kompetansemål

Alle kompetansemål

kunne gjøre rede for hvordan eksamen er bygd opp, og hvor mye hver av de tre delene teller
kunne kjenne igjen de ti oppgavetypene som går igjen, og vite hvilken oppskrift hver av dem har
kunne prioritere lesingen ut fra hvor ofte et tema faktisk har kommet på eksamen
kunne sette opp et tidsbudsjett for de fire timene ut fra prosentvekten som står på settet
kunne skille tall, tekst og sannhetsverdier fra hverandre, og forklare hvorfor samme plusstegn betyr to forskjellige ting
kunne regne ut hva heltallsdeling og resten gir, også når tallet er negativt
kunne gjøre om mellom tekst og tall, og vite nøyaktig når omgjøringen er nødvendig
kunne lese et uttrykk med flere regneoperatorer i riktig rekkefølge
kunne avgjøre om et sammensatt vilkår er sant, med riktig rekkefølge på og-, eller- og ikke-leddene
kunne velge mellom en kjede av trinnvise tester og flere selvstendige tester, og forklare forskjellen
kunne bruke at Python slutter å regne så snart svaret er avgjort, til å teste en verdi før den konverteres
kunne skrive en funksjon som svarer sant eller usant, uten unødvendige omveier
kunne telle nøyaktig hvor mange ganger en løkke kjører, og hvilke verdier tellevariabelen får
kunne bygge opp en sum eller en teller i en løkke, med riktig startverdi og riktig plassering
kunne spore en løkke inne i en løkke der den indre grensen avhenger av den ytre
kunne avgjøre om en betingelsesstyrt løkke stopper etter et endelig antall runder, eller aldri
kunne lese en verdi fra brukeren og gjøre den om til riktig datatype før den brukes
kunne skrive en løkke som gjentar spørsmålet med feilmelding til svaret er lovlig
kunne formulere en gyldighetstest og snu den riktig når den skal stå i en while-betingelse
kunne la brukeren avslutte selv med et avtalt stoppsignal, uten at programmet krasjer
kunne spore et lite Python-program under tidspress og angi utskriften nøyaktig
kunne avgjøre hva en funksjon med et sammensatt boolsk uttrykk returnerer, for flere ulike kall
kunne telle riktig antall runder i en løkke, også når grensene er nøstede eller krympende
kunne skrive en input-valideringsløkke fra bunnen, uten mal og uten maskin
kunne definere en funksjon med parametere og kalle den med egne verdier
kunne skille mellom å skrive ut en verdi og å returnere den, og se når en funksjon gir «ingen verdi» tilbake
kunne returnere flere verdier fra én funksjon og pakke dem ut i kallet
kunne avgjøre hvilke variabler som bare finnes inne i en funksjon, og spore hva et kall gir tilbake
kunne la en funksjon kalle en annen funksjon du selv har skrevet, i stedet for å kopiere koden
kunne bygge en kjede der hvert ledd tar imot resultatet fra det forrige som parameter
kunne skrive en menyløkke som spør brukeren og kaller riktig funksjon til brukeren avslutter
kunne skrive en kort startfunksjon som eier dataene og lar de andre funksjonene gjøre jobben
kunne skrive små funksjoner fra en kravbeskrivelse, med riktig retur og standardverdier, under tidspress
kunne spore et funksjonskall og avgjøre hva det returnerer, også når lokale og globale navn er stavet likt
kunne bygge videre på ferdige hjelpefunksjoner uten å gjenta koden deres
kunne skrive en menyløkke og en startfunksjon som binder de øvrige funksjonene sammen
kunne hente ut ett element, et utsnitt eller hele lista baklengs, og vite når du får en verdi og når du får en ny liste
kunne bruke listemetodene til å legge til, fjerne, finne og sortere, og vite hvilke av dem som endrer lista uten å returnere noe
kunne løse en analyseoppgave både med de innebygde snarveiene og med en egen løkke, og vite når du trenger løkka
kunne skille en kopi av ei liste fra et nytt navn på den samme lista
kunne bygge en tabell rad for rad og hente ut både en enkelt celle, en hel rad og en hel kolonne
kunne velge mellom å løkke over radene og over radnumrene, og hoppe over overskriftsraden uten å bomme med én
kunne finne en kolonne ved navn i overskriftsraden i stedet for å anta hvilken plass den har
kunne spore en nøstet løkke over en tabell og angi utskriften nøyaktig
kunne gjøre en tekstlinje om til de feltene den inneholder, med trimming før deling og konvertering etterpå
kunne velge riktig skilletegn og se hva som skjer når det mangler eller står to ganger på rad
kunne bygge tekst igjen med skjøting og med sammenføyning av ei liste
kunne spore et strengutsnitt med steg og skrive resultatet tegn for tegn
kunne forutsi nøyaktig hva et program skriver ut, med mellomrommene og linjeskiftene det lager av seg selv
kunne stille opp tekst og tall i kolonner med fast bredde, slik at radene står under hverandre
kunne bestemme antall desimaler i et tall som skal skrives ut, både med den eldre og den nyere skrivemåten
kunne gjøre et antall sekunder om til et tidsformat med to sifre i hvert felt
kunne slå opp en verdi på et navn i stedet for å lete gjennom to lister som holdes i takt
kunne hente en verdi trygt når nøkkelen kanskje ikke finnes, og vite når oppslaget stopper programmet
kunne telle forekomster av hver verdi i ei liste med det mønsteret sensor forventer
kunne samle elementer i grupper der hver verdi selv er ei liste
kunne skille en låst samling fra en som kan endres, og vite hvilke operasjoner som forsvinner med låsen
kunne la en funksjon gi tilbake to verdier på én gang, og ta imot dem i hver sin variabel
kunne holde to samlinger i takt slik at samme plassnummer hører sammen
kunne oversette en poengsum til riktig kategori ved å gå gjennom grensene fra høyest til lavest
kunne spore et program som arbeider på lister og tabeller, og skrive utskriften tegn for tegn
kunne hente ut og analysere en kolonne i en innlest tabell uten å anta hvilken plass den har
kunne gjøre tekstlinjer om til verdier og tilbake til en rapport i rette kolonner
kunne telle, gruppere og kategorisere under tidspress, med tomtilfeller og duplikater håndtert
lese en tekstfil linje for linje og bygge en 2D-liste med én rad per linje
rense og dele en linje i riktig rekkefølge og konvertere tallfeltene med `int()` eller `float()`
hoppe over en overskriftsrad og finne kolonnen ved navn i stedet for å anta posisjonen
velge bevisst mellom å lese fila som tabell, som ordbok eller som én streng
skrive en tabell eller en rapport til tekstfil med riktig separator og linjeskift
velge bevisst mellom å overskrive og å legge til, og forklare hva som går tapt ved feil valg
formatere tall og kolonner ved skriving med både `.format()` og f-streng
lagre og hente en hel datastruktur med `pickle` i binærmodus
lese siste linje i en feilmelding og avgjøre hvilken feiltype som skal fanges
skrive en filleser som gir melding og returnerer en feilverdi i stedet for å stoppe
hoppe over ødelagte linjer i en datafil uten å avbryte hele innlesingen
avgrense `try`-blokken til de linjene som faktisk kan utløse feilen
skrive hele filleddet i en eksamensoppgave under tidspress, for hånd
velge riktig struktur — 2D-tabell eller ordbok — ut fra hva oppgaven skal svare på
levere robust fil-I/O med feilmelding og feilverdi i stedet for et krasj
disponere tiden etter prosentvektingen som står oppgitt på settet
kunne føre en sporingstavle som gjør en kodesnutt til et mekanisk regnestykke i stedet for en gjetning
kunne telle løkkerunder nøyaktig og lese grensene i `range` uten å bomme med én
kunne skille et enkelt element fra en liste, en streng eller en ordbok, og gjengi hver av dem i riktig utskriftsform
kunne avgjøre hva et funksjonskall returnerer, også når svaret er `None`
kunne kjenne igjen en rekursiv funksjon og peke ut grunntilfellet og det rekursive steget
kunne spore et rekursivt kall ved å bygge kall-stakken utover og folde returverdiene innover
kunne skrive de klassiske rekursive funksjonene fra en kravbeskrivelse, med et grunntilfelle som også dekker kanttilfellene
kunne kjenne igjen og rette de to feilene som gjør at en rekursiv funksjon aldri stopper
kunne lese en ferdig funksjon og si hva den oppnår i én presis setning som starter med et verb
kunne skille formålet med en funksjon fra beskrivelsen av hvordan den er skrevet
kunne velge riktig manglende kodelinje ved å prøve hvert alternativ mot et minimalt eksempel
kunne kjenne igjen de faste hulltypene: løkkegrense, betingelse, oppdatering og indeksberegning
kunne spore en ukjent kodesnutt under tidspress og gjengi utskriften nøyaktig, tegn for tegn
kunne spore et rekursivt kall i begge retninger og skrive en rekursiv funksjon fra en kravbeskrivelse
kunne beskrive en ferdig funksjons formål i én presis setning
kunne skrive boblesortering fra bunnen og spore den passering for passering
kunne velge mellom `.sort()` og `sorted()`, og vite hvilken av dem som gir deg ei ny liste
kunne rangere radene i en tabell på en kolonne du finner fra overskriftsraden, både med løkke og med snarvei
kunne kjenne igjen at tekst sorteres alfabetisk og tall etter størrelse
kunne skrive et sekvensielt søk som gir indeksen, og `-1` når verdien ikke finnes
kunne søke etter ei rad i en tabell på en kolonne du finner fra overskriftsraden
kunne forklare hvorfor binærsøk forutsetter en sortert liste, og hva som skjer når den ikke er det
kunne fylle inn og spore de linjene som utgjør et iterativt binærsøk
kunne si hva som skiller en algoritme fra en løs beskrivelse, og lese og skrive pseudokode
kunne plassere sekvensielt søk, binærsøk og boblesortering i riktig vekstklasse, og begrunne plasseringen
kunne begrunne hvorfor binærsøk krever sortert liste, og regne på hva sorteringen koster
kunne kjenne igjen brute force og hvorfor metoden blir uhåndterlig når problemet vokser
skrive boblesortering og iterativt binærsøk for hånd, under tidspress
rangere og søke i en tabell uten å anta en fast kolonnerekkefølge
velge mellom sekvensielt søk og sortering pluss binærsøk, og begrunne valget med tall
svare presist på teori-flervalg om algoritmebegrepet og kjøretidskompleksitet
kunne kjenne igjen at en programmeringsoppgave i et nytt domene er den samme øvelsen i ny innpakning
kunne dele en programmeringsoppgave i fem ledd og si hvilken funksjon hvert ledd trenger
kunne bygge løsningen som en kjede av små funksjoner som kaller hverandre, i stedet for ett langt program
kunne disponere tiden etter prosentvektingen og skrive ned antakelsene sine
kunne skrive innlesingsfunksjonen fra bunnen, uten å slå opp, i et domene du aldri har sett
kunne velge skilletegn og rensemetode ut fra hvordan fila faktisk ser ut
kunne håndtere en overskriftsrad på tre måter og vite når hver av dem er riktig
kunne velge mellom 2D-liste og ordbok, og bygge begge fra den samme fila
kunne gjøre en tekstlinje eller en liste av felt om til tall som kan regnes med
kunne veksle mellom en tidsstreng og et tall, begge veier, med heltallsdeling og rest
kunne rense felt som har komma som desimaltegn, en enhet bakpå eller et varierende antall mellomrom
kunne bygge en oppslagsordbok av en ferdig innlest tabell, med en nøkkelkolonne du velger selv
kunne finne den beste raden i en tabell med en løkke som takler negative verdier og tom tabell
kunne løse den samme analysen med de innebygde snarveiene, og vite at begge former gir full pott
kunne telle og summere per nøkkel med en ordbok, også når tellingen har en betingelse
kunne gruppere rader i en ordbok av lister, og finne den beste nøkkelen i en ferdig ordbok
kunne sortere en 2D-tabell på en valgt kolonne uten å miste koblingen mellom feltene i en rad
kunne velge retning og hente ut de N beste, og vite hva som skjer når tabellen er kortere enn N
kunne skrive boblesortering for rader og bruke en utlevert sorteringsfunksjon riktig
kunne rangere nøklene i en ordbok etter verdi, og sortere på mer enn ett kriterium
kunne finne en kolonne ved navn og svare fornuftig når navnet ikke finnes
kunne velge riktig returverdi når det ikke finnes noe svar, og begrunne valget
kunne bygge et resultat uten duplikater, med og uten en fast rekkefølge
kunne skrive analyser som virker uansett hvilken rekkefølge radene kommer i
kunne skrive en pen kolonneutskrift med fast bredde og riktig antall desimaler
kunne lagre et resultat til tekstfil eller binærfil, og lese det tilbake
kunne skrive en menyløkke som terminerer riktig og fordeler jobben til de andre funksjonene
kunne binde hele kjeden sammen i en hovedfunksjon som leser fila én gang
skrive hele programmeringskjeden under tidspress, for hånd, i domener du aldri har sett
velge datastruktur og returverdi ut fra hva oppgaven faktisk spør om
levere robuste analysefunksjoner som tåler ukjent kolonnerekkefølge, tomme data og duplikater
forklare hva ALU-en, kontrollenheten og registrene gjør hver for seg, og ikke blande dem
gjengi de fem stegene i fetch-execute-syklusen i riktig rekkefølge
rangere register, cache, RAM og disk etter fart, størrelse og om innholdet overlever strømbrudd
kjenne igjen de nære distraktorene i maskinvarespørsmål — særlig om «random access» og Moores lov
regne ut hvor mange symboler et gitt antall bit gir, og hvor mange bit et gitt antall symboler krever
konvertere mellom binært, desimalt og heksadesimalt for hånd, og kontrollere svaret ved å regne tilbake
lese og lage negative heltall i toer-komplement, og oppgi tallområdet riktig
regne ut lagringsplassen til et ukomprimert bilde uten å glemme divisjonen på 8
plassere en oppgave eller en protokoll på riktig lag i TCP/IP-stakken
skille IPv4 fra IPv6 og MAC-adresse fra IP-adresse på både bredde og bruksområde
forklare hva kanalkoding oppdager og hva den kan rette, og skille de tre metodene
skille flytkontroll fra feilkontroll, og stop-and-go fra sliding window
plassere et angrep eller et tiltak under riktig sikkerhetsmål: konfidensialitet, integritet eller tilgjengelighet
oppgi riktig nøkkel både når en melding skal hemmeligholdes og når den skal signeres
forklare hva hashing er, hvorfor den er enveis, og hvorfor passorddatabaser lagrer hasher
skille de faste distraktorparene: DoS og DDoS, phishing og pharming, brannmur og VPN
avgjøre om et format er tapsløst eller har tap, og begrunne hvilket som passer til hvilke data
kode og avkode en tegnrekke med run-length encoding og regne ut hva som ble spart
bruke Nyquist-regelen begge veier og oppgi den med riktig tallord
forklare hva aliasing er, og skille sampling fra modulasjon
navngi de fire grunnaktivitetene i systemutvikling og si hvilket spørsmål hver av dem svarer på
skille vannfall, inkrementell utvikling og spiralmodellen på hvert sitt nøkkelord
skille funksjonelle fra ikke-funksjonelle krav, og kravspesifikasjon fra akseptansetesting
vurdere hvilken prosessmodell som passer når kravene eller teknologien er usikre
arbeide seg gjennom et teori-flervalg i fem faste steg, og alltid krysse av
kjenne igjen en nær distraktor og finne det ene ordet eller tallet som skiller den fra fasiten
regne ut de faste regnespørsmålene under tidspress uten å miste et steg
disponere de rundt 35 minuttene teoridelen er verdt, og la resten gå til programmeringen
svare på teori-flervalg under tidspress, med alle spørsmål besvart
kjenne igjen de faste ordparene som skiller riktig fra galt i teoridelen
gjennomføre regnespørsmålene med kladdepapir og enkel kalkulator uten å miste et steg
lese sitt eget resultat og se om feilene er presisjonsfeil eller regnefeil
kunne løse et komplett tredelt eksamenssett under tidspress, med teori, kodeforståelse og programmering i samme økt
kunne disponere fire timer etter prosentvektingen som står oppgitt på hver deloppgave
kunne bygge en kjede av funksjoner som gjenbruker hverandre, fra tekstfil til ferdig meny
kunne kjenne igjen hva som gir uttelling når koden er delvis riktig, og hva som skiller en midtnivåbesvarelse fra en toppbesvarelse
kunne fordele fire timer mellom to programmeringsoppgaver av ulik størrelse og vekt
kunne spore en rekursiv funksjon ved å bygge kall-stakken utover og folde returverdiene innover
kunne skrive analysefunksjoner som tåler ukjent kolonnerekkefølge, tomme data og gjentatte verdier
kunne lagre og hente en hel datastruktur til binærfil, og begrunne når det er riktig framfor tekstfil
kunne løse et komplett tredelt eksamenssett der algoritmestoffet står sentralt i alle tre delene
kunne spore rekursjon og binærsøk steg for steg og angi både returverdi og antall runder
kunne gjøre tidsstrenger om til tall, rangere en resultatliste og dele ut merker med parallelle tupler
kunne bruke tilfeldig trekning uten å endre kallerens data, og uten å produsere duplikater

Kapitler med kompetansemål

0Eksamenskart

0.1Eksamenskartet — slik testes TDT4110
  • kunne gjøre rede for hvordan eksamen er bygd opp, og hvor mye hver av de tre delene teller
  • kunne kjenne igjen de ti oppgavetypene som går igjen, og vite hvilken oppskrift hver av dem har
  • kunne prioritere lesingen ut fra hvor ofte et tema faktisk har kommet på eksamen
  • kunne sette opp et tidsbudsjett for de fire timene ut fra prosentvekten som står på settet

1Python-grunnlaget: variabler, betingelser og løkker

1.1Variabler, datatyper og konvertering
  • kunne skille tall, tekst og sannhetsverdier fra hverandre, og forklare hvorfor samme plusstegn betyr to forskjellige ting
  • kunne regne ut hva heltallsdeling og resten gir, også når tallet er negativt
  • kunne gjøre om mellom tekst og tall, og vite nøyaktig når omgjøringen er nødvendig
  • kunne lese et uttrykk med flere regneoperatorer i riktig rekkefølge
1.2Boolsk logikk og betingelser
  • kunne avgjøre om et sammensatt vilkår er sant, med riktig rekkefølge på og-, eller- og ikke-leddene
  • kunne velge mellom en kjede av trinnvise tester og flere selvstendige tester, og forklare forskjellen
  • kunne bruke at Python slutter å regne så snart svaret er avgjort, til å teste en verdi før den konverteres
  • kunne skrive en funksjon som svarer sant eller usant, uten unødvendige omveier
1.3Løkker — for, while og range
  • kunne telle nøyaktig hvor mange ganger en løkke kjører, og hvilke verdier tellevariabelen får
  • kunne bygge opp en sum eller en teller i en løkke, med riktig startverdi og riktig plassering
  • kunne spore en løkke inne i en løkke der den indre grensen avhenger av den ytre
  • kunne avgjøre om en betingelsesstyrt løkke stopper etter et endelig antall runder, eller aldri
1.4Input og input-valideringsløkke
  • kunne lese en verdi fra brukeren og gjøre den om til riktig datatype før den brukes
  • kunne skrive en løkke som gjentar spørsmålet med feilmelding til svaret er lovlig
  • kunne formulere en gyldighetstest og snu den riktig når den skal stå i en while-betingelse
  • kunne la brukeren avslutte selv med et avtalt stoppsignal, uten at programmet krasjer
1.PPrøver til del 1: Python-grunnlaget — variabler, betingelser og løkker
  • kunne spore et lite Python-program under tidspress og angi utskriften nøyaktig
  • kunne avgjøre hva en funksjon med et sammensatt boolsk uttrykk returnerer, for flere ulike kall
  • kunne telle riktig antall runder i en løkke, også når grensene er nøstede eller krympende
  • kunne skrive en input-valideringsløkke fra bunnen, uten mal og uten maskin

2Funksjoner

2.1Funksjoner: def, parametere og return
  • kunne definere en funksjon med parametere og kalle den med egne verdier
  • kunne skille mellom å skrive ut en verdi og å returnere den, og se når en funksjon gir «ingen verdi» tilbake
  • kunne returnere flere verdier fra én funksjon og pakke dem ut i kallet
  • kunne avgjøre hvilke variabler som bare finnes inne i en funksjon, og spore hva et kall gir tilbake
2.2Gjenbruk, hjelpefunksjoner og meny/`main`-dispatcher
  • kunne la en funksjon kalle en annen funksjon du selv har skrevet, i stedet for å kopiere koden
  • kunne bygge en kjede der hvert ledd tar imot resultatet fra det forrige som parameter
  • kunne skrive en menyløkke som spør brukeren og kaller riktig funksjon til brukeren avslutter
  • kunne skrive en kort startfunksjon som eier dataene og lar de andre funksjonene gjøre jobben
2.PPrøver til del 2: Funksjoner
  • kunne skrive små funksjoner fra en kravbeskrivelse, med riktig retur og standardverdier, under tidspress
  • kunne spore et funksjonskall og avgjøre hva det returnerer, også når lokale og globale navn er stavet likt
  • kunne bygge videre på ferdige hjelpefunksjoner uten å gjenta koden deres
  • kunne skrive en menyløkke og en startfunksjon som binder de øvrige funksjonene sammen

3Lister, 2D-lister, ordbøker, tupler og strenger

3.1Lister og listeoperasjoner
  • kunne hente ut ett element, et utsnitt eller hele lista baklengs, og vite når du får en verdi og når du får en ny liste
  • kunne bruke listemetodene til å legge til, fjerne, finne og sortere, og vite hvilke av dem som endrer lista uten å returnere noe
  • kunne løse en analyseoppgave både med de innebygde snarveiene og med en egen løkke, og vite når du trenger løkka
  • kunne skille en kopi av ei liste fra et nytt navn på den samme lista
3.22D-lister (tabeller)
  • kunne bygge en tabell rad for rad og hente ut både en enkelt celle, en hel rad og en hel kolonne
  • kunne velge mellom å løkke over radene og over radnumrene, og hoppe over overskriftsraden uten å bomme med én
  • kunne finne en kolonne ved navn i overskriftsraden i stedet for å anta hvilken plass den har
  • kunne spore en nøstet løkke over en tabell og angi utskriften nøyaktig
3.3Strenger: split, strip, join, slicing og bygging
  • kunne gjøre en tekstlinje om til de feltene den inneholder, med trimming før deling og konvertering etterpå
  • kunne velge riktig skilletegn og se hva som skjer når det mangler eller står to ganger på rad
  • kunne bygge tekst igjen med skjøting og med sammenføyning av ei liste
  • kunne spore et strengutsnitt med steg og skrive resultatet tegn for tegn
3.4Formatert utskrift
  • kunne forutsi nøyaktig hva et program skriver ut, med mellomrommene og linjeskiftene det lager av seg selv
  • kunne stille opp tekst og tall i kolonner med fast bredde, slik at radene står under hverandre
  • kunne bestemme antall desimaler i et tall som skal skrives ut, både med den eldre og den nyere skrivemåten
  • kunne gjøre et antall sekunder om til et tidsformat med to sifre i hvert felt
3.5Ordbøker som oppslag, teller og gruppering
  • kunne slå opp en verdi på et navn i stedet for å lete gjennom to lister som holdes i takt
  • kunne hente en verdi trygt når nøkkelen kanskje ikke finnes, og vite når oppslaget stopper programmet
  • kunne telle forekomster av hver verdi i ei liste med det mønsteret sensor forventer
  • kunne samle elementer i grupper der hver verdi selv er ei liste
3.6Tupler
  • kunne skille en låst samling fra en som kan endres, og vite hvilke operasjoner som forsvinner med låsen
  • kunne la en funksjon gi tilbake to verdier på én gang, og ta imot dem i hver sin variabel
  • kunne holde to samlinger i takt slik at samme plassnummer hører sammen
  • kunne oversette en poengsum til riktig kategori ved å gå gjennom grensene fra høyest til lavest
3.PPrøver til del 3: Lister, 2D-lister, ordbøker, tupler og strenger
  • kunne spore et program som arbeider på lister og tabeller, og skrive utskriften tegn for tegn
  • kunne hente ut og analysere en kolonne i en innlest tabell uten å anta hvilken plass den har
  • kunne gjøre tekstlinjer om til verdier og tilbake til en rapport i rette kolonner
  • kunne telle, gruppere og kategorisere under tidspress, med tomtilfeller og duplikater håndtert

4Filbehandling og robusthet

4.1Filinnlesing: les fil → 2D-tabell eller streng
  • lese en tekstfil linje for linje og bygge en 2D-liste med én rad per linje
  • rense og dele en linje i riktig rekkefølge og konvertere tallfeltene med `int()` eller `float()`
  • hoppe over en overskriftsrad og finne kolonnen ved navn i stedet for å anta posisjonen
  • velge bevisst mellom å lese fila som tabell, som ordbok eller som én streng
4.2Filskriving og lagring (tekst og `pickle`)
  • skrive en tabell eller en rapport til tekstfil med riktig separator og linjeskift
  • velge bevisst mellom å overskrive og å legge til, og forklare hva som går tapt ved feil valg
  • formatere tall og kolonner ved skriving med både `.format()` og f-streng
  • lagre og hente en hel datastruktur med `pickle` i binærmodus
4.3Unntakshåndtering rundt fil-I/O
  • lese siste linje i en feilmelding og avgjøre hvilken feiltype som skal fanges
  • skrive en filleser som gir melding og returnerer en feilverdi i stedet for å stoppe
  • hoppe over ødelagte linjer i en datafil uten å avbryte hele innlesingen
  • avgrense `try`-blokken til de linjene som faktisk kan utløse feilen
4.PPrøver til del 4: Filbehandling og robusthet
  • skrive hele filleddet i en eksamensoppgave under tidspress, for hånd
  • velge riktig struktur — 2D-tabell eller ordbok — ut fra hva oppgaven skal svare på
  • levere robust fil-I/O med feilmelding og feilverdi i stedet for et krasj
  • disponere tiden etter prosentvektingen som står oppgitt på settet

5Kodesporing og rekursjon

5.1DRILL — Kodesporing: «hva skrives ut / returneres?»
  • kunne føre en sporingstavle som gjør en kodesnutt til et mekanisk regnestykke i stedet for en gjetning
  • kunne telle løkkerunder nøyaktig og lese grensene i `range` uten å bomme med én
  • kunne skille et enkelt element fra en liste, en streng eller en ordbok, og gjengi hver av dem i riktig utskriftsform
  • kunne avgjøre hva et funksjonskall returnerer, også når svaret er `None`
5.2Rekursjon — spore og skrive
  • kunne kjenne igjen en rekursiv funksjon og peke ut grunntilfellet og det rekursive steget
  • kunne spore et rekursivt kall ved å bygge kall-stakken utover og folde returverdiene innover
  • kunne skrive de klassiske rekursive funksjonene fra en kravbeskrivelse, med et grunntilfelle som også dekker kanttilfellene
  • kunne kjenne igjen og rette de to feilene som gjør at en rekursiv funksjon aldri stopper
5.3DRILL — «Forklar med én setning» og «fyll inn manglende kodelinje»
  • kunne lese en ferdig funksjon og si hva den oppnår i én presis setning som starter med et verb
  • kunne skille formålet med en funksjon fra beskrivelsen av hvordan den er skrevet
  • kunne velge riktig manglende kodelinje ved å prøve hvert alternativ mot et minimalt eksempel
  • kunne kjenne igjen de faste hulltypene: løkkegrense, betingelse, oppdatering og indeksberegning
5.PPrøver til del 5: Kodesporing og rekursjon
  • kunne spore en ukjent kodesnutt under tidspress og gjengi utskriften nøyaktig, tegn for tegn
  • kunne spore et rekursivt kall i begge retninger og skrive en rekursiv funksjon fra en kravbeskrivelse
  • kunne beskrive en ferdig funksjons formål i én presis setning
  • kunne velge riktig manglende kodelinje ved å prøve hvert alternativ mot et minimalt eksempel

6Algoritmer: binærsøk, sortering og kompleksitet

6.1Sortering: boblesortering, `.sort()` og gitt `sort_list`
  • kunne skrive boblesortering fra bunnen og spore den passering for passering
  • kunne velge mellom `.sort()` og `sorted()`, og vite hvilken av dem som gir deg ei ny liste
  • kunne rangere radene i en tabell på en kolonne du finner fra overskriftsraden, både med løkke og med snarvei
  • kunne kjenne igjen at tekst sorteres alfabetisk og tall etter størrelse
6.2Søking: sekvensielt søk og binærsøk
  • kunne skrive et sekvensielt søk som gir indeksen, og `-1` når verdien ikke finnes
  • kunne søke etter ei rad i en tabell på en kolonne du finner fra overskriftsraden
  • kunne forklare hvorfor binærsøk forutsetter en sortert liste, og hva som skjer når den ikke er det
  • kunne fylle inn og spore de linjene som utgjør et iterativt binærsøk
6.3Algoritmedefinisjon, pseudokode og kompleksitet (Big-O)
  • kunne si hva som skiller en algoritme fra en løs beskrivelse, og lese og skrive pseudokode
  • kunne plassere sekvensielt søk, binærsøk og boblesortering i riktig vekstklasse, og begrunne plasseringen
  • kunne begrunne hvorfor binærsøk krever sortert liste, og regne på hva sorteringen koster
  • kunne kjenne igjen brute force og hvorfor metoden blir uhåndterlig når problemet vokser
6.PPrøver til del 6: Algoritmer — binærsøk, sortering og kompleksitet
  • skrive boblesortering og iterativt binærsøk for hånd, under tidspress
  • rangere og søke i en tabell uten å anta en fast kolonnerekkefølge
  • velge mellom sekvensielt søk og sortering pluss binærsøk, og begrunne valget med tall
  • svare presist på teori-flervalg om algoritmebegrepet og kjøretidskompleksitet

7Programmeringskjeden

7.1Løsningsoppskriften — hele programmeringskjeden
  • kunne kjenne igjen at en programmeringsoppgave i et nytt domene er den samme øvelsen i ny innpakning
  • kunne dele en programmeringsoppgave i fem ledd og si hvilken funksjon hvert ledd trenger
  • kunne bygge løsningen som en kjede av små funksjoner som kaller hverandre, i stedet for ett langt program
  • kunne disponere tiden etter prosentvektingen og skrive ned antakelsene sine
7.2DRILL — Ledd 1: les fil → 2D-tabell/ordbok
  • kunne skrive innlesingsfunksjonen fra bunnen, uten å slå opp, i et domene du aldri har sett
  • kunne velge skilletegn og rensemetode ut fra hvordan fila faktisk ser ut
  • kunne håndtere en overskriftsrad på tre måter og vite når hver av dem er riktig
  • kunne velge mellom 2D-liste og ordbok, og bygge begge fra den samme fila
7.3DRILL — Ledd 2: parsing og datatransformasjon
  • kunne gjøre en tekstlinje eller en liste av felt om til tall som kan regnes med
  • kunne veksle mellom en tidsstreng og et tall, begge veier, med heltallsdeling og rest
  • kunne rense felt som har komma som desimaltegn, en enhet bakpå eller et varierende antall mellomrom
  • kunne bygge en oppslagsordbok av en ferdig innlest tabell, med en nøkkelkolonne du velger selv
7.4DRILL — Ledd 3: analysér — finn maks/beste, tell og gruppér
  • kunne finne den beste raden i en tabell med en løkke som takler negative verdier og tom tabell
  • kunne løse den samme analysen med de innebygde snarveiene, og vite at begge former gir full pott
  • kunne telle og summere per nøkkel med en ordbok, også når tellingen har en betingelse
  • kunne gruppere rader i en ordbok av lister, og finne den beste nøkkelen i en ferdig ordbok
7.5DRILL — Ledd 3b: rangér og sortér tabellen
  • kunne sortere en 2D-tabell på en valgt kolonne uten å miste koblingen mellom feltene i en rad
  • kunne velge retning og hente ut de N beste, og vite hva som skjer når tabellen er kortere enn N
  • kunne skrive boblesortering for rader og bruke en utlevert sorteringsfunksjon riktig
  • kunne rangere nøklene i en ordbok etter verdi, og sortere på mer enn ett kriterium
7.6DRILL — Robusthet: ukjent rekkefølge, tomtilfeller og ingen duplikater (fullscore)
  • kunne finne en kolonne ved navn og svare fornuftig når navnet ikke finnes
  • kunne velge riktig returverdi når det ikke finnes noe svar, og begrunne valget
  • kunne bygge et resultat uten duplikater, med og uten en fast rekkefølge
  • kunne skrive analyser som virker uansett hvilken rekkefølge radene kommer i
7.7DRILL — Ledd 4–5: utskrift/lagring og meny/`main` som binder kjeden
  • kunne skrive en pen kolonneutskrift med fast bredde og riktig antall desimaler
  • kunne lagre et resultat til tekstfil eller binærfil, og lese det tilbake
  • kunne skrive en menyløkke som terminerer riktig og fordeler jobben til de andre funksjonene
  • kunne binde hele kjeden sammen i en hovedfunksjon som leser fila én gang
7.PPrøver til del 7: Programmeringskjeden
  • skrive hele programmeringskjeden under tidspress, for hånd, i domener du aldri har sett
  • velge datastruktur og returverdi ut fra hva oppgaven faktisk spør om
  • levere robuste analysefunksjoner som tåler ukjent kolonnerekkefølge, tomme data og duplikater
  • disponere tiden etter prosentvektingen som står oppgitt på settet

8IT-teori: maskinvare, tall, nettverk og sikkerhet

8.1Maskinvare og datamaskinens oppbygning
  • forklare hva ALU-en, kontrollenheten og registrene gjør hver for seg, og ikke blande dem
  • gjengi de fem stegene i fetch-execute-syklusen i riktig rekkefølge
  • rangere register, cache, RAM og disk etter fart, størrelse og om innholdet overlever strømbrudd
  • kjenne igjen de nære distraktorene i maskinvarespørsmål — særlig om «random access» og Moores lov
8.2Tallrepresentasjon og data
  • regne ut hvor mange symboler et gitt antall bit gir, og hvor mange bit et gitt antall symboler krever
  • konvertere mellom binært, desimalt og heksadesimalt for hånd, og kontrollere svaret ved å regne tilbake
  • lese og lage negative heltall i toer-komplement, og oppgi tallområdet riktig
  • regne ut lagringsplassen til et ukomprimert bilde uten å glemme divisjonen på 8
8.3Nettverk
  • plassere en oppgave eller en protokoll på riktig lag i TCP/IP-stakken
  • skille IPv4 fra IPv6 og MAC-adresse fra IP-adresse på både bredde og bruksområde
  • forklare hva kanalkoding oppdager og hva den kan rette, og skille de tre metodene
  • skille flytkontroll fra feilkontroll, og stop-and-go fra sliding window
8.4Sikkerhet
  • plassere et angrep eller et tiltak under riktig sikkerhetsmål: konfidensialitet, integritet eller tilgjengelighet
  • oppgi riktig nøkkel både når en melding skal hemmeligholdes og når den skal signeres
  • forklare hva hashing er, hvorfor den er enveis, og hvorfor passorddatabaser lagrer hasher
  • skille de faste distraktorparene: DoS og DDoS, phishing og pharming, brannmur og VPN
8.5Komprimering og sampling
  • avgjøre om et format er tapsløst eller har tap, og begrunne hvilket som passer til hvilke data
  • kode og avkode en tegnrekke med run-length encoding og regne ut hva som ble spart
  • bruke Nyquist-regelen begge veier og oppgi den med riktig tallord
  • forklare hva aliasing er, og skille sampling fra modulasjon
8.6Systemutvikling og prosessmodeller
  • navngi de fire grunnaktivitetene i systemutvikling og si hvilket spørsmål hver av dem svarer på
  • skille vannfall, inkrementell utvikling og spiralmodellen på hvert sitt nøkkelord
  • skille funksjonelle fra ikke-funksjonelle krav, og kravspesifikasjon fra akseptansetesting
  • vurdere hvilken prosessmodell som passer når kravene eller teknologien er usikre
8.7DRILL — Teori-flervalg (blandet)
  • arbeide seg gjennom et teori-flervalg i fem faste steg, og alltid krysse av
  • kjenne igjen en nær distraktor og finne det ene ordet eller tallet som skiller den fra fasiten
  • regne ut de faste regnespørsmålene under tidspress uten å miste et steg
  • disponere de rundt 35 minuttene teoridelen er verdt, og la resten gå til programmeringen
8.PPrøver til del 8: IT-teori — maskinvare, tall, nettverk og sikkerhet
  • svare på teori-flervalg under tidspress, med alle spørsmål besvart
  • kjenne igjen de faste ordparene som skiller riktig fra galt i teoridelen
  • gjennomføre regnespørsmålene med kladdepapir og enkel kalkulator uten å miste et steg
  • lese sitt eget resultat og se om feilene er presisjonsfeil eller regnefeil

9Eksamenstrening

9.1Øvingseksamen 1 — full tredelt, moderat
  • kunne løse et komplett tredelt eksamenssett under tidspress, med teori, kodeforståelse og programmering i samme økt
  • kunne disponere fire timer etter prosentvektingen som står oppgitt på hver deloppgave
  • kunne bygge en kjede av funksjoner som gjenbruker hverandre, fra tekstfil til ferdig meny
  • kunne kjenne igjen hva som gir uttelling når koden er delvis riktig, og hva som skiller en midtnivåbesvarelse fra en toppbesvarelse
9.2Øvingseksamen 2 — full tredelt, tyngre (to programmeringsoppgaver)
  • kunne fordele fire timer mellom to programmeringsoppgaver av ulik størrelse og vekt
  • kunne spore en rekursiv funksjon ved å bygge kall-stakken utover og folde returverdiene innover
  • kunne skrive analysefunksjoner som tåler ukjent kolonnerekkefølge, tomme data og gjentatte verdier
  • kunne lagre og hente en hel datastruktur til binærfil, og begrunne når det er riktig framfor tekstfil
9.3Øvingseksamen 3 — full tredelt, algoritme-/random-tung
  • kunne løse et komplett tredelt eksamenssett der algoritmestoffet står sentralt i alle tre delene
  • kunne spore rekursjon og binærsøk steg for steg og angi både returverdi og antall runder
  • kunne gjøre tidsstrenger om til tall, rangere en resultatliste og dele ut merker med parallelle tupler
  • kunne bruke tilfeldig trekning uten å endre kallerens data, og uten å produsere duplikater