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

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

INF Innleveringsoppgave 6

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

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. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Gjennomgang av eksamen H99

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

2 Om statiske variable/konstanter og statiske metoder.

Enkle generiske klasser i Java

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

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

INF1000: Forelesning 7

INF1010 siste begreper før oblig 2

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

København 20 Stockholm

UNIVERSITETET I OSLO

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Endret litt som ukeoppgave i INF1010 våren 2004

Versjon (vil bli endret).

INF1000: Forelesning 7. Konstruktører Static

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

UNIVERSITETET I OSLO

INF1000 HashMap. Marit Nybakken 2. november 2003

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

Liste som abstrakt konsept/datatype

IN1010 våren januar. Objektorientering i Java

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Velkommen til. INF våren 2016

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010. Stein Michael Storleer (michael) Lenkelister

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Lenkelister. Lister og køer.

UNIVERSITETET I OSLO

INF1010. Grensesnittet Comparable<T>

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

UNIVERSITETET I OSLO

Transkript:

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Eksamensdag: 9. juni 2011 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 5 sider. Vedlegg: 4 (en stift, 23 sider) Tillatte hjelpemidler: Alle trykte og skrevne Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Les alle oppgavene før du begynner å skrive. Noter deg hva som er uklart i oppgaven, slik at du er klar til å spørre når faglærer kommer rundt. (Runden starter en time etter at eksamen begynner.) Hvis du synes oppgaven er uklar eller ufullstendig på noe punkt, lag og skriv ned i besvarelsen din, dine egne fornuftige forutsetninger og presiseringer. Eksamenssettet består av 3 deler. Del A og B kan løses uavhengig av hverandre. Del C løses naturlig etter A og B. I del A skal du lage en beholder for objekter. Beholderen inneholder en tabell som har visse likhetstrekk med Javas HashMap. I del B skal du lage et program som lager en modell for et hierarki av transportmidler. I del C skal du lage objekter av klasser fra del B til å legge inn i/hente ut fra beholderen fra del A. Sluttkarakteren er et veiet gjennomsnitt av karakterene på alle oppgavene når man tar hensyn til oppgavenes prosentmessige vekt. Del A Du skal i denne delen lage en klasse som skal beskrive en beholder (også kalt en container eller en mengde) som kan ta vare på mange objekter. Klassen skal hete EksamensHash og skal implementere grensesnittet Collection (se vedlegget), og ingen andre grensesnitt. Du skal bruke generiske typer. Av metodene i Collection skal du bare implemente add, clear, remove contains, isempty, iterator og size (de andre kan du utelate eller la være tomme). Klassen EksamensHash skal inneholde en hashtabell (en array), og konstruktøren til klassen skal ha nøyaktig en parameter som er lengden på denne tabellen. I det etterfølgende beskrives det hva en hashtabell er. Klassen EksamensHash skal bruke metodene hashcode og equals fra klassen (Fortsettes på side 2.)

Eksamen i INF1010, 9. juni 2011 Side 2 Object for å lagre og finne igjen objekter. Du skal regne med at to objekter som lagres er like om metoden equals returnerer true. Når klassen EksamensHash skal lagre et objekt regner den ut objektets hashverdi ved først å kalle objektets hashcode-metode. Ut fra den verdien som da returneres skal det regnes ut en ny verdi i intervallet 0 til lengden på hashtabellen minus en (f.eks. ved å regne modulo tabellengden (f.eks. slik: nyverdi = verdi % tabellengde)). I det følgende kaller vi denne nye verdien for objektets hashverdi. Elementene i hashtabellen skal være pekere til første objekt i en lenket liste. Når beholderen er tom vil hele hashtabellen innholde null. Når programmet skal legge inn et nytt objekt finner det først objektets hashverdi, og bruker denne som indeks i hashtabellen. Er hashtabellen tom (peker på null) på dette stedet, legges objektet som skal lagres inn som det første objektet i en lenket liste ut fra dette stedet i tabellen. Hvis det allerede er lagt inn et eller flere objekter med den samme hashverdien, vil det allerede finnes en liste av objekter ut fra dette stedet i tabellen. Programmet skal da legge objektet inn i denne listen (på et vilkårlig sted). Du skal ikke bruke noen av de ferdiglagde klassene i Javabiblioteket, men selv programmere dette ved hjelp av en eller flere arrayer og pekere. Å bruke arrayer sammen med generiske typer i Java er litt fiklete, men det skal du ikke ta hensyn til i denne oppgaven. (Man kan bl.a. bruke reflection, men dette er ikke pensum i INF1010). Du skal derfor bruke arrayer i denne oppgaven som om det er mulig å lage alle slags arrayer inne i en generisk klasse. Oppgave 1 (vekt 10%) Bestem deg for den datastrukturen som trengs i klassen EksamensHash, og programmer denne, konstruktøren til klassen og metodene size, isempty og clear. Før du besvarer denne oppgaven bør du se på hvilken datastruktur som egner seg best når du skal implementere alle metodene i klassen. Beskriv kort hvilke invariante tilstandspåstander (invarianter) som gjelder for datastrukturen. Tegn opp datastrukturen slik den vil være etter at du har lagt inn noen objekter (f.eks. 7). Noen objekter i tegningen din bør ha samme hashverdi, mens andre bør ha forskjellige verdier. I oppgavene 2, 3, 4 og 5 skal du bare behandle unntak der det eksplisitt er bedt om det. Oppgave 2 (vekt 5%) Skriv metoden add i klassen EksamensHash. Du kan anta at det er lov å ha flere like objekter i beholderen, men det er ikke tillatt å lagre verdien null. Om verdien på parameteren til add er null skal metoden kaste et unntak slik det er definert i grensesnittet Collection. (Fortsettes på side 3.)

Eksamen i INF1010, 9. juni 2011 Side 3 Oppgave 3 (vekt 5%) Skriv metoden contains i klassen EksamensHash. Oppgave 4 (vekt 10%) Skriv metoden remove i klassen EksamensHash. Oppgave 5 (vekt 25%) Skriv metoden iterator i klassen EksamensHash og alt du trenger i den forbindelse. Du skal bare programmere metodene hasnext og next i iteratoren, ikke metoden remove. Beskriv hvilke invariante tilstandspåstander (invarianter) som gjelder for den datastrukturen du lager for å iterere gjennom beholderen. Del B Transportselskapet Hjerter har mange transportmidler, bl.a. tog, busser, biler, drosjer, trikker, T-baner, pasasjerbåter og ferjer. Du skal i denne delen lage et javaprogram som modellerer transportmiddelhierarkiet. Transportmidlene deles naturlig i tre hovedgrupper etter hvor de kjører: på skinner (navn i programmet: skinnetmdl) på vannet (navn i programmet: vanntmdl) på vei (navn i programmet: veitmdl) Alle transportmidler har en entydig identifikator (tmid) av datatypen String. To transportmiddelobjekter er like (metoden equals skal returnere true) hvis objektene er av samme samme hovedgruppe og objektene har samme tmid. Alle transportmidler har også en bestemt vekt og maksfart. De skinnegående transportmidlene deles igjen i to: trikk Tbanetog Et skinnegående transportmiddel består av en eller flere vogner koblet sammen, et vognsett. Hver vogn har en unik tretegns vognid, og en bestemt vekt. Et slikt sammenkoblet sett vogner skal regnes som ett transportmiddel, dvs. skal ha kun en tmid. Denne er sammensetningen av vognumrene i samme rekkefølge som vognene som utgjør vognsettet. Summen av vognenes samlede vekt er transportmiddelets vekt. I Hjerter brukes de samme vognene til trikker og Tbanetog. En trikk har enten to eller tre vogner. Et Tbanetog har enten tre eller seks vogner. (Fortsettes på side 4.)

Eksamen i INF1010, 9. juni 2011 Side 4 For trikker varierer maksfarten avhengig av vognsettets samlede vekt. Nærmere bestemt 50 km/t minus en km/t pr tonn over 8 tonn. For Tbanetog er maksfarten 55 km/t. Noen, men ikke alle, trikker og Tbanetog kan leies ut (chartres). For chartertrikker (og -tog) finnes mange metoder som setter og henter informasjon om chartringen. I programmet her skal du for enkelhets skyld bare lage en metode som gjør det mulig å hente ut informasjon om hvor vognsettet er parkert (en String). Oppgave 6 (vekt 25%) Skriv et klassehierarki/javaprogram som imøtekommer disse kravene. Det skal være mulig å lage objekter som representerer trikk, Tbanetog, chartertrikk og chartertog. Bortsett fra skinnegående transportmidler holder det å lage klasser kun for hovedgruppene vanntmdl og veitmdl. Det skal ikke være mulig å endre en tmid. Alle attributter som evt. trengs skal manipuleres ved hjelp av hente- og settmetoder. Bruk subklasser, abstrakte klasser, grensesnitt og virtuelle metoder slik at klassedefinisjonene gjør at den underliggende modellen for Tbanetog og trikker blir mest mulig hensiktsmessig. Implementer equals (fra class Object) slik beskrevet over. Implementer også metoden hashcode (fra class Object) slik at den for to objekter med samme identifikator returnerer samme verdi (Klassen String har en metode int hashcode() som gir akkurat det vi er ute etter). Alle transportmiddelobjekter skal kunne pekes på av en variabel av type Transportmiddel (jf. del C). Oppgave 7 (vekt 5%) Skriv metoden Del C EksamensHash<Transportmiddel > legginnieh ( Object [ ] o b j e k t l i s t e, EksamensHash<Transportmiddel> eh ) { } Parameteren objektliste er en peker til en array av objekter, noen av dem representerer transportmidler, noen kan være null. Metoden skal løpe gjennom arrayen og legge alle transportmiddelobjektene inn i beholderen pekt på av parameteren eh. Metoden skal returnere beholderen etter at transportmiddelobjektene er lagt inn. Objekter som ikke representerer transportmidler skal neglisjeres. Oppgave 8 (vekt 5%) Skriv metoden void skrivutnoeinfo ( EksamensHash<Transportmiddel> eh ) { } (Fortsettes på side 5.)

Eksamen i INF1010, 9. juni 2011 Side 5 Metoden skal inneholde en for-løkke som går igjennom eh og skriver ut identifikatoren, vekt og maksfart til de transportmidlene som er i beholderen. Hvis transportmiddelet går på vann skal maksfarten skrives i knop ved å multiplisere farten med 0,54. For transportmidler som kan chartres skal info om hvor det er parkert (en String) skrives ut. Oppgave 9 (vekt 10%) Skriv en klasse Testprogram som har en konstruktør og en main-metode. Denne klassen skal sammen med programmene fra del A og B og de to metodene over utgjøre et fullstendig program. I konstruktøren opprettes 6 vognobjekter (fra del B) med identifikatorer/vekt lik a45/8745, a78/9450, k45/9456, c74/10307, q89/9890 og x03/8990. Videre skal konstruktøren lage 2 trikkeobjekter, 1 Tbanetogobjekt, 1 chartertrikkobjekt og 1 chartertogobjekt satt sammen av noen av disse vognene. For enkelhets skyld kan du forutsette at samme vogn kan brukes i flere vognsett. Lag en Object array av lengde 9 og sett pekerne i indeks 0 til 4 i arrayen til å peke på de 5 objektene. La indeks 5 ha en peker som er null og la de tre siste peke på objekter som ikke er transportmidler. Lag en EksamensHash-beholder for transportmidler med parameteren 100. Kall til slutt metodene fra oppgave 7 og 8 med arrayen og beholderen som parametre. Oppgavesett slutt. Lykke til! Stein Gjessing og Stein Michael Storleer 4 vedlegg: 1. Interface Collection fra Javas API, 10 sider 2. Interface Iterator fra Javas API, 2 sider 3. class Object fra Javas API, 10 sider 4. litt mer om hashtabeller og modulofunksjonen, 1 side