UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010. Stein Michael Storleer (michael) Lenkelister

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

INF1010. Grensesnittet Comparable<T>

UNIVERSITETET I OSLO

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

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

INF1010 Binære søketrær ++

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

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

INF1010 siste begreper før oblig 2

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Versjon (vil bli endret).

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

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

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Lenkelister og beholdere av lenkelister

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

UNIVERSITETET I OSLO

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

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

UNIVERSITETET I OSLO

Lenkelister. Lister og køer.

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

Dagens tema INF1010 INF1010 INF1010 INF1010

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

Velkommen til INF1010

EKSAMEN. Algoritmer og datastrukturer

UNIVERSITETET I OSLO

INF1010 våren januar. Objektorientering i Java

Seminaroppgaver IN1010, uke 2

EKSAMEN med løsningsforslag

UNIVERSITETET I OSLO

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Lenkelister og beholdere av lenkelister

Dagens forelesning. INF1010 Datastrukturer Lister og køer Pekerkjedelister Øvelser. Innhold i dette lysarksettet

Operasjoner på lenkede lister (enkeltlenket) Eksempel på en lenket liste: personliste. INF januar 2010 (uke 3) 2

København 20 Stockholm

UNIVERSITETET I OSLO

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

Kapittel 9: Sortering og søking Kort versjon

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

UNIVERSITETET I OSLO

Velkommen til. INF våren 2016

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

Studieaktiviteter i INF1010

INF Innleveringsoppgave 6

INF Seminaroppgaver til uke 3

Rekursjon. Binærsøk. Hanois tårn.

UNIVERSITETET I OSLO

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

INF1010 våren Arv og subklasser del 1

UNIVERSITETET I OSLO

Transkript:

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider. Vedlegg: Kapittel 20 fra BIG JAVA Tillatte hjelpemidler: Læreboka (med notater i) Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Les gjennom hele oppgaveteksten før du begynner å svare. Noter ned uklarheter/spørsmål under gjennomlesningen slik at du har spørsmålene klare når faglærer kommer. Husk å skrive i besvarelsen der du gjør egne forutsetninger. Forklar med ord hva en kode det ikke eksplisitt er spurt etter, gjør. Dobbel lenkeliste datastruktur Figuren nedenfor er et utsnitt av datastrukturen i ei lenkeliste. a Oppgave 1 3% a) Hvor mange objekter er det i figuren? b) Hvor mange forskjellige typer er det? c) Hvor mange variabler er det i figuren? Oppgave 2 4% a Skriv metoden void bytt( n) som etter kallet bytt(a) har byttet om noden som a peker på med noden a.. På figuren er det de to midterste nodeobjektene som er farget litt gråere. Du kan anta at det er en node før og en etter de to nodene som skal byttes om. (Fortsettes på side 2.)

Eksamen i INF1010, 9. juni 2016 Side 2 Lenkelistebeholder Her er en programskisse for en beholder som bruker ei lenkeliste som datastruktur. public class LenkeListe< T extends Comparable<T> > { private ListeHode lhode ; // listehodet private L i s t e H a l e l h a l e ; // listehalen private int a n t a l l ; // antall objekter i lista LenkeListe ( ) { private abstract c l a s s Abstr { T obj ; Abstr n e s t e ; Abstr (T t ) { obj = t ; n e s t e = null ; abstract int compareto ( Abstr k ) ; abstract void settinnordnet ( Abstr k ) ; private class ListeHode extends Abstr { private class L i s t e H a l e extends Abstr { private c l a s s extends Abstr {... int compareto ( Abstr k ) { return obj. compareto ( k. obj ) ;... public int a n t a l l ( ) { return a n t a l l ; // denne metoden skal ikke endres public void settinnordnet (T nycomparable ){ ny = new ( nycomparable ) ; lhode. settinnordnet ( ny ) ; public void settinnbak (T nycomparable ) { public... tautforan ( ) { public boolean tom ( ) { Lenkelista har et listehode og en listehale. Her er datastrukturen som skal oppstå når vi lager en ny beholder: (Fortsettes på side 3.)

Eksamen i INF1010, 9. juni 2016 Side 3 String obj Abstr null int antall ListeHode lhode ListeHale lhale Abstr LenkeListe<String> llstr String obj Abstr null null Oppgave 3 5% Skriv klassene LenkeListe, Listehode, ListeHale og med klassevariable og konstuktører slik at tilstanden i beholderen blir slik som figuren viser når vi nettopp har laget en tom beholder, jf. main-metoden i oppg. 9. Oppgave 4 2% Legg merke til hvordan metoden compareto() er definert i og at vi i denne beholderen har definert denne metoden til å sammenligne noder. Implementer metoden compareto() i ListeHode. Oppgave 5 1% Implementer metoden compareto() i ListeHale. Oppgave 6 3% Invariant tilstandspåstand: Variabelen i listehalen skal hele tida peke på bakerste node. Den skal peke til listehodet når beholderen er tom. Denne påstanden skal gjelde initielt og etter metodekall som endrer på datastrukturen i lenkelista. Implementer metoden settinnbak i beholderen slik at det nye objektet legges bakerst. Denne metoden skal ikke være rekursiv. Oppgave 7 10% Legg merke til hvordan settinnordnet er definert i beholderen. Den kaller på den rekursive settinn-metoden i listehodet. Skriv ferdig klassene ListeHode, (Fortsettes på side 4.)

Eksamen i INF1010, 9. juni 2016 Side 4 ListeHale og ved å implementere den rekursive metoden settinnordnet der den er påkrevd. Gjør det tydelig i svaret hvilken metode som hører til hvilken klasse. Oppgave 8 4% Programmer metoden tautforan i klassen LenkeListe slik at første node (ikke listehodet) fjernes og objektet som obj peker på returneres til kallstedet. Hvis lista er tom skal metoden kaste et unntak. Oppgave 9 5% class Main { public static void main ( S t r i n g [ ] a ) { LenkeListe<String > l l S t r = new LenkeListe<String >(); // datastrukturen her i datastrukturtegninga ovenfor l l S t r. settinnbak (new S t r i n g ( " s s s " ) ) ; l l S t r. settinnordnet (new S t r i n g ( "yyy" ) ) ; l l S t r. settinnordnet (new S t r i n g ( " t t t " ) ) ; l l S t r. settinnbak (new S t r i n g ( "aaa" ) ) ; l l S t r. settinnordnet (new S t r i n g ( "bbb" ) ) ; Tegn datastrukturen som blir laget av main-metoden i programskissen ovenfor. I tillegg til objektene som settes inn, skal du tegne listehodet og -halen. Oppgave 10 20% Siden hverken listehodet eller listehalen trenger obj-variabelen, og listehalen ikke trenger peker, ønsker vi å ta bort disse variablene fra Abstr. Vi blir da stående igjen med en klasse som kan defineres som et grensesnitt. La oss kalle dette grensesnittet Elem, siden det er grensesnittet for alle listeelementer (noder og listeender). Skriv grensesnittet og klassene Listehode, ListeHale og på nytt. Du trenger ikke skrive metoder som ikke endres. Sortere tekststrenger Vi har en fil med 390000 ord (tekststrenger) som vi skal sortere, dvs. ordne i alfabetisk stigende orden. For å avgjøre om et ord er alfabetisk større eller mindre enn et annet ord, skal vi bruke metoden compareto() fra klassen String. En skisse av en algoritme for hvordan man kan gå fram for å ende opp med ei lenkeliste hvor alle ordene ligger ordnet (du skal ikke programmere denne ikke-parallelle algoritmen): Først oppretter vi en String [ ] som har plass til 390000 ord. Arrayen fylles fra filen med navn mangeord ved hjelp av den ferdiglagde metoden S t r i n g [ ] lesinnordfrafil ( S t r i n g f i l n a v n ) (Fortsettes på side 5.)

Eksamen i INF1010, 9. juni 2016 Side 5 Så oppretter vi en beholder av klassen LenkeListe fra oppgave og legger inn 10000 ord fra arrayen, slik at de blir ordnet (innstikksortering). Til dette brukes metoden settinnordnet. Dette gjør vi 39 ganger, og hver gang vi har fylt opp en ny beholder med 10000 ord fra arrayen, flettes den sammen med en resultatbeholder til en ny resultatbeholder. Til slutt står vi igjen med en resultatbeholder med 390000 ord. Legg merke til at vi kun bruker arrayen med ordene som et mellomlager. Vi bruker beholdere både til innsetting (sortering) og fletting. Til flettingen av to beholdere bruker vi metoden flett, som er delvis ferdiglaget: LenkeListe<String > f l e t t ( LenkeListe<String > a, LenkeListe<String > b ) { // fletter de ordnede listene a og b sammen til ei ny ordnet liste c LenkeListe<String > c = new LenkeListe<String >(); S t r i n g fraa = a. tautforan ( ) ; S t r i n g frab = b. tautforan ( ) ; while ( fraa!= null && frab!= null ) { i f ( fraa. compareto ( frab ) <= 0 ) { c. settinnbak ( fraa ) ; fraa = a. tautforan ( ) ; else { c. settinnbak ( frab ) ; frab = b. tautforan ( ) ; // hva vet vi om listene a og b her? / her er noe kode u t e l a t t som oppgave (11 b ) / Oppgave 11 4% a) Hva vet vi om de to listene a og b etter while-løkka i metoden flett? b) Fullfør metoden flett. Oppgave 12 20% Skriv en main-metode som bruker tråder til å parallellisere innstikksorteringen (innsettingen) og flettingen. Du kan, men må ikke, bruke wait()/notify i denne oppgaven. Men både innsettingen i lenkelistene og flettingen skal skje i parallell. (Fortsettes på side 6.)

Eksamen i INF1010, 9. juni 2016 Side 6 Klasser, grensesnitt og arv Oppgave 13 5% Skriv klasse- og interface-definisjoner som svarer til hierarkiet ovenfor. Definisjonene skal være tomme, dvs det ikke skal stå noe mellom { og. Det skal ikke være andre klasser eller grensesnitt enn dem i figuren. Skriv alle grensesnitt først, etterfulgt av de abstrakte klassene. Tilslutt ikke-abstrakte klasser i alfabetisk rekkefølge. En definisjon pr. linje. Oppgave 14 4% a) Hvor mange forskjellige objekter kan man opprette? b) Hvor mange metoder er det mulig å kalle i et objekt av klassen B når vi legger til grunn at Object har 11 metoder, at klassene ikke har egne metoder og at alle interfacene i hierarkiet/programmet har 2 metoder hver, alle med forskjellig signatur? c) Hvor mange metoder er tilgjengelig i et objekt av klassen G? d) Hvor mange metoder er det mulig å kalle fra variabelen ia etter tilordningen på linje 8 i programmet nedenfor? (Fortsettes på side 7.)

Eksamen i INF1010, 9. juni 2016 Side 7 Vi skriver definsjonen av klassen Mainklasse sammen med definisjonene fra oppgave 13: 1 public class Mainklasse { 2 public static void main ( S t r i n g [ ] args ) { 3 4 C c = new E ( ) ; 5 IC i c = c ; 6 IBD ibd = c ; 7 Object o = new B ( ) ; 8 IA i a = ( IA ) o ; 9 i c = ( IC ) o ; 10 A a = (C) i c ; 11 E e = new A( ) ; 12 IBD ibd = (IBD) a ; 13 a = (B) o ; 14 c = new C( ) ; 15 16 17 Oppgave 15 6% Fjern setningene som feiler enten under kompilering eller ved kjøring. Skriv main-metoden på nytt uten setningene som feiler. Oppgave 16 4% Tegn datastrukturen slik den er rett før main-metoden avslutter. Du trenger ikke tegne variable som har verdien null eller objekter som ingen variabel peker/refererer til. Oppgavesett slutt. Lykke til, og god sommer! Stein Michael Storleer