UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

Sortering med tråder - Quicksort

UNIVERSITETET I OSLO

INF1010. Grensesnittet Comparable<T>

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk 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

UNIVERSITETET I OSLO

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF1010 Binære søketrær ++

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

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

Avdeling for ingeniørutdanning Institutt for teknologi

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF 1010, vår 2005 Løsningsforslag uke 11

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

UNIVERSITETET I OSLO

Jentetreff INF1000 Debugging i Java

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 siste begreper før oblig 2

UNIVERSITETET I OSLO

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

UNIVERSITETET I OSLO

IN1010 våren Repetisjon av tråder. 15. mai 2018

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

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

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

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Objektorientert Programmering Ekstraordinær eksamen 2014

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN. Objektorientert programmering

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 Tråder II 6. april 2016

Kapittel 9: Sortering og søking Kort versjon

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

Eksamen Objektorientert Programmering 2012

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

TDT4100 Objektorientert programmering

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

Eksamen Objektorientert Programmering 2013

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

2 Om statiske variable/konstanter og statiske metoder.

Algoritmer og datastrukturer Løsningsforslag

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

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

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

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

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

INF1010 våren Arv og subklasser del 1

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

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

LC191D/LO191D Videregående programmering mai 2010

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

Kapittel 8: Programutvikling

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. Oppgave 1 Løsningsforslag a) 4 b) 1 c) 9 Oppgave 2 Løsningsforslag void bytt ( Node n ) { Node m = n. f o r r i g e ; Node o = n. n e s t e ; Node p = o. n e s t e ; // neste-rekkefølgen er nå m, n, o, p. Ny rekkefølge: m, o, n, p n. n e s t e = p ; o. n e s t e = n ; n. f o r r i g e = o ; o. f o r r i g e = m; m. n e s t e = o ; p. f o r r i g e = n ; Oppgave 3 Løsningsforslag 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 ; LenkeListe ( ) { lhode = new ListeHode ( null ) ; l h a l e = new L i s t e H a l e ( lhode, null ) ; (Fortsettes på side 2.)

Eksamen i INF1010, 9. juni 2016 Side 2 lhode. n e s t e = l h a l e ; a n t a l l = 0 ; private class ListeHode extends AbstrNode { ListeHode ( T t ) { super ( t ) ; private class L i s t e H a l e extends AbstrNode { AbstrNode f o r r i g e = null ; // peker til siste Node (forrige) L i s t e H a l e ( AbstrNode lhode, T t ) { super ( t ) ; f o r r i g e = lhode ; private c l a s s Node extends AbstrNode { Node (T t ) { // t peker til objekt av type Comparable<T> super ( t ) ; Oppgave 4 Løsningsforslag int compareto ( AbstrNode k ) { return 9; // eller et annet negativt tall Oppgave 5 Løsningsforslag int compareto ( AbstrNode k ) { return 9 ; // eller et annet positivt tall Oppgave 6 Løsningsforslag: public void settinnbak (T nycomparable ){ Node nynode = new Node ( nycomparable ) ; l h a l e. f o r r i g e. n e s t e = nynode ; l h a l e. f o r r i g e = nynode ; nynode. n e s t e = l h a l e ; Oppgave 7 Løsningsforslag // ListeHode void settinnordnet ( AbstrNode ny ) { i f ( n e s t e. compareto ( ny ) >= 0) { // objektet skal inn etter listehodet ny. n e s t e = n e s t e ; n e s t e = ny ; // hvis ny havner bakerst, må vi opprettholde invarianten: i f ( ny. n e s t e == l h a l e ) l h a l e. f o r r i g e = ny ; (Fortsettes på side 3.)

Eksamen i INF1010, 9. juni 2016 Side 3 else n e s t e. settinnordnet ( ny ) ; // ListeHale void settinnordnet ( AbstrNode ny ) { System. out. p r i n t l n ( "FEIL : Denne metoden s k a l a l d r i k a l l e s! " ) ; // Node void settinnordnet ( AbstrNode ny ) { i f ( n e s t e. compareto ( ny ) < 0) n e s t e. settinnordnet ( ny ) ; else i f ( n e s t e. compareto ( ny ) >= 0) { ny. n e s t e = n e s t e ; n e s t e = ny ; // hvis ny havner bakerst, må vi opprettholde invarianten: i f ( ny. n e s t e == l h a l e ) l h a l e. f o r r i g e = ny ; Oppgave 8 Løsningsforslag: public T tautforan ( ) throws Exception { i f ( a n t a l l ( ) > 0 ) { AbstrNode ut = lhode. n e s t e ; lhode. n e s t e = ut. n e s t e ; a n t a l l ; return ut. obj ; else throw new Exception ( " Kall på tautforan i tom l i s t e " ) ; Oppgave 9 Løsningsforslag: null String obj int 5 antall ListeHode lhode AbstrNode neste ListeHale lhale AbstrNode forrige String obj LenkeListe<String> llstr null null AbstrNode neste Oppgave 10 Løsningsforslag: (Fortsettes på side 4.)

Eksamen i INF1010, 9. juni 2016 Side 4 private interface Elem { int compareto ( Elem k ) ; void settinnordnet ( Elem k ) ; // void test(t t); // Kan ikke referere til T her: // non-static type variable T cannot be referenced from a static context // void settinnordnet(node k); // Kan ikke referere til Node her: // non-static class Lenkeliste10.Node cannot be referenced from a static context private class ListeHode implements Elem { Elem n e s t e ; public int compareto ( Elem k ) { return 9; public void settinnordnet ( Elem n ) { settinnny ( ( Node ) n ) ; public void settinnny ( Node ny ) { // uforandret private c l a s s Node implements Elem { T obj ; Elem n e s t e ; Node (T t ) { obj = t ; public int compareto ( Elem k ) { return obj. compareto ( ( ( Node ) k ). obj ) ; public void settinnordnet ( Elem n ) { i f ( n e s t e. compareto ( n ) < 0) n e s t e. settinnordnet ( n ) ; else i f ( n e s t e. compareto ( n ) > 0) { Node ny = ( Node ) n ; ny. n e s t e = n e s t e ; n e s t e = ny ; i f ( ny. n e s t e == l h a l e ) l h a l e. f o r r i g e = ny ; // ListeHale uforandret bortsett fra at typen AbstrNode byttes med Elem private class L i s t e H a l e implements Elem { (Fortsettes på side 5.)

Eksamen i INF1010, 9. juni 2016 Side 5 Oppgave 11 Løsningsforslag: a) Vi vet at en av dem må være tom, men ikke begge. Eller negasjonen av while-betingelsen. b) while ( fraa!= null ) { c. settinnbak ( fraa ) ; fraa = a. tautforan ( ) ; while ( frab!= null ) { c. settinnbak ( frab ) ; frab = b. tautforan ( ) ; return c ; Oppgave 12 Løsningsforslag public static void main ( S t r i n g [ ] a ) { Monitor monitor = new Monitor ( ) ; CountDownLatch b a r r i e r e = new CountDownLatch ( 3 9 ) ; S t r i n g [ ] ordene = l e s I n n S t r i n g A r r a y ( a [ 0 ] ) ; for ( int i = 0 ; i < 3 9 ; i++) { new SorterOgFlett ( i, ordene, monitor, b a r r i e r e, i 10000, 1 0 0 0 0 ). s t a r t ( ) ; // Starter tråd nr. i. try { b a r r i e r e. await ( ) ; catch ( InterruptedException ex ){ LenkeListe<String > s l u t t r e s u l t a t = monitor. hentresultat ( ) ; // sluttresultat er sortert. class Monitor { // monitor med plass til 1 lenkeliste LenkeListe<String > l l = null ; synchronized LenkeListe<String > legginnellertaut ( LenkeListe<String > l l i s t e ) { LenkeListe<String > r e t = null ; i f ( l l == null ) l l = l l i s t e ; else { r e t = l l ; l l = null ; return r e t ; LenkeListe<String > hentresultat ( ) { return l l ; class SorterOgFlett extends Thread { (Fortsettes på side 6.)

Eksamen i INF1010, 9. juni 2016 Side 6 Monitor monitor ; CountDownLatch b a r r i e r e ; S t r i n g [ ] ordene ; int s t a r t, a n t a l l ; int trnr ; SorterOgFlett ( int tn, S t r i n g [ ] ord, Monitor m, CountDownLatch b, int s t, int ant ) { monitor = m; b a r r i e r e = b ; ordene = ord ; s t a r t = s t ; a n t a l l = ant ; trnr = tn ; LenkeListe<String > f l e t t ( LenkeListe<String > a, LenkeListe<String > b ) {... public void run ( ) { LenkeListe<String > l l 2 = null, l l 3 = null ; LenkeListe<String > l l = new LenkeListe<String >(); // Innstikksortering: for ( int j = s t a r t ; j < s t a r t+a n t a l l ; j++) { l l. settinnordnet ( ordene [ j ] ) ; // Tråd nr. trnr er ferdig med innsettingen. Fletting: l l 2 = l l ; l l 3 = monitor. legginnellertaut ( l l ) ; while ( l l 3!= null ) { l l = f l e t t ( l l 2, l l 3 ) ; l l 2 = l l ; l l 3 = monitor. legginnellertaut ( l l ) ; // Tråd nr trnr avslutter... b a r r i e r e. countdown ( ) ; Oppgave 13 Løsningsforslag: interface I { interface IA { interface IBD extends I { interface IC { interface IG { abstract c l a s s C extends A implements IC { abstract c l a s s D extends C implements IBD { class A implements I, IA { class B extends A implements IBD { class E extends C { class G extends D implements IG { Oppgave 14 Løsningsforslag: a) 5 (Fortsettes på side 7.)

Eksamen i INF1010, 9. juni 2016 Side 7 1 b) 17 c) 21 d) 13 Oppgave 15 Løsningsforslag: Her er løsningsforslaget vist i programmet nedenfor. De utkommenterte setningene feiler. K ved kompilering, R ved kjøring. Riktig svar her er samme program med de 6 setningene som blir igjen. 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; // K 7 Object o = new B ( ) ; 8 IA i a = ( IA ) o ; 9 // ic = (IC) o; // R ClassCastException: B cannot be cast to IC 10 A a = (C) i c ; 11 // E e = new A(); // K 12 // IBD ibd = (IBD) a; // R ClassCastException: E cannot be cast to IBD 13 a = (B) o ; 14 // c = new C(); // K C is abstract; cannot be instantiated 15 16 Oppgave 16 Løsningsforslag: