Løsningsforslag eksamen in105, våren 2000

Like dokumenter
Endret litt som ukeoppgave i INF1010 våren 2004

import java.io.*; import java.util.*; import javagently.text;

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

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; }

Løsningsforslag, inf101, våren 2001

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Gjennomgang av eksamen H99

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

LO191D/LC191D Videregående programmering

Løsningsforslag eksamen in105, høsten 2000

Løsningsforslag til eksamen i INF1000 våren 2006

OPPGAVE 5b og 8b Java Kode

INF Uke 10. Ukesoppgaver oktober 2012

Forelesning inf Java 5

Forelesning inf Java 5

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

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

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

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

TOD063 Datastrukturer og algoritmer

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

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

Leksjon 7. Filer og unntak

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

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

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

UNIVERSITETET I OSLO

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

HØGSKOLEN I SØR-TRØNDELAG

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

Forelesning inf Java 4

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

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

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

INF1000 Behandling av tekster

TDT4100 Objektorientert programmering

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

Gjennomgang av eksamen V99

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

løsningsforslag-uke5.txt

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

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

Klasser og objekter. Tuva Kristine Thoresen 22. oktober Institutt for Informatikk

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Oblig 4Hybelhus litt mer tips enn i oppgaven

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

INF Løsning på seminaropppgaver til uke 8

Eksamen. Objektorientert Programmering IGR 1372

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

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

PRØVEEKSAMEN (rettet versjon 27/11)

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

INF1010. Grensesnittet Comparable<T>

Løsningsforslag Test 2

INF1000 (Uke 12) Sortering

INF1000 Prøveeksamen Oppgave 7 og 9

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:

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

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

Løsnings forslag i java In115, Våren 1998

INF1000 Eksamen 2014 (modifisert)

Introduksjon til objektorientert programmering

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

Løsnings forslag i java In115, Våren 1996

Videregående programmering 6

Løse reelle problemer

INF1010 våren 2018 tirsdag 23. januar

Løsningsforslag til eksamen i inf101 H2002. Oppgave 1. a)

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag til INF110 h2001

Litt om pakker og mest om data inn og ut

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løse reelle problemer

Eksamen i fag SIF8005 Programmering. Torsdag 10. mai 2001 kl

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

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Dagens tema Kapittel 8: Objekter og klasser

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

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

INF1000 (Uke 6) Mer om metoder, tekster

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

Algoritmer og datastrukturer Eksamen

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

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

Algoritmer og datastrukturer Løsningsforslag

Eksamensoppgave i IFUD1025 Programmering i Java

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Transkript:

Løsningsforslag eksamen in105, våren 2000 Løsningsforslaget er basert på et løsningsforslag av Anders Brunland og er siden modifisert av Ole Christian Lingjærde. Dato: 13.06.00. Oppgave 1A I klassen Hjorne: String navn; Hjorne(String n) { navn = n; String fånavn() { return navn; Hashtable allehjørner = new Hashtable(); // key = navn, elem = Hjorne void leshjørnerfrafil() throws IOException { String linje; Hjorne hjørne; BufferedReader fin = Text.open("Hjorner.dat"); StringTokenizer st; while ((linje = fin.readline())!= null) { st = new StringTokenizer(linje); hjørne = new Hjorne(st.nextToken()); hjørne.settlengdegrad(double.valueof(st.nexttoken()).doublevalue()); hjørne.settbreddegrad(double.valueof(st.nexttoken()).doublevalue()); allehjørner.put(hjørne.fånavn(), hjørne); Oppgave 1B Et spørsmål som må avklares i denne oppgaven er hvor man ønsker å gjøre innlesningen. Hvis man "dytter" ansvaret for innlesing av hjørner ned til Eiendom, får man et problem med at Eiendom ikke har tilgang på hashtabellen med alle hjørner i. I så fall må man sende med en peker til tabellen som parameter. Det er etter min mening ikke en god løsning å gjøre tabellen static i Registerklassen. En annen innfallsvinkel er å gjøre mesteparten av innlesingen i Register-klassen. Det er gjort her.

class Person { String navn; String adr; String fnr; Person(String navn, String adr, String fnr) throws IOException { this.navn = navn; this.adr = adr; this.fnr = fnr; class Eiendom { Person eier; String gnr, bnr; int anthjørner; Hjorne[] hjørner; Eiendom(String gnr, String bnr, Person p, int anth) { this.gnr = gnr; this.bnr = bnr; eier = p; anthjørner = anth; hjørner = new Hjorne[antH]; void setthjørne(int nr, Hjorne hjørne) { hjørner[nr] = hjørne; String fågnr() { return gnr; String fåbnr() { return bnr; Siden kombinasjonen av gårdsnummer og bruksnummer er unik velger vi å bruke dette som identifikator på eiendommene. Det er noe uklart i oppgaveteksten hvorvidt dette skal oppfattes som tall eller tekst. Siden det benyttes i en hashtabell har vi i dette forslaget valgt å tolke det som tekst.

Hashtable alleeiendommer = new Hashtable(); // key = gnr, elem = Hashtable // Et par hjelpemetoder void settinneiendom(eiendom e) { Hashtable ht = (Hashtable) alleeiendommer.get(e.fågnr()); if (ht==null) { ht = new Hashtable(); alleeiendommer.put(e.fågnr()); ht.put(e.fåbnr(), e); Eiendom finneiendom(string gnr, String bnr) { Hashtable ht = (Hashtable) alleeiendommer.get(gnr); if (ht!=null && ht.containskey(bnr)) return (Eiendom) ht.get(bnr); else return null; void leseiendommerfrafil() throws IOException { String navn, adr, fnr, gnr, bnr; Eiendom eiendom; Person p; int ant; BufferedReader fin = Text.open("Eiendommer.dat"); StringTokenizer st; navn = fin.readline(); while (!navn.equals("zzz")) { adr = fin.readline(); fnr = fin.readline(); p = new Person(navn, adr, fnr); st = new StringTokenizer(fin.readLine()); gnr = st.nexttoken(); bnr = st.nexttoken(); ant = Integer.parseInt(fin.readLine()); eiendom = new Eiendom(gnr, bnr, p, ant); settinneiendom(eiendom); for (int i = 0; i < ant; i++) { st = new StringTokenizer(fin.readLine()); st.nexttoken(); /* Kaster første token... det forutsetter at * indexen alltid starter på 1 og øker med 1. */ eiendom.setthjørne(i, (Hjorne) allehjørner.get(st.nexttoken())); navn = fin.readline();

Oppgave 1C Metodene laget i oppgave 1A og B kan kalles i konstruktøren til Eiendomsregister eller til Register. Hvis de skal kalles i Register må evt. konstruktøren i Eiendomsregister inneholde: reg = new Register(); Oppgave 2 EiendomsregisterMain main Hjorne Eiendom Eiendomsregister reg navn breddegrad hjørner anthjørner lengdegrad gnr bnr eier Register allehjørner alleeiendommer navn fnr adr Kolonner uten noen utgående piler i hashtabeller, og andre referanser uten utgående piler, angir referanser til objekter av klassen String. Hashtable Person

Oppgave 3A I klassen Person: void skrivtilskjerm() { System.out.println(navn); System.out.println(adr); System.out.println(fnr); I klassen Hjorne: void skrivtilskjerm() { System.out.println(navn + "\t" + lengdegrad + "\t" + breddegrad); void skrivtilskjerm() { eier.skrivtilskjerm(); System.out.println(gnr + " " + bnr); System.out.println(antHjørner); // Skriver hjørner. System.out.print((i + 1) + " "); hjørner[i].skrivtilskjerm(); void skriveiendom(string gnr, String bnr) { Eiendom e = finneiendom(gnr, bnr); if (e!= null) e.skrivtilskjerm(); else System.out.println("Eiendommen med gnr " + gnr + " og bnr " + bnr + "\ner ikke registrert.");

Oppgave 3B void skrivtilskjerm() { int omkrets = 0; eier.skrivtilskjerm(); System.out.println(gnr + " " + bnr); System.out.println(antHjørner); // Skriver hjørner. System.out.print((i + 1) + " "); hjørner[i].skrivtilskjerm(); /* * Utvidelsen fra 3A: * For å "komme rundt" eiendommen benytter jeg modularegning. */ omkrets += Register.finnLengde(hjørner[i], hjørner[(i - 1 + anthjørner) % anthjørner]); System.out.println("Omkrets = " + omkrets); /* * Forutsetter her at metoden finnlengde er "static". Dette for at jeg enkelt * skal ha tilgang til den fra Eiendoms-klassen. */ static int finnlengde(hjorne h1, Hjorne h2) { // Beregner lengden mellom h1 og h2. void skriveiendom(string gnr, String bnr) { Eiendom e = finneiendom(gnr, bnr); if (e!= null) e.skrivtilskjerm(); else System.out.println("Eiendommen med gnr " + gnr + " og bnr " + bnr + "\ner ikke registrert.");

Oppgave 4 void skrivallehjørner() { Enumeration e = allehjørner.elements(); while (e.hasmoreelements()) ((Hjorne) e.nextelement()).skrivtilskjerm(); System.out.println("Totalt " + allehjørner.size() + " hjørner."); Oppgave 5 // Hjelpe-metode: boolean harhjørne(hjorne h) { for (int i = 0; i < anthjørner; i++) if (hjørner[i] == h) return true; return false; Hjorne fåhjørne(int nr) { return hjørner[nr % anthjørner]; // Aksepterer også nr >= anthjørner. // Dette benyttes i oppgave 7. boolean harfelleshjørne(eiendom e) { for (int i = 0; i < e.anthjørner; i++) if (harhjørne(e.fåhjørne(i))) return true; return false; void støterborti(string gnr1, String bnr1, String gnr2, String bnr2) { Eiendom e1 = finneiendom(gnr1, bnr1); Eiendom e2 = finneiendom(gnr2, bnr2); if (e1!= null && e2!= null && e1.harfelleshjørne(e2)) System.out.println("Eiendommene støter borti hverandre"); else System.out.println("Eiendommene støter ikke borti hverandre"); Oppgave 6 Hjorne fåhjørne(string navn) { if (hjørner[i].fånavn().equals(navn)) {

return hjørner[i]; return null; Eiendom[] deleiendom(bufferedreader stdin) throws IOException { Eiendom[] nye = new Eiendom[2]; Hjorne[] h = new Hjorne[2]; int[] hpos = new int[2]; int k = 0; // Be brukeren velge to hjørner for deling skrivtilskjerm(); System.out.print("Første hjørne for deling: "); h[0] = fåhjørne(stdin.readline()); System.out.print("Andre hjørne for deling: "); h[1] = fåhjørne(stdin.readline()); // Finn posisjonen til de to dele-hjørnene if (hjørner[i] == h[0] hjørner[i] == h[1]) hpos[k++] = i; // Klar for å lage to eiendomsobjekter: String nyttgnr; String nyttbnr; Text.prompt("Nytt gårdsnummer:"); nyttgnr = stdin.readline(); Text.prompt("Nytt bruksnummer:"); nyttbnr = stdin.readline(); nye[0] = new Eiendom(gnr, bnr, eier, 1 + anthjørner-(hpos[1]-hpos[0])); nye[1] = new Eiendom(nyttGnr, nyttbnr, eier, 1 + hpos[1]-hpos[0]); // Sett hjørnene i de to eiendommene int i0 = 0; int i1 = 0; if (i <= hpos[0] i >= hpos[1]) nye[0].setthjørne(i0++, hjørner[i]); if (i >= hpos[0] && i <= hpos[1]) nye[1].setthjørne(i1++, hjørner[i]); return nye; void deleiendom(string gnr, String bnr) throws IOException { Eiendom gml = finneiendom(gnr, bnr); Eiendom[] nye; BufferedReader stdin = Text.open(System.in);

nye = gml.deleiendom(stdin); settinneiendom(nye[0]); settinneiendom(nye[1]); Oppgave 7 boolean fellesgrensemed(eiendom e) { boolean a, b; for (int j = 0; j < e.fåanth(); j++) { a = e.fåhjørne(j)==fåhjørne(i) && e.fåhjørne(j+1)==fåhjørne(i+1); b = e.fåhjørne(j)==fåhjørne(i+1) && e.fåhjørne(j+1)==fåhjørne(i); if (a b) return true; return false; boolean fellesgrense(string gnr1, String bnr1, String gnr2, String bnr2) { Eiendom e1 = finneiendom(gnr1, bnr1); Eiendom e2 = finneiendom(gnr2, bnr2); return e1.fellesgrensemed(e2);