Materiale for repetisjonskurs
Her vil løsningsforslag til det vi skal gå gjennom bli lagt ut.
Jeg legger seff ikke løsningen ut før uken er omme, siden vi kjører kurset på fredag også B-)
Men prekoden kan dere få da:
Foilene er også kanskje greie å titte på ![]()
Foiler (oppdatert til riktig plassering)
- Michael
Her kommer programmeringsoppgavene fra iteratorkurset.
PS: Løsningsforslag til oppgavene om iterator er nå lagt ut (søndag 10. juni kl. 1600)
Oppgaver til iteratorkurs:
Oppgave 1:
Når man skal lage en egen iterator, hvilket interface må man importere og hva slags metoder krever dette interfacet?
Svar: Du må importere interfacet Iterator og den krever metodene hasNext(), next(), remove().
Oppgave 2:
Se for dere en lenket liste med personer. Den vil se slik ut: Per -> Pål -> Henrik -> Magnús -> Michael -> Patrick ->
Tenk dere at dere kjører en while-løkke der det blir gjort disse kallene i rekkefølge: next(2 ganger), remove, next(3 ganger), remove, next
Tegn hvordan den resterende listen vil se ut.
Svar: Per -> Henrik -> Magnús -> Patrick ->
Oppgave 3:
Hvilke av disse metodekallsekvensene er lovlig for en iterator?
1. next, next, next, remove, next, remove
2. remove, next, next, next, remove
3. next, remove, remove, next, remove, next
Svar: Nr. 1 er lovlig.
Programmeringsoppgaver:
Oppgave 4:
Endre iteratoren i Array-klassen slik at det itereres fra det siste innsatte
objektet til det første (altså motsatt av det som ble vist).
Oppgave 5:
Skriv en klasse som bare kan inneholde ett generisk objekt. Lag en iterator
til denne klassen (også med remove()) (Bare så det er sagt, så er det fryktelig
teit å lage en iterator som alltid bare vil iterere over ett objekt, men god
eksamenstrening).
Oppgave 6:
Skriv Iteratoren i List.java
Oppgave 7:
Endre klassen List og dens iterator til å være generisk.
Oppgave 8:
Implementer remove() i iteratoren til klassen List uten å bruke en hjelpemetode. (Litt vanskelig)
Oppgave 9:
Lag en dobbeltlenket liste (med både neste- og forrige-peker). Skriv en
iterator som først itererer en en retning og endre den etterpå til å iterere i
motsatt retning. Implementer også remove() i begge tilfeller.
Oppgave 10(Vanskelig!!):
Skisser hvordan du ville lagd en iterator for et BinarySearchTree. Skriv det i pseudokode eller java.
HUSK Å TESTE ALL KODE DU SKRIVER, UTEN TESTING ER DET LITE VITS I Å PROGRAMMERE.
Magnús & Dag Henning
Parallellprogrammering
http://heim.ifi.uio.no/inf1010/v12/repetisjon/parallell/ – her finner dere oppgavene fra parallellprogrammeringskurset.
Løsningen på oppgave 2A, -B og -C ligger i filene BoundedQueue.fasit.java og BoundedQueueParallelTest.java. Merk at testen bruker kun én konsument-tråd, hovedtråden, mens oppgave 2C angir at du skal bruke flere konsumenter. Hvis du skal ha flere konsument-tråder, kan de også vente på barrieren ved navn b1, og hovedtråden kan settes til kun å telle ned denne.
Lykke til med eksamen!
- Sigmund


14 Responses to “Materiale for repetisjonskurs”
Muligheter for at Sigmund kunne lagt ut lenken til kildekoden for paralell programmering økten ?
[Reply]
Sigmund Hansen Reply:
June 7th, 2012 at 01:43
Vær så god! Lenken ligger nå nederst i innlegget.
[Reply]
Hei! På eksamen 2011 del A står det at man skal ha en generisk hashtabell, der elementene i hashtabellen skal være pekere til første objekt i en lenket liste. Og: “Du skal derfor bruke arrayer i denne oppgaven som om det er mulig å lage alle slags arrayer inne i en generisk klasse.”
Jeg forsto det sånn at man skal deklarere arrayen som E [] hashtabell = new (E []) Object [length] – eller noe lignende. Men jeg skjønner ikke hvordan elementet så skal bli hodet i en lenket liste. Det går vel ikke an å ha nestepekere i generiske typer? Siden det ikke er sikkert at objektet man ønsker å lagre har nestepekere. Eller skal man pakke objektene inn i Node-objekter? Da bryter man vel litt mot den siste setningen jeg siterte fra oppgaven? Noen forslag til god datastruktur? Går det an å lage et interface med nestepeker som E må implementere? Jeg er forvirret.
Spør kanskje feil sted, men jeg fant ingen innlegg jeg syntes passet noe særlig bedre.
[Reply]
Sigmund Hansen Reply:
June 7th, 2012 at 20:47
Du kan bruke noe sånt som:
LinkedList<E>[] hashtabell = (LinkedList<E>[]) new LinkedList[length]; // Eller new Object[length] er også mulig
Da har du en array med lenkede lister som kan inneholde objekter av typen E. Merk at oppgaven sier at du kan anta at det er mulig å lage generiske arrayer, så det ville vært akseptert å skrive:
LinkedList<E>[] hashtabell = new LinkedList<E>[length];
Du kan selvfølgelig gjøre det sånn at E må implementere et grensesnitt som gjør det mulig å sette og hente ut neste element, men om det ikke er spesifisert i oppgaven at du skal lage den lenkede listen fra bunnen av, kan du bare bruke LinkedList fra APIet.
[Reply]
Til Magnús & Dag Henning:
Først må jeg takke dere for en fantastike jobb dere har lagt inn i de repetisjonskursene og jeg personlig har fått mye utbytte av de. Så lurer på en ting:
Er det mulig at dere også kan legge ut source-kodene til foilene over f.eks. om generiske typer? Jeg holder på å lage en repetisjonsnotatt, så jeg kunne stjele de og ha alt på en pdf-fil? På forhånd takk
[Reply]
Sigmund Hansen Reply:
June 9th, 2012 at 01:03
Her har du en presentasjon om generiske typer:
http://heim.ifi.uio.no/inf1010/v12/pusle/Generics.pdf
Jeg oppdaterer også lenken til presentasjonen fra repetisjonskurset som har blitt kopiert feil (de har sikkert prøvd å kopiere den fra addresselinja i Firefox, av og til fungerer ikke den som den skal), i blogginnlegget.
[Reply]
Sigmund Hansen Reply:
June 9th, 2012 at 14:06
http://heim.ifi.uio.no/inf1010/v12/pusle/Bin%C3%A6reS%C3%B8ketr%C3%A6r.pdf – Presentasjon fra forelesning om binære søketrær.
[Reply]
Vet ikke om det er riktig sted å spørre her, men kan dere legge ut løsningsforslag til fjorårets eksamen? Hadde vært veldig greit siden det virker som det er mye viktig det blir spurt om.
[Reply]
Et spørsmål angående generisk. Hva er forskjellen på disse?
1)class EnKlasse<T extends Iterable>{..}
2)class EnKlasse implements Iterable{…}
[Reply]
Martin Reply:
June 10th, 2012 at 23:47
I 2) spiller EnKlasse rollen Iterable selv, mens i 1) parametriseres EnKlasse av klasser som spiller rollen Iterable.
[Reply]
Jeg har ett par spørsmål angående pensum, vet ikke hvor jeg skal skrive de her på bloggen, så gjør det like gjerne her
1. Hvordan kan man skjule en attributt slik at ikke engang subklasser av objektet kan se den? Slik som variabelen “nøkkel” i Juni 2010 eksamen.
2. Kan en klasse være abstract, hvis den er i en subklasse av en abstract klasse? Og når en klasse er abstract, da er det ikke mulig å lage noen objekter av den sant?
[Reply]
Jonny Reply:
June 13th, 2012 at 13:38
Litt sent, men…
1. Hvis du deklarerer en attributt som “private” vil den kun være tilgjengelig i den klassen den er deklarert.
2. Skjønner ikke hva du mener med “hvis den er i en subklasse av en abstract klasse”, skal “i”‘en være der? Tror svaret uansett er “Ja”. Og det stemmer at det ikke kan opprettes objekter av en abstrakt klasse.
[Reply]
Jeg vet at dette er feil plass for det, men til gjengjeld finnes det særdeles få egne plasser for det:
http://www.uio.no/studier/emner/matnat/ifi/INF1010/v11/
Meldingen om ledige gruppelærerstillinger for høsten 2012 er lagt ut under fjorårets hjemmeside, istedenfor årets.
[Reply]
Skjønner ikke noen vil være gruppelærer. Latterlig timelønn.
[Reply]
Leave a Reply