UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010. Stein Michael Storleer (michael) Lenkelister

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

UNIVERSITETET I OSLO

IN1010 våren januar. Objektorientering i Java

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

Oppgave 1. Sekvenser (20%)

UNIVERSITETET I OSLO

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Eksamen IN1010/INF1010 våren 2018

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

UNIVERSITETET I OSLO

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

UNIVERSITETET I OSLO

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

UNIVERSITETET I OSLO

INF Innleveringsoppgave 6

UNIVERSITETET I OSLO

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Obligatorisk oppgave 4: Lege/Resept

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Liste som abstrakt konsept/datatype

UNIVERSITETET I OSLO

GJØVIK INGENIØRHØGSKOLE

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

INF1000: noen avsluttende ord

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

UNIVERSITETET I OSLO

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

UNIVERSITETET I OSLO

INF1010. Grensesnittet Comparable<T>

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

København 20 Stockholm

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Løsningsforslag til INF110 h2001

EKSAMEN I FAG TDT4100 Objektorientert programmering. Fredag 2. juni 2006 Kl

Endret litt som ukeoppgave i INF1010 våren 2004

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Transkript:

UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Onsdag 4. juni 2014 Tid for eksamen: 9:00-15:00 Oppgavesettet er på 6 sider Vedlegg: Ett vedlegg (side 6) Tillatte hjelpemidler: Alle trykte og skrevne Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Dette oppgavesettet inneholder tre oppgaver som er helt uavhengige. Oppgave 3 er kanskje den letteste, så begynn gjerne med den. Alle oppgaver (og deloppgaver) har en vekt, og din endelige karakter er et veiet gjennomsnitt av karakterene på alle deloppgavene. Summen av vektene på alle oppgavene er 100 poeng. Oppgave 1: Samlebånd (Total vekt 63 poeng) I denne oppgaven skal du både vise at du kan programmere objektorientert med bl. a. subklasser og konstruktører og du skal vise at du kan programmere med tråder. Oversikt over oppgaven: Du skal programmere et fullstendig Java-program som inneholder et enkelt samlebånd som behandler ord. Samlebåndet består av mange aktive "arbeidere" som du skal programmere som tråd-objekter (objekter av subklasser av klassen Thread). Mellom alle arbeiderene er det buffere. En buffer kan ta vare på ord som det får av en arbeider, og neste arbeider i samlebåndet kan hente ord fra denne bufferen. Den første arbeideren i samlebåndet henter ikke ord fra en buffer, men fra en fil (inn-filen), og den siste arbeideren sender ikke ord til en buffer, men skriver data til en fil (utfilen). Formatet på disse filene kan du bestemme selv. Det samlebåndet du skal programmere, skal finne de minste N ordene i inn-filen ved hjelp av N tråder (N arbeidere), N > 1. N og filnavnene skal være parametere til programmet. (Akkurat dette problemet kan løses like effektivt med bare en tråd, men det skal vi ikke bry oss om her.) Arbeider nummer 1 leser et og et ord fra filen, og finner og tar vare på det (leksikalsk) minste ordet i filen, dvs. det som er minst når du sammenlikner med compareto( ). Alle andre ord sendes videre til arbeider 2 via bufferen mellom disse to arbeiderne. Dersom bufferen er full må arbeider 1 vente. Når hele filen er lest skriver arbeider 1 ut (ved hjelp av System.out.println) at den er nummer 1 og det minste ordet den fant, og så til slutt, før den terminerer, sender den en null-peker til bufferen. Arbeider nummer 2 henter ord fra denne bufferen. Er det ingen ord i bufferen må arbeider 2 vente. Arbeider 2 sin oppgave er å finne det nest minste ordet i filen, dvs. det minste ordet som kommer fra arbeider 1. Alle andre ord sendes videre til arbeider 3 via bufferen mellom arbeider 2 og

arbeider 3. Er denne bufferen full må arbeider 2 vente. Når arbeider 2 er ferdig (henter en nullpeker fra bufferen), skriver den ut at (ved hjelp av System.out.println) den er nummer 2 og det minste ordet den har sett, og sender en null-peker til det etterfølgende bufferen. 2 Slik henter enhver arbeider nummer k (1 < k < N) ord fra arbeider k-1 og sender alle unntatt det minste det finner, videre til arbeider k+1. Alle ordene går via bufferene mellom arbeiderene. Når en arbeider henter en null-peker skriver den ut sitt nummer (k) og det minste ordet den har sett, og sender en null-peker til neste arbeider. Arbeider nummer N henter ord fra bufferen mellom seg og arbeider N-1, og tar vare på det minste ordet den finner. Er det ingen ord i bufferen må arbeider N vente. Arbeider N skriver alle ord (unntatt det minste den finner) ut på ut-filen. Det vil si at arbeider N skriver alle ordene fra innfilen, unntatt de N minste, til ut-filen. Også arbeider N avslutter med å skrive ut sitt nummer og det minste ordet den har sett. Rekkefølgen av ord er uvesentlig, dvs. når ordene blir skrevet til ut-filen kan dette være en annen rekkefølge enn den ordene forekom i inn-filen. Krav til programmet: Programmet skal inneholde klassen Arbeider som en subklasse av klassen Thread. Klassen Arbeider skal inneholde et heltall som er arbeiderens nummer, og dette skal være en parameter til klassens konstruktør. Videre skal programmet inneholde klassene ForsteArbeider (arbeider nummer 1), IndreArbeider (arbeider nummer k, 1 < k < N) og SisteArbeider (arbeider nummer N) som subklasser av klassen Arbeider. Programmet skal også inneholde klassen OrdBuffer som implementerer bufferen mellom arbeiderne. Ingen av klassene kan være indre klasser. Annen datastruktur (og metoder) bestemmer du selv. Oppgave 1a (5 poeng) Tegn opp alle objektene som utgjør et samlebånd med 3 arbeidere. Tegn metoder og pekere (referanser) der dette er naturlig. Antyd også hvordan den første arbeideren leser fra fil og den siste arbeideren skriver til fil. Oppgave 1b (33 poeng) Skriv klassene Arbeider, ForsteArbeider, IndreArbeider og SisteArbeider. For å få full uttelling på denne oppgaven må det være ingen eller veldig lite duplisering av (nesten) lik kode. Oppgave 1c (10 poeng) Skriv klassen OrdBuffer som en monitor. Bufferen skal ha en maksimal kapasitet, og for enkelhets skyld sier vi at bufferen kan ta vare på inntil 10 ord. Du kan gjerne implementere bufferen ved hjelp av ferdige klasser fra Java-biblioteket, f.eks. ArrayList. Vedlegget på side 6 inneholder noen metoder du kan ha nytte av hvis du bruker ArrayList. Oppgave 1d (15 poeng) Skriv et fullstendig Javaprogram kalt Samleband. Programmet skal ha tre parametere: Antall arbeidere (N), navnet på inn-filen og navnet på ut-filen. Du kan anta at alle tre parameterne er til stede. Du kan også anta at det er flere ord på filen enn antall arbeidere (N). Ved sensur blir det ikke lagt mye vekt på at Java-detaljene ved lesing og skriving til fil er riktige.

Oppgave 2: Om å flette lenkede lister (Vekt 30 poeng ) 3 I denne oppgaven skal du flettesortere to lenkede lister, dvs. du skal kombinere to allerede sorterte lister til en ny sortert liste. En nærmere beskrivelse av flettesortering finner du til slutt i oppgave 2. Du skal skrive en metode kalt flettenklelister, som har to parametere (pekere til første node i de to allerede sorterte listene) og som returnerer en peker til den første noden i den nye kombinerte listen. Programmet ditt skal følgelig flytte nodene fra de to allerede sorterte listene over i den nye listen, slik at den nye listen til slutt er sortert og inneholder alle nodene fra de to listene. Sorteringskriteriet er slik at noder med minst verdi er først i listen. Node-objektene inneholder en nestepeker, slik at listene i denne oppgaven er enkel-kjedete lister. Du skal programmere metoden flettenklelister på en av to måter, dvs. du kan selv velge om du vil løse oppgave 2A eller om du vil løse oppgave 2B. I oppgave 2B brukes et grensesnitt til å definere nodene i listene som skal flettes, men i oppgave 2A brukes det en vanlig nodeklasse, og det som skal sammenliknes i oppgave 2A er heltall (int). Oppgave 2A er enklere enn oppgave 2B, og du får derfor mindre poeng på oppgave 2 om du velger variant 2A, selv om du løser 2A helt perfekt. Løser du 2A helt perfekt (og ikke noe av 2B) får du 20 poeng på oppgave 2. Angi i besvarelsen din hvilken oppgave du primært løser, 2A eller 2B. Velger du 2A kan du likevel gjøre litt av 2B også, og du kan da få flere poeng på oppgave 2 (men aldri mer enn 30 poeng). Pass eventuelt på å gjøre det klart hva som er løsning på 2A og hva som er løsning på 2B. Oppgave 2A: Fletting med noder definert vha. en klasse (20 poeng) Skriv metoden flettenklelister i klassen FlettingAvInt: class FlettingAvInt { public static IntNode flettenklelister (IntNode liste1, IntNode liste2) {... Klassen IntNode er deklarert slik: class IntNode { IntNode neste; int innhold; Slutt oppgave 2A.

Oppgave 2B: Fletting med noder definert vha. et grensesnitt (30 poeng) 4 Skriv metoden flettenklelister i klassen Fletting: class Fletting { public static GrNode flettenklelister (GrNode liste1, GrNode liste2) {... Grensesnittet GrNode er definert slik: interface GrNode extends Comparable <GrNode> { GrNode hentneste(); void settneste (GrNode gn); Legg merke til at du ikke kan manipulere neste-pekerne i lister med slike noder direkte. Du må isteden gjøre det ved hjelp av metodene hentneste() og setneste(). Listene er sortert ved hjelp av compareto-metoden i nodene. Slutt oppgave 2B. Annen hjelp og hint om oppgave 2: Merk at du bare skal skrive metoden flettenklelister, ikke noe annet. Om bruk av static-metoder: Legg merke til at flettenklelister-metodene er static. I INF1010 skal du egentlig vite hva en staticmetode er, men i denne oppgaven spiller det ingen rolle. Om flettesortering: Når vi fletter to sorterte sekvenser, så ser vi for oss at de ligger ved siden av hverandre og at vi så "trer" dem inn i hverandre, lignende det vi gjør når vi fletter tau eller fletter hår. Her er et eksempel der vi fletter to sekvenser med tall. Ferdig sortert 1: 2, 7, 12, 23, 29. Ferdig sortert 2: 3, 19, 23, 31, 33, 51. Resultat av å flette 1 og 2: 2, 3, 7, 12, 19, 23, 23, 29, 31, 33, 51.

Oppgave 3. Om å fjerne innledende og avsluttende nuller (Vekt 7 poeng) 5 Skriv metoden fjernnuller i klassen Tabell. Metodens parameter er en tabell (array) av int-verdier, og metoden skal ta vekk alle nullene først og sist i tabellen. Metoden skal altså finne eventuelle 0-er først og sist i tabellen og returnere en ny tabell som bare inneholder det som er mellom disse 0-ene. Metoden skal virke selv om det ikke er noen 0-er først eller sist. Klassen Tabell ser slik ut: class Tabell { public static int[ ] fjernnuller (int[ ] langtab) {... Annen hjelp og hint om oppgave 3: Merk at du bare skal skrive metoden fjernnuller, ikke noe annet. Du behøver ikke bry deg om at fjernnuller-metoden ligger inne i en klasse. Når det gjelder bruken av static spiller dette, som i oppgave 2, ingen rolle for løsningen av denne oppgaven. Hvis parameteren til metoden fjernnuller er en tabell med verdiene 0,1,7,43,0,8,0,0,0 så skal tabellen som returneres inneholde 1,7,43,0,8. Hvis parameteren til metoden fjernnuller er en tabell med verdiene 57,0, 1,7,0,0,43,8,13 så skal tabellen som returneres inneholde akkurat det samme, dvs. 57,0,1,7,0,0,43,8,13. Slutt på hele oppgavesettet. Lykke til og god sommer Stein Gjessing

6 Vedlegg: Utdrag av ArrayList fra Java-biblioteket. java.util Class ArrayList<E> Method Summary Modifier and Type Method and Description boolean add(e e) Appends the specified element to the end of this list. void add(int index, E element) Inserts the specified element at the specified position in this list. E get(int index) Returns the element at the specified position in this list. int indexof(object o) Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element. boolean isempty() Returns true if this list contains no elements. E remove(int index) Removes the element at the specified position in this list. boolean remove(object o) Removes the first occurrence of the specified element from this list, if it is present. int size() Returns the number of elements in this list.