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

Like dokumenter
UNIVERSITETET I OSLO

Sortering med tråder - Quicksort

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

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

Enkle generiske klasser i Java

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

INF1010. Grensesnittet Comparable<T>

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010. Stein Michael Storleer (michael) Lenkelister

IN1010 våren januar. Objektorientering i Java

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

UNIVERSITETET I OSLO

INF1010 våren januar. Objektorientering i Java

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

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

INF1000 Prøveeksamen Oppgave 7 og 9

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

INF Uke 10. Ukesoppgaver oktober 2012

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

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

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

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

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

UNIVERSITETET I OSLO

Repetisjon. INF gruppe 13

UNIVERSITETET I OSLO

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

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

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

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF1000: Forelesning 7

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

Forelesning inf Java 5

Forelesning inf Java 5

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

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

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

INF1010 Binære søketrær ++

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

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Tråder Repetisjon. 9. og 13. mai Tråder

UNIVERSITETET I OSLO

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

INF1010 våren Grensesnitt

INF1000: Forelesning 7. Konstruktører Static

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

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Seminaroppgaver IN1010, uke 2

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Løsningsforslag til eksamen i INF1000 våren 2006

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

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

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Obligatorisk oppgave 4: Lege/Resept

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

INF1010 våren Grensesnitt

2 Om statiske variable/konstanter og statiske metoder.

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

UNIVERSITETET I OSLO

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Tråder Repetisjon. 9. og 13. mai Tråder

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

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

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF våren 2017

UNIVERSITETET I OSLO

Forelesning inf Java 4

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.

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Jentetreff INF1000 Debugging i Java

INF1010 våren Arv og subklasser - del 2

INF1010 Tråder II 6. april 2016

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

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

TDT4100 Objektorientert programmering

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I)

Transkript:

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 % Stein Gjessing Institutt for Informatikk Universitetet i Oslo 1

Oppgave 10 Tegning av datastrukturen (vekt 5% av del B) Tegn datastrukturen til et stafettobjekt med en liste med 5 etapper, og for hver etappe en liste av etappetidobjekter. Tegn også noen utøverobjekter, og gjør det klart hvordan disse er forbundet med de andre objektene i figuren. Stafett-objekt Etappeobjekter Utøverobjekter Ole Anne 1 2.14 2.19 2.29 2.02 Per 2 4.74 4.04 Tina 3 3.16 3.04 2.89 4 5.18 5.194 5.64 Eva 5 2.56 2.78 Lise Etappetid-objekter 2

Oppgave 11 Klassedefinisjonene (vekt 5% av del B) Skriv programkoden som definerer de fire klassene Stafett, Etappe, Etappetid og Utøver med variablene du trenger. class Stafett { Etappe forsteetappe, denne; int antalletapper; ArrayList <Utover> besteloperetilnaa; double bestetidtilnaa = Double.MAX_VALUE; class Etappe { // Eventuelt en peker til Stafett-objektet: Stafett sjef; Etappetid forstetid; int etappenummer; Etappe nesteetappe; class Etappetid { Utover loper; double tid; Etappetid nestetid; class Utover { String navn; // navn må være entydig 3

Oppgave 12 Datastruktur for valgte utøvere (vekt 5% av del B) I programmet må det være en datastruktur for å holde orden på utøvere som er med i (deler av) et stafettlag og som ikke kan brukes i senere etapper. Hittil beste lagsammensetning kan tas vare på med den samme strukturen. Beskriv kort (med ord, ikke kode) hvordan du velger å ta vare på denne informasjonen. Bruk en egen klasse eller en av klassene fra javabiblioteket. Beskriv metodene du bruker til dette ved å forklare hvordan de virker og ved å beskrive parametre og eventuell returverdi. Jeg velger ArrayList<E> fra Javabilblioteket. Jeg bruker Utover som generisk parameter, feks: ArrayList<Utover> loper; Metodene: void add(int etappenummer, E loper) Legg inn loper på plass etappenummer void remove(int etappenum) Fjerner objektet (loperen) på etappe (plass i listen) etappenum boolean contains(e loper) returnerer true hvis loper er i listen, false ellers Object clone() Lager en ny liste med pekere til de sammen loperene på de samme plassene (en kopi) I ArrayList nummereres objektene fra 0. Etappene nummereres fra 1. Tar hensyn til dette ved å legge inn etappe n på plass n-1 i ArrayList-en. 4

Oppgave 13 Metoden stafettid (vekt 30% av del B) Skriv den rekursive metoden stafettid definert i klassen Etappe. // Jeg velger at klassen Etappe er indre klasse i stafett. // Hvis ikke må jeg ha en peker til Stafett-objektet, og skrive: // sjef.nyttmuligstafettlag(...) void stafettid(double tidtilhit, ArrayList <Utover> harlopt) { for (Etappetid denne = forstetid; denne!= null; denne = denne.nestetid) { if (! harlopt.contains(denne.loper)) { harlopt.add(etappenummer-1, denne.loper); ; if (nesteetappe == null) nyttmuligstafettlag(tidtilhit+denne.tid, harlopt); else nesteetappe.stafettid(tidtilhit+denne.tid, harlopt); harlopt.remove(etappenummer-1); 5

Oppgave 14 Metoden nyttmuligstafettlag (vekt 10% av del B) Skriv metoden nyttmuligstafettlag i klassen Stafett. nyttmuligstafettlag blir kalt (i stafettid) når en ny kombinasjon av utøvere for alle etappene er funnet. void nyttmuligstafettlag (double d, ArrayList <Utover> ut ) { if (d < bestetidtilnaa) { bestetidtilnaa = d; besteloperetilnaa = (ArrayList <Utover>) ut.clone(); 6

Oppgave 15 Metoden finnbestestafettlag (vekt 5% av del B) Skriv metoden finnbestestafettlag. Metoden skal til slutt skrive (ved hjelp av System.out.println(...)) navnene på utøverne på det beste laget i «etappeorden», samt den tilhørende stafettiden (totaltid). void finnbestestafettlag () { ArrayList <Utover> loperetilnaa = new ArrayList(); forsteetappe.stafettid(0,loperetilnaa); skrivutendeligresultat(); void skrivutendeligresultat( ) { System.out.println("Laget sin tid: "+ bestetidtilnaa); System.out.println("Laget: "); for (Utover ut: besteloperetilnaa) System.out.println(ut.navn); 7

Oppgave 16 Klassen StafettTråd (vekt 25% av del B) Skriv variabeldeklarasjoner, konstruktøren og run-metoden i klassen StafettTråd. Forandre metodene finnbestestafettlag og nyttmuligstafettlag slik at de virker sammen i dette programmet. void finnbestestafettlag () { ArrayList <Utover> loperetilnaa = new ArrayList(); new EtappeTraad(null, forsteetappe, 0, loperetilnaa).start(); // Denne metoden blir kalt av tråden til 1. etappe når alle dens barn er ferdig: synchronized void skrivutendeligresultat( ) { System.out.println("Laget sin tid: "+ bestetidtilnaa); System.out.println("Laget: "); for (Utover ut: besteloperetilnaa) System.out.println(ut.navn); synchronized void nyttmuligstafettlag (double d, ArrayList <Utover> ut ) { if (d < bestetidtilnaa) { bestetidtilnaa = d; besteloperetilnaa = (ArrayList <Utover>) ut.clone(); 8

class EtappeTraad extends Thread { double tidtilhit; ArrayList <Utover> harlopt; Etappe etappen; int antallbarn = 0; EtappeTraad mor; EtappeTraad (EtappeTraad m, Etappe et, double tid, ArrayList <Utover> lopt) { mor = m; etappen = et; tidtilhit = tid; harlopt= lopt; public void run () { for (Etappetid denne = etappen.forstetid; denne!= null; denne = denne.nestetid) { if (! harlopt.contains(denne.loper)) { ArrayList <Utover> ny = (ArrayList <Utover>) harlopt.clone(); ny.add(denne.loper); if (etappen.nesteetappe == null) nyttmuligstafettlag(tidtilhit+denne.tid, ny); else { new EtappeTraad (this, etappen.nesteetappe,tidtilhit+denne.tid, ny). start(); ettbarntil(); ventpaaallebarn(); if (mor!= null) mor.barnferdig(); else skrivutendeligresultat(); 9

Oppgave 7 Synkronisering (vekt 15% av del B) Skriv resten av klassen StafettTråd og eventuelt flere endringer i klassen Stafett, slik at trådene blir synkronisert og slik at beste stafettlag blir skrevet ut først når siste tråd har fullført jobben sin og beste stafettlag er funnet. // Alle metodene skal inn i klassen EtappeTraad: synchronized void ventpaaallebarn() { while (antallbarn!= 0) { try { wait(); catch (InterruptedException e) {System.out.println("FEIL AVBRUDD"); synchronized void ettbarntil() {antallbarn ++; synchronized void barnferdig() {antallbarn --; notify(); 10