Generelle Sp?rsm?l
-
Hva er git og hvorfor er git nyttig?
-
Kan du forklare de vanligste Git-kommandoene du har brukt?
- add, commit, push, pull
-
Hva er form?let med en .gitignore-fil?
-
Hva er en git commit melding, og hvorfor er de viktige?
-
I alle tre prosjektene har vi presisert viktigheten av god kodestil. Kan du forklare oss hva kodestil er for noe? Hvordan har du jobbet for ? oppn? god kodestil?
-
Hvilket av de tre prosjektene syns du var vanskeligst? Hvorfor det?
-
Har du opplevd noen rare bugs i kurset? Kanskje mens du jobbet med C++?
- Hvordan gikk du frem for finne ut av l?se problemet?
- Hva var buggen?
-
Nevn noen teknikker man kan bruke for ? gj?re koden mer effektiv?
-
Hva b?r man gj?re f?r man starter ? optimalisere koden?
-
Hva er forksjellen p? multiprocessing og multithreading?
-
N?r vi lager en klasse g?r det an ? implemetere slike “magiske metoder” som starter med
__
. Ett eksempel er__add__
. Kan du gi noen andre eksempler? Hvorfor er slike metoder nyttige? -
Gi noen gode argumenter for hvorfor vi b?r skrive tester?
-
Hva er forskjellen p? instansmetoder, klassemetoder of statiske metoder?
-
Nevn de fire pilarene innenfor objekt orientert programmering og fortell kort hva de inneb?rer
-
Hva er et design pattern?
-
Hvordan gj?r man arv i python? Hvordan kaller man p? metoder i foreldre klassen?
-
Hva er et namespace, og hvorfor er namespace nyttige?
-
Gi eksempler p? sorteringsalgoritmer? Hvordan kan vi vurdere hvilken sorteringsalgoritme vi b?r velge?
-
Hva er et bin?rt s?ketree? Hva er kj?retiden p? de ulike operasjonene vi kan gj?re p? et bin?rt s?ketre?
-
Hvorfor er vi opptatt av h?yden til et bin?rt tre?
-
Hva er rekursjon? Gi ett eksempel hvor vi bruker rekursjon?
-
Hva er en random number generator? Hva er en pseudorandom number generator? Hvordan kan vi generere “tilfeldige” tall p? en datamaskin?
-
Hva er hensikten med ? bruke et
seed
(fr?)? -
Hva sier “pigeonholde principle”?
-
Hva er en random walk?
-
Hva er en markov chain?
Prosjekt 1 - Dobbelpendel
-
I prosjekt 1 m?tte dere l?se systemer av ordin?re partielle differensialligninger (ODE), hvordan gikk dere frem for ? gj?re det?
-
Hvordan ble objekt-orientert programmering brukt i prosjektet?
- Hva var fordelene?
-
I prosjektet lagde dere en DoublePendulum klasse man kunne bruke for a l?se bevegelsesligningene til en dobbelpendel og plotte resultatet. Kan du forklare i grove trekk hvordan man g?r frem for a bruke denne klassen?
-
Flere steder ble dere bedt om a skrive unit tests/enhetstester. Kan du forklare hva en enhetstest er?
-
Klarer du ? skrive opp en av enhetstestene du lagde i prosjekt 1 p? tavla? Det er ikke krise om den ikke blir helt riktig, m?let er bare ? vise ideen.
-
I prosjektet ble dere bedt om a bruke
@property
dekoratoren. Kan du forklare hva denne er, og hvordan den brukes? -
I koden f?r man tilgang til l?sningen som attributter p? objektet, f.eks
pendulum.time
,pendulum.x
,pendulum.y
.- Hva skjer om man pr?ver a bruke disse attributtene f?r man har kallet p? solve?
- Kan du forklare hvordan dette ble implementert?
-
I prosjektet implementerer dere en
__call__
metode. Hva gj?r denne metoden? -
I oppgave 2g) skal dere lage en dempet pendel, alts? en pendel med friksjon. Dette gj?res gjennom “arv”
- Kan du forklare hvordan arv brukes i denne oppgaven?
- Hva er fordelen med arv i dette tilfellet?
Prosjekt 2 - Lister
-
I dette prosjektet lager dere to typer lister. Hvilke to typer er dette, og hva er hovedforskjellene mellom dem i grove trekk?
-
Hva er forskjellen p?
private
ogpublic
?- Kan du bruke ArrayList klassen som et eksempel? Hvilke attributter b?r v?re private, og hvilke b?r v?re public?
-
Hva er forskjellen p? klasser og structs i C++. N?r bruker vi hvilken?
-
Til b?de ArrayList og LinkedList skulle dere lage en destructor-metode. Hva gj?r denne metoden, og hvorfor er den viktig i teorien? Hvorfor er den ikke alltid viktig i praksis?
-
Hva er en array liste? Hva er baktanken?
-
Hva er en lenket liste? Hva er baktanken?
-
I ArrayList definerer dere en funksjon som heter resize. Hva gj?r resize operasjonen?
-
Hvordan er det ? inserte i midten av en ArrayListe?
- Forklar hva kosten blir i Big-O
- Hva med a fjerne et element med remove?
- Hva om du pr?ver ? inserte i midten av en liste som allerede er full?
-
Hva er forskjellen p? en enkellenket og en dobbellenket liste?
-
Klarer du ? skrive append-metoden til ArrayList p? tavla?
-
Klarer du ? skrive append-metoden til LenketListe p? tavia?
-
I Oppgave 3 sammenligner dere kostnadene til forskjellige operasjoner p? de to type listene. Dette gj?res med stor O:
- Kan du forklare i grove trekk hva vi mener med kostnad? Og hva stor-O er?
- Velg en metode helt selv, f.eks. append i lenket liste, kan du forklare hvordan du g?r frem for ? analysere kostnaden?
-
I Oppgave 3 sammenligner dere de to type listene
- Hva er fordelene med en ArrayListe?
- Hva er fordelene med en LenketListe?
-
Hvordan gikk du frem for ? teste listene dine?
-
Du blir bedt om a lage en metode med Signaturen
int& operator[](int)
- Hva er denne metoden?
- Hva betyr
&
i dette tilfellet?
-
Du blir bedt om a overloade konstrukt?ren med metoden:
LinkedList(vector<int>)
- Hva betyr det ? overloade?
- Hva gj?r denne metoden? Hvorfor er den forskjellig fra den andre konstrukt?ren?
-
Kan du gi et eksempel p? et sted koden din kaster ett exception?
-
Hva er en sirkul?r lenket liste?
-
Klarer du a forklare hva en Josephus-sekvens er?
- Hvorfor er sirkul?rt lenkede lister gode for ? finne slike sekvenser?
- Kan du skrive opp sekvensen for n=6, k=3 for h?nd?
Prosjekt 3 - Kaosspill
- Kan du forklare i grove trekk hvordan kaosspillet fungerer?
- Hva slags figur f?r vi ut fra trekanteksempelet?
- Hvordan lager vi selve plottet?
- Kan du forklare hvordan vi velger et tilfeldig startpunkt innenfor polygonet?
- I 1e) blir du bedt om ? plotte trekanten i r?dt, gr?nt og bl?tt.
- Hvordan g?r du frem for ? gi en farge til hvert punkt?
- Hvordan ser figuren ut i disse fargene?
- I 1f) blir du bedt om a lage figuren i farger p? en annen m?te
- Hva er forskjellene i fremgangsmaten i 1e og 1f?
- Hvordan blir figuren seende ut denne gangen?
- N?r du generaliserer problemstillingen introduserer vi to parametere,
n
ogr
- Hva er disse to parametrene?
- Hvordan gikk du frem for ? finne hj?rnene i en regul?r n-kant?
- Hvordan lagret du bildene du lagde?
- I 2g) blir du bedt om skrive minst 4 enhetstester. Kan du forklare hva en enhetstest er, og gi et eksempel p? en test du skrev?
- I siste del av prosjektet ble dere bedt om a lage en AffineTransform klasse
- Hva gjorde denne klassen?
- Hva slags metode implementerte du?
- Hvorfor tror du vi lager denne klassen?
- I 3c) m? vi plukke en tilfeldig funksjon ut av 4, men ikke med uniform sannsynlighet. Forklar hvordan du kan plukke en av fire funksjoner med en vektet sannsynlighet - Man kan gj?re dette med
np.random.choice
, men vi s? eksplisitt at dere ikke skulle gj?re det. Kan du huske hvorfor? - Hvordan blir plottet i oppgave 3? Hva er det vi ser i figuren?
- I oppgave 4 blir du bedt om at implemtentere en klasse
Variation
. Hva er hensikten med denne oppgaven?