UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I)

EKSAMEN 6109 OBJEKTORIENTERT PROGRAMMERING 5609 OBJEKTORIENTERT PROGRAMMERING

I denne oppgåva skal me lage eit enkelt spel der pingvinane har rømt frå akvariet i Bergen. Det er din (spelaren) sin jobb å hjelpe dei heim att.

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Å løyse kvadratiske likningar

Her skal du lære å programmere micro:biten slik at du kan spele stein, saks, papir med den eller mot den.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

EKSAMENSOPPGAVE. Ingen. Robert Pettersen. Eksamen i: INF Innf. i progr. og datam. virkem. Dato: Tirsdag 5. desember 2017

EKSAMENSOPPGAVE. Vil det bli gått oppklaringsrunde i eksamenslokalet? Svar: JA / NEI Hvis JA: ca. kl. 10:30

UNIVERSITETET I OSLO

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Teorifagb, hus 3, og og Adm.bygget, Aud.max og B.

UNIVERSITETET I OSLO

Brukarrettleiing E-post lesar

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

Retningsliner for lokalt gitt munnleg eksamen og munnleg-praktisk eksamen i Møre og Romsdal fylkeskommune

UNIVERSITETET I OSLO

Biletbruk på nettet 1 2

PXT: Det regnar mat! Introduksjon. Steg 1: Grunnlag. Sjekkliste. Skrevet av: Helene Isnes. Oversatt av: Stein Olav Romslo

UNIVERSITETET I OSLO

KappAbel 2010/11 Oppgåver 2. runde - Nynorsk

KONTINUASJONSEKSAMEN I EMNE. TDT4136 Logikk og resonnerande system. Laurdag 8. august 2009, kl

INF Innleveringsoppgave 6

ORDINÆR EKSAMEN Sensur faller innen

Matematikk 1, 4MX15-10E1 A

UNIVERSITETET I OSLO

Niels Henrik Abels matematikkonkurranse Første runde

UNIVERSITETET I OSLO

S1-eksamen hausten 2017

Matematikk 1, 4MX25-10

Eksamen 2P MAT1015 Hausten 2012 Løysing

UNIVERSITETET I OSLO

6-åringar på skuleveg

ORDINÆR EKSAMEN FOR 1R BOKMÅL Sensur faller innen

Referat frå foreldremøte Tjødnalio barnehage

«ANNONSERING I MØRE OG ROMSDAL FYLKESKOMMUNE»

UNIVERSITETET I OSLO

Dersom du står fast tek du kontakt med Malin Olivia Dahlberg på eller telefon

JS: Grunnleggjande JavaScript

Rettleiing for revisor sin særattestasjon

Samarbeidsutvalet Foreldrerådsutvalet. arbeidsoppgaver konflikthandtering SOGNDAL STUDENTBARNEHAGE

Til deg som bur i fosterheim år

Matematikk 1, MX130SKR-B

Installasjonsrettleiing

Refleksjon og skriving

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

Vurderingsrettleiing 2011

Dette notatet baserer seg på dei oppdaterte tala frå dei tre siste åra. Vi ønskjer å trekke fram følgjande:

Brukarrettleiing. epolitiker

MATEMATIKK 1 for 1R, 4MX130SR09-E

Skuleåret 2017/2018.

S1 eksamen våren 2016 løysingsforslag

Fylkeskommunane sitt landssamarbeid. Eksamensrettleiing. - om vurdering av eksamenssvar. LOKALT GITT SKRIFTLEG EKSAMEN SSA1007 Tryggleik og transport

FORELDREHEFTE. 6-åringar på skuleveg

Kartleggingsprøve K1, nynorsk. Del 1

UNIVERSITETET I OSLO

Partifinansiering 2017, RA Rettleiing: Web-skjema. Finne ID og passord. Hente, fylle ut, signere og sende inn skjemaet elektronisk

Eksamen S1 hausten 2014

UNIVERSITETET I OSLO

Informasjon og brukarrettleiing

- Retningslinjer for lokalt gitt munnleg eksamen og munnleg-praktisk eksamen i Møre og Romsdal fylkeskommune

EasyPublish Kravspesifikasjon. Versjon 1.0

Matematikk 2, 4MX25-10

S1-eksamen hausten 2017

Veljer vi spesialskule, eller veljer spesialskulen oss?

Mange yrkesvalhemma har fleire periodar under attføring

Rettleiing og reglar for foto

Søknadsskjema for Den kulturelle spaserstokken

Partifinansiering 2016, RA Rettleiing: Web-skjema. Finne ID og passord. Hente, fylle ut, signere og sende inn skjemaet elektronisk

UNIVERSITETET I OSLO

Vurdering på barnesteget. No gjeld det

TRANEVÅGEN UNGDOMSSKULE SIN HANDLINGSPLAN MOT MOBBING

ENDELEG TILSYNSRAPPORT. Kommunalt tilskot til godkjente ikkje-kommunale barnehagar. Bømlo kommune

Brukarrettleiing for ny lagsportal kvam.no

Dokumenthandtering i GoodReader

Eksamen IN1010/INF1010 våren 2018

UNIVERSITETET I OSLO

Eksamen S1, Hausten 2013

MØTEINNKALLING SAKLISTE. Utval: KOMMUNESTYRET Møtestad: Rådhuset Møtedato: Tid: 16:30-00:00

.ASJONALE -ATEMATIKK 1M 3KOLENR

EKSAMENSOPPGAVE. NB! Det er ikke tillatt å levere inn kladd sammen med besvarelsen

Informasjonshefte Tuv barnehage

Presentasjonsmalar - Powerpoint. Kort rettleiing i bruk av malane

Transkript:

UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Tysdag 12. juni 2012 Tid for eksamen: 9:00 15:00 Oppgåvesettet er på 5 sider Vedlegg: Ingen Lovlege hjelpemiddel: Alle trykte og skrivne Kontroller at oppgåvesettet er komplett før du tar til å svare på spørsmåla. Vanskingsgraden på oppgåvene 1, 2 og 3 er meint å vera aukande. Oppgåve 1 er heilt uavhengig av dei andre oppgåvene. Oppgåvene 3 og 4 er uavhengig av kvarandre, men bygger begge på oppgåve 2. Du skal skriva alle program i Java. Gjer dine eigne fornuftege antaginger, og skriv desse ned i besvaringa di, der du synes dette er naudsynt, f.eks. dersom noko er uklårt. Innleiing oppgåve 1. Emballasje (Vekt 20%) Emballasjefabrikken Renpakk skal laga eit nytt datasystem (i Java) for å administra sine produkt, og du har fått i oppgåve å laga deler av dette systemet. Alt Renpakk produserar vert kalla Emballasje, og det er fire hovudtypar: Glassemballasje, Metallemballasje, Plastemballasje og Pappemballasje. Noko av emballasjen til Renpakk er det pant på, og noko emballasje er nedbrytbar. Dette er eigenskapar som kjem i tillegg til dei andre eigenskapane emballasjen har. Du får beskjed om å beskrive plastflaske med pant, lita plastflaske med pant og lita, nedbrytbar plastflaske med pant. Renpakk har fått eit nytt og eineståande produkt dei er særs stolt av, nemlig stor, nedbrytbar pappflaske med pant, og du skal også ta med ein klasse for slike flasker. Oppgåve 1a Teikn klassehierarkiet for dei 9 produkttypane som er omtala over. Ta også med moglege grensesnitt. (Sjølv om eit godt klassehierarki kunne ha teke med fleire eller andre klassar skal du berre ta med dei som er nemnd over, ikkje nokre andre). Slutt oppgåve 1a

2 All emballasje har eit volum (i kubikkcentimeter) og ein tekst (String) som er ein produksjonsidentifikator. Plastemballasje har ikkje fleire eigenskapar enn Emballasje medan Pappemballasje i tillegg har ei vekt (i gram). Når det er pant på ein gjenstand må ein kunne vita kor stor panten er (i antal øre) og ein kode (ein tekst) som identifiserar returordninga. Når noko er nedbrytbart må ein kunne vita kor lenge (kor mange år) det tek før gjenstanden er gått i oppløysing. Av dei 9 produkttypane i klassehierarkiet vert det berre produsert gjenstandar av desse 3: lita plastflaske med pant, lita nedbrytbar plastflaske med pant og stor nedbrytbar pappflaske med pant. Alle dei andre klassane skal det ikkje kunne lagast objekt av. Oppgåve 1b Programmer 7 av dei 9 klassane i klassehierarkiet og moglege grensesnitt. Du skal ikkje programmera klassar for Glassemballasje og Metallemballasje. Alle variable i alle klassar skal få verdiar når objekta vert oppretta. Det er difor viktig at alle klassar har konstruktørar med parametre der desse verdiane kan bli oppgitt, med unnatak av panten på små flasker som alltid har same verdi, ein konstant med verdi 100 øre. Innleiing oppgåve 2. Om å slå saman like objekt (Vekt 30%) I denne oppgåva skal du programmera ein klasse med namn Frekvens, som beskriv ein behaldar. Du skal helst laga klassen generisk (som ein parameterisert klasse), men dersom du vil kan du laga den slik at den berre kan ta vare på objekt av klassen String. Dersom du vel dette siste alternativet kan du få maksimalt 25 av 30 (prosent)poeng på denne oppgåva. I oppgåve 2 skal du ikkje bruka nokre klassar frå Java-biblioteket, du skal programmera alt sjølv. Hensikta med behaldaren Frekvens er å slå saman alle like objekt, samstundes som den held orden på kor mange slike like objekt det var opprinneleg. Til dømes, dersom behaldaren skal ta vare på tekstar (String): Gir vi behaldaren dei sju tekstane Anne, Anne, Anne, Ole, Rita, Rita, Rita, så vil resultatet vera (etter at like objekt er slått saman) Anne 3, Ole 1, Rita 3. For å finna ut om to objekt er like skal du bruka metoden equals (som er definert i klassen Object), og som returnerar sann (true) ved likskap. (Metoden equals vert jo m.a. brukt til å sjekka om to String-objekt er like.) Når vi slår saman to objekt vil vi eigentleg kasta det eine. Kva for eit vi kastar og kva for eit vi let væra att spelar inga rolle. Du skal i denne oppgåva leggja alle objekta inn i behaldaren ved hjelp av konstruktøren. Du skal ikkje laga metodar for å leggja inn nye objekt. Konstruktøren skal ha som parameter ein tabell (array) med peikarar til alle objekta som skal leggjast inn. Vi skal forenkla oppgåva ved å la denne tabellen vera ferdig sortert (du skal altså ikkje sortera i ditt program).

3 Konstruktøren skal oppretta ei enkel liste som inneheld alle objekta i tabellen. (Da du ikkje kan bruka nokre verktøy frå Java-biblioteket må du programmera denne lista sjølv.) Når konstruktøren er ferdig skal lista innehalde like mange objekt som tabellen, den skal fortelja at alle objekt er til stades nøyaktig ein gong, og lista vil vera sortert (av di tabellen var sortert). NB! Det er viktig at du følgjar denne oppskrifta nøye. Du skal ikkje gjera noko av oppgåva til metoden likesaman (sjå nedenfor) i konstruktøren (sjølv om det kanskje kunne vore naturleg i denne forenkla versjonen av klassen Frekvens). Når konstruktøren er ferdig vil dømet over gje ei liste som inneheld: Anne 1, Anne 1, Anne 1, Ole 1, Rita 1, Rita 1, Rita 1. Oppgåve 2a Teikn datastrukturen i eit objekt av klassen Frekvens, ved fyrst å visa korleis datastrukturen ser ut rett etter at objektet er oppretta (og konstruktøren er utført), og deretter korleis datastrukturen ser ut etter at metoden likesaman er kalla (sjå nedanfor). Bruk gjerne dømet vist over. Oppgåve 2b Programmer deklarasjonane og datastrukturen i klassen Frekvens slik den er beskrive over, og med alt du treng for å svara på oppgåvene 2c og 2d. Oppgåve 2c Programmer konstruktøren i klassen Frekvens. Slutt oppgåve 2c I oppgåve 2 skal behaldaren berre innehalde tre offentlege metodar: ein metode kalla likesaman, ein kalla hentflestobjektet og ein kalla hentflestantalet. Metoden likesaman skal ikkje ha nokre parametre og ikkje returnera noko. Metoden skal gå gjennom lista, slå saman like objekt og halda orden på kor mange like objekt det var i den opprinnelege lista. Av di lista er ferdig sortert vil like objekt liggja etter kvarandre i lista. Resultatet vil vera ei kortare (sortert) liste der ingen objekt er like. Samstundes som metoden går gjennom lista og slår saman objekt, skal den også finna ut (til bruk i dei to andre metodane) kva for eit objekt som hadde flest like forekomstar, og kor mange dette var. Resultatet i vårt døme ville vore (som alt vist over): Anne 3, Ole 1, Rita 3, og det er Anne (eller Rita) som finst flest gongar, og dette er 3 gongar. Metoden hentflestobjektet skal returnera ein peikar til det objektet som representerar flest like forekomstar, og metoden hentflestantalet skal returnera dette største antalet av like forekomstar. Dersom det er fleire ulike objekt som har flest like forekomstar spellar det ikkje noka rolle kva for eit av desse objekta som vert vald. Oppgåve 2d. Programmer dei tre metodane likesaman, hentflestobjektet og hentflestantalet i klassen Frekvens.

4 Innleiing oppgåve 3. Sammenslåing med trådar (Vekt 35%) I denne oppgåva skal du nytta trådar for raskare å finna det objektet i ein stor tabell som har flest like forekomstar. Du skal gjera dette ved å programmera ein trådklasse som nyttar klassen Frekvens frå oppgåve 2. Du kan oppretta objekt og kalla på metodar som er definert i oppgåve 2, sjølv om du ikkje har løyst oppgåve 2. I denne oppgåva spellar det ikkje noka rolle for karakteren din om du nyttar generiske klassar eller ikkje. Tabellen (arrayen) som skal undersøkast, er sortert (som i oppgåve 2), men nå skal du dele tabellen i mange nesten like store delar. Kvar del skal bli gitt til ein tråd som finn det største antalet like forekomstar i sin del av tabellen. Til slutt skal dei einskilde trådane sitt resultat samanliknast for å finna det aller største antalet. Du kan velja mellom to måtar å løysa denne oppgåva på: A. Omtrent kor lang kvar del av tabellen skal vera er forhandsbestemt av ein konstant i programmet. Deretter lagar programmet så mange trådar det treng for at heile tabellen skal blir undersøkt. B. Det er forhandsbestemt av ein konstant i programmet omtrent kor mange trådar som skal arbeide. Programmet må dele tabellen opp i omtrent like store delar, slik at det blir ein del per tråd. Skriv tydeleg i svaret ditt om du vel framgangsmåte A eller B. Valet skal ikkje grunngjevast og det spiller inga rolle for karakteren din kva for ein framgangsmåte du vel. Delane av tabellen treng ikkje vera akkurat like lange. Du må vera merksam på at tabellen ikkje skal delast mellom to like objekt. Om du er i ferd med å gjera dette kan du t.d. auka antalet som skal undersøkast av ein tråd (heilt til alle like objekt vert undersøkte av same tråden). For å kunne nytta klassen Frekvens frå oppgåve 2 på en enkel måte, skal konstruktøren i trådklassen oppretta ein eigen lokal tabell (array) (av riktig lengd), og kopiera den delen av tabellen som denne tråden har fått i oppgåve å undersøka, over i denne lokale tabellen. Når tråden oppretter ein behaldar (av klassen Frekvens) er det denne tabellen som nyttast som parameter til konstruktøren i behaldaren. Når ein tråd har funne det største antalet av like forekomstar i sin del av tabellen, skal den leggja desse verdiane inn i en monitor som har som oppgåve å ta i mot resultata frå alle trådane, og til slutt sitta igjen med det største resultatet. Når hovudprogrammet har starta alle trådane må det venta på at alle er ferdige, og då fyrst kan det henta ut av monitoren det største resultatet. Oppgåve 3a. Programmer trådklassen og monitorklassen. Oppgåve 3b. Skriv eit fullstendig program med ein hovudklasse og ein main-metode som finn det ordet som har flest forekomstar i ein stor tabell (av typen String). Main-metoden skal lese ei fil med namn mangeordsortert.txt, der fyrste linje inneheld antalet ord i fila, og resten av fila inneheld dette antalet ord (som du t.d. kan lesa med next-metoden i Scanner-klassen) i ferdig sortert rekkefølgje. Desse orda skal leggjast inn i String-tabellen. Deretter skal main-metoden oppretta monitoren og alle trådane, og til slutt skal main-metoden henta ut resultatet frå monitoren og skrive ut det ordet som har flest forekomstar og kor mange dette er.

5 Innleiing oppgåve 4. Antal like objekt (Vekt 15%) I denne oppgåva skal du utvida klassen Frekvens frå oppgåve 2. Du skal nytta deklarasjonane og datastrukturen i klassen Frekvens slik du programmerte det i oppgåve 2b, men du kan svara på oppgåve 4 sjølv om du ikkje har svara på oppgåvene 2c og 2d. Det spelar inga rolle for karakteren på denne oppgåva om klassen Frekvens er programmert som en generisk klasse eller ikkje. I oppgåve 4 skal du programmera to metodar til i klassen Frekvens: lagalleantal og finnantal. Dersom eit program skal kalla finnantal må det fyrst ha kalla lagalleantal, og for å kalla lagalleantal må det fyrst ha kalla likesaman (frå oppgåve 2). Metoden lagalleantal har ingen parametre og returnerar ingen verdi. Den skal laga ei oversikt over kor mange (ulike) objekt som førekjem berre 1 gong, kor mange (ulike) objekt som førekjem 2 gonger, kor mange (ulike) objekt som førekjem 3 gonger, osb., heilt opp til antalet flest like objekt. T. d. dersom lista er (som før): Anne 3, Ole 1, Rita 3, så skal oversikta seia at 1 objekt førekjem 1 gang, 0 objekt førekjem 2 gonger og 2 objekt førekjem 3 gonger. Metoden finnantal skal gjera oppslag i denne oversikta. Metoden har som parameter eit heiltal som gjev eit antal like forekomstar, og metoden skal returnera kor mange gonger behaldaren inneheld så mange like objekt. Høgast parameterverdi vil difor vera det største antalet like forekomstar. I vårt døme vil finnantal(1) returnera 1, finnantal(2) returnera 0 og finnantal(3) returnera 2. Oppgåve 4a Programmer metodane lagalleantal og finnantal samt dei deklarasjonar og datastrukturar du treng til desse metodane i klassen Frekvens. Oppgåve 4b Nokre av metodane i klassen Frekvens må kallast i ein bestemt rekkefølgje. Diskuter særs kort korleis metodane ideelt sett bør oppføra seg dersom denne rekkefølgjen ikkje vært føld. Det er ikkje naudsynt å gå tilbake og endra nokre av dei metodane du har skrive. Lukke til og god sumar! Stein Gjessing