Endret litt som ukeoppgave i INF1010 våren 2004

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

Løsningsforslag eksamen in105, våren 2000

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

81,9(56,7(7(7,26/2 'HWPDWHPDWLVNQDWXUYLWHQVNDSHOLJHIDNXOWHW

Oblig4 - forklaringer. Arne og Ole Christian

UNIVERSITETET I OSLO

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

Forelesning inf Java 5

Forelesning inf Java 5

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

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

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

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

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

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

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

UNIVERSITETET I OSLO

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

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

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Gjennomgang av eksamen H99

INF1000 : Forelesning 4

UNIVERSITETET I OSLO

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

UNIVERSITETET I OSLO

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Oblig 4 (av 4) INF1000, høsten 2009 Værdata, leveres innen 6. nov. kl

INF1000 : Forelesning 5

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

INF1000 Behandling av tekster

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Forelesning inf Java 5

Ole Christian Lingjærde, 12. september 2013

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

Blokker og metoder INF1000 (Uke 6) Metoder

Forelesning inf Java 4

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

INF1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

Ukeoppgaver INF1000: 12. feb 16. feb

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

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

UNIVERSITETET I OSLO

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

INF1000: Forelesning 6. Klasser og objekter del 1

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

UNIVERSITETET I OSLO

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

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

Løsningsforslag til eksamen i INF1000 våren 2006

INF Uke 10. Ukesoppgaver oktober 2012

IN1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

UNIVERSITETET I OSLO

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

INF1000 (Uke 6) Mer om metoder, tekster

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

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

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

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Oblig4 - forklaringer. Arne og Ole Christian

Rekursjon. Hanois tårn. Milepeler for å løse problemet

Transkript:

Endret litt som ukeoppgave i INF1010 våren 2004!!!" # # $# ##!!%# # &##!'! Kontroller at oppgavesettet er komplett før du begynner å besvare det. Les gjerne gjennom hele oppgavesettet før du begynner med besvarelsen. I det fiktive landet Ruritania fins det en rekke eiendommer. Du skal i denne oppgaven hjelpe myndighetene i landet med å programmere et dataregister for å holde orden på alle eiendommene og hvem som eier dem. All programmering skal skje i Java (evt i Simula for de som har valgt dette). Et første utkast til et program for et slikt register er allerede laget (se vedlegg A). I oppgavene nedenfor skal du ta utgangspunkt i dette uferdige programmet. Hver eiendom har et gårdsnummer (en tekststreng) og et bruksnummer (en tekststreng). Tilsammen bestemmer disse numrene en eiendom entydig: to forskjellige eiendommer vil alltid ha forskjellige gårdsnummer eller forskjellige bruksnummer (eller begge deler). For å angi hvor grensene til en eiendom går, benyttes navngitte punkter i terrenget. Disse punktene kalles hjørner. Hvert hjørne har et entydig navn (f.eks. "h14") og en posisjon som angis med to tall: lengdegrad og breddegrad. For enkelhets skyld antar vi at grensen danner en rett linje fra hjørne til hjørne. Antall hjørner kan variere fra eiendom til eiendom. Hjørnene er nummerert fra 1 og oppover i rekkefølge rundt hver av eiendommene. Med andre ord: Dersom to hjørner i en eiendom har nummer rett etter hverandre (dvs numrene er i og i+1 for en eller annen i), eller dersom hjørnene er de med henholdvis lavest og høyest nummer for denne eiendommen, så går det en grenselinje mellom hjørnene. Hvis flere eiendommer grenser til hverandre, vil et hjørne kunne inngå i flere eiendommer. Hjørnet vil da kunne ha forskjellige nummer i hver av eiendommene. Merk: tallene i hjørnenavnene (f.eks. "h14") har ingenting med hjørnenes nummer i en eiendom å gjøre.

1: h7 4: h5 Eiendom Hjørner 2: h3 3: h14 Eksempel: Vi har en eiendom som vist på figuren. Hjørnene kan da nummereres slik: nr 1: "h7", nr 2: "h3", nr 3: "h14", nr 4: "h5" Dette gir de fire grenselinjene fra "h7" til "h3" fra "h3" til "h14" fra "h14" til "h5" fra "h5" til "h7" Derimot gir dette ingen grenselinje for eksempel mellom hjørnene "h7" og "h14". Oppgave 1 (30 %) A. Lag en metode i klassen Register som leser inn data om hjørner fra filen "Hjorner.dat" og legger dem inn i en passende datastruktur (gjør nødvendige deklarasjoner i klassen Register for å få definert datastrukturen). Ved valg av datastruktur bør du ta hensyn til at vi senere kommer til å få bruk for å finne fram til et hjørne ut fra dets navn. Videre er det naturlig å samle all informasjon om et hjørne i et eget objekt; bruk klassen Hjorne i vedlegg A til dette formål. Filen det skal leses fra har følgende format: hver linje består av et hjørnenavn (en tekststreng uten blanke tegn), etterfulgt av en lengdegrad og en breddegrad (begge er desimaltall). Eksempel: h7 10.35 55.54 h3 10.37 55.54 h14 10.36 55.60 h5 10.63 55.70 h9 11.03 56.01 h33 10.30 54.79 B. Lag en metode i klassen Register som leser inn data om eiendommer fra filen Eiendommer.dat og legger dem inn i en passende datastruktur (gjør nødvendige deklarasjoner i og utenfor klassen Register for å få definert datastrukturen). Denne metoden kommer til å bli kalt etter at metoden i punkt A ( ) er kalt, slik at du kan anta at hjørne-dataene i punkt A er tilgjengelige. Filen det skal leses fra har følgende format: først en linje med eierens navn (kan inneholde blanke), deretter en linje med eierens adresse, deretter en linje med eierens fødselsnummer (11 siffer). Deretter kommer det en linje med gårdsnummer (heltall) og

bruksnummer (heltall) for en eiendom, separert av blanke tegn, deretter en linje med antall hjørner til eiendommen, og så en linje for hvert av hjørnene til eiendommen. Hver av disse linjene inneholder hjørnets nummer (et heltall) og navn (en tekststreng uten blanke tegn), separert med blanke tegn. Etter dette kommer det enten data om flere eiendommer eller (hvis filen er slutt) teksten ZZZ (på en egen linje). Eksempel: Anne Cathrine Arnesen Furuliveien 13, 3432 Omland 15106573456 353 200 4 1 h7 2 h3 3 h14 4 h5 ZZZ C. Foreslå hvor metodene og skal kalles fra for at programmet skal lese inn data fra fil helt til å begynne med, før programmet ber brukeren om en ordre. Oppgave 2 (10 %) Tegn et objekt-diagram for hele programmet slik det nå ser ut (etter utvidelsene du gjorde i oppgave 1). Det er ikke nødvendig å tegne inn metoder. Oppgave 3 (20 %) A. Lag en metode i klassen Register som skriver ut på skjermen alle data om en gitt eiendom (dvs de dataene om en eiendom som ble lest inn i oppgave 1B), samt lengdegrad og breddegrad for hvert av hjørnene til eiendommen. Metoden skal ha som parameter gårdsnummer og bruksnummer for eiendommen. B. Utvid metoden i punkt A slik at den også skriver ut hvor stor omkretsen til eiendommen er (ved å summere grenselinjenes lengder). Du kan anta at det allerede er laget en metode finnlengde i klassen Register som tar som parametre lengde- og breddegrad til to hjørner og som returnerer med lengden (dvs avstanden) mellom de to hjørnene. Oppgave 4 (10 %) Lag en metode som skriver ut på skjermen (i vilkårlig rekkefølge) alle hjørner i registeret (dvs de som ble lest inn i oppgave 1A). For hvert hjørne skrives det ut en linje med hjørnets navn samt hjørnets lengdegrad og breddegrad. Etter at informasjon om alle hjørner er skrevet ut, skal programmet skrive ut hvor mange hjørner det er. Et hjørne skal bare skrives ut og telles en gang selv om det brukes av flere eiendommer. Oppgave 5 (15 %) Lag en metode i klassen Register som sjekker om to eiendommer støter borti hverandre, dvs om de har minst ett felles hjørne. Metoden skal ta som parametere gårdsnummer og bruksnummer for hver av de to eiendommene.

Oppgave 6 (10 %) Programmet skal nå utvides slik at brukeren kan gi ordre om å dele en eksisterende eiendom i to eiendommer. For enkelhets skyld antar vi at eiendommen deles i to med en rett linje som går mellom to av hjørnene i den eksisterende eiendommen (det innføres altså ikke noen nye hjørner). Når brukeren gir denne ordren skal programmet først spørre brukeren om gårdsnummer og bruksnummer for eiendommen som skal deles. Deretter skriver programmet ut en liste over navnene på hjørnene til den eksisterende eiendommen, og ber brukeren velge to av disse hjørnene. Deretter deles eiendommen i to ved å trekke en rett linje mellom de to valgte hjørnene. Figuren nedenfor viser et eksempel på deling av en eiendom. Den opprinnelige eiendommen har fire hjørner med navnene "h7", "h3", "h14" og "h5". Brukeren ber om å få delt eiendommen langs en linje som går gjennom "h3" og "h5", og resultatet er to eiendommer som hver har tre hjørner: den ene har hjørnene "h7", "h3" og "h5", mens den andre har hjørnene "h3", "h14" og "h5". Legg merke til at to eiendommer kan ha flere felles hjørner (her blir "h3" og "h5" felles for de to eiendommene). h7 h5 h3 h14 Det er ikke alle par av hjørner som gir en fornuftig oppdeling av en eiendom i to. For eksempel kan vi ikke dele eiendommen i eksemplet ovenfor langs linjen gjennom "h7" og "h3". Det er ikke nødvendig å teste spesielt for slike ting i denne oppgaven. Du skal anta at brukeren oppgir to hjørner som gir en fornuftig deling av eiendommen i to. Etter deling kan den ene (vilkårlig hvilken) av eiendommene beholde det gårdsnummeret og bruksnummeret som eiendommen hadde før deling. Den andre eiendommen må få tildelt et nytt gårdsnummer og bruksnummer, og programmet skal spørre brukeren om å få disse. Oppgave 7 (5 %) Lag en metode i klassen Register som sjekker om to eiendommer har en felles grenselinje. Kriteriet for at to eiendommer har en felles grense, er at det finnes to hjørner som begge forekommer i begge eiendommer, og at det går en grenselinje mellom hjørnene i begge eiendommer. Metoden skal ha som parametre gårdsnummerne og bruksnummerne til de to eiendommene, og metoden skal returnere true dersom eiendommene har en felles grenselinje og false ellers. Ole Christian Lingjærde Gerhard Skagestein

VEDLEGG A Ta utgangspunkt i følgende programskisse. /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain { public static void main (String [] args) { new Eiendomsregister(); } } // end class EiendomsregisterMain /* Kontroll og utsyn */ class Eiendomsregister { Register reg; Eiendomsregister() { /* Her er det bl.a. en løkke for innlesning og håndtering av ordre fra brukeren. Du trenger ikke lage denne. */ } } // end class Eiendomsregister /* Modell */ class Register { /* Her skal du etterhvert fylle inn ting */ } // end class Register /* Klasse for å representere et hjørne */ class Hjorne { double lengdegrad; double breddegrad; void settlengdegrad(double lgrad) {lengdegrad = lgrad;} void settbreddegrad(double bgrad) {breddegrad = bgrad;} double fålengdegrad() {return lengdegrad;} double fåbreddegrad() {return breddegrad;} /* Her skal du etterhvert fylle inn mer */ } // end class Hjorne