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

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

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

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

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

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

UNIVERSITETET I OSLO

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

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

INF1000 : Forelesning 4

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 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

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

Endret litt som ukeoppgave i INF1010 våren 2004

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

Oblig4 - forklaringer. Arne og Ole Christian

INF1000 oppgaver til uke 38 (17 sep 23 sep)

INF Ekstrainnlevering

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

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

Oblig3Hybelhus (INF Høst 2011) én av to mulige oppgaver for oblig3 (du løser denne eller Oblig3Pi)

INF1000: noen avsluttende ord

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

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

UNIVERSITETET I OSLO

Oblig3Pi- en matematisk rettet obligatorisk oppgave nr. 3 (av 4) i INF1000 ett av to alternativer for oblig 3.

INF Obligatorisk innlevering 5

Oblig 3 tips litt mer tips enn i oppgaven

Obligatorisk oppgave 1 INF1020 h2005

Oblig 3 tips litt mer tips enn i oppgaven

Joly. Brukerdokumentasjon for foreleser/administrator

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

Løsningsforslag ukeoppg. 4: sep (INF Høst 2011)

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

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

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

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

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

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.

INF1000: Forelesning 6. Klasser og objekter del 1

Oppgaven består av to deler, del A og del B. Alle skal besvare både del A og del B, men det finnes noen valgmuligheter innenfor hver del.

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

UNIVERSITETET I OSLO

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

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

løsningsforslag-uke5.txt

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

IN1010 V18, Obligatorisk oppgave 5

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Ukeoppgaver INF1000: 12. feb 16. feb

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

Prøveeksamen inf november Arne Maus og Ole Christian Lingjærde

Obligatorisk oppgave 1 i INF 4130, høsten 2009

Obligatorisk oppgave 2: Bilhierarki

UNIVERSITETET I OSLO

IN1000 Obligatorisk innlevering 7

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

Oblig3Pi - en matematisk rettet obligatorisk oppgave nr. 3 (av 4) i INF1000 høsten 2010 ett av to alternativer for oblig 3.

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

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

INF Uke 11. Ukeoppgaver oktober 2012

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

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

INF 1000 høsten 2011 Uke 3 6. september

Eksamen IN1010/INF1010 våren 2018

Innhold uke 3. INF 1000 høsten 2011 Uke 3 6. september. Uttrykk. Variabel: En plass i hukommelsen

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

INF1000: Forelesning 7. Konstruktører Static

Obligatorisk oppgave 5: Labyrint

Jentetreff INF1000 Debugging i Java

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Gulbrand Grås Husleiesystem

Del 1 En oversikt over C-programmering

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

INF Obligatorisk innlevering 7

INF Uke 10. Ukesoppgaver oktober 2012

Transkript:

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009 Leveringsfrist Oppgaven må løses individuelt og leveres senest fredag 20. februar kl 16.00 via Joly. Viktig: les slutten av oppgaven for detaljerte leveringskrav. Formål Formålet med denne oppgaven er å gi trening i bruk av forgreninger, løkker, arrayer og kommunikasjon med bruker via terminal eventuelt også bruk av metoder. Oppgave Utenfor kysten av Ruritania er det et område med store oljeforekomster under havbunnen, og myndighetene i Ruritania har bestemt seg for å selge rettighetene til å utvinne olje til oljeselskaper. Det aktuelle havområdet er rektangulært og er delt opp i et rutenett med 16 x 22 ruter (se figur under), hvor radene er nummerert fra 0 til 15 og kolonnene er nummerert fra 0 til 21. Hver rute kalles et utvinningsfelt (eller bare felt). Hvert felt har et entydig navn på formen F(radnr, kolnr) hvor radnr er et heltall mellom 0 og 14 og kolnr er et heltall mellom 0 og 24. For eksempel angir F(0,0), F(0,1), F(0,2),..., F(0,21) feltene i øverste rad (fra venstre mot høyre) i figuren under. Feltene (eller mer presist: utvinningsrettighetene til dem) legges ut for salg enkeltvis. Det er ingen grenser for hvor mange felter et oljeselskap kan eie, men et felt kan ikke ha mer enn ett oljeselskap som eier (dvs hvert felt er enten ikke solgt eller det eies av ett oljeselskap). Myndighetene i Ruritania trenger nå et datasystem som kan holde rede på hvilke felter som er solgt og hvilke eiere disse har. Systemet skal også holde rede på hvor mye olje (målt i antall fat) som er utvunnet i hvert felt. Brukeren av systemet skal være en funksjonær som jobber for myndighetene i Ruritania. Når et oljeselskap ønsker å kjøpe et felt, ringer de funksjonæren som så bruker ditt program for å finne et ledig felt (hvis det er noen) og registrere salget av feltet. Funksjonæren skal også kunne få ut fra programmet en oversikt over antall solgte felter og en del andre ting (se under). Programmet skal være kommandostyrt, dvs. det skal kunne ta imot en kommando fra brukeren, utføre kommandoen, ta imot ny kommando, osv, helt til brukeren ønsker å avslutte. Mer konkret skal programmet oppføre seg slik sett fra brukerens side: 1

Det skriver ut på skjerm hvilke kommandoer brukeren kan gi. Deretter ber programmet om og leser inn en kommando fra brukeren. Programmet utfører den valgte kommandoen. Programmet skal gjenta de tre trinnene ovenfor helt til brukeren gir kommando om å avslutte (se nedenfor). Brukeren skal kunne gi følgende kommandoer: Kjøp et felt. Denne kommandoen vil funksjonæren gi hvis et oljeselskap ringer og sier at de ønsker å kjøpe et felt. Programmet skal da først sjekke om det er noen ledige felter (dvs. felter som ikke allerede er solgt). Hvis det ikke er noen ledige felter, må programmet gi brukeren beskjed om dette. Hvis det finnes ledige felter, skal programmet spørre om navnet på feltet som ønskes kjøpt og navnet på det oljeselskapet som ønsker å kjøpe feltet (vi gjør den rimelige antagelsen at de ulike oljeselskapene har forskjellig navn, slik at navnet entydig identifiserer et oljeselskap) og registrere at dette oljeselskapet nå eier det aktuelle feltet. Programmet skal også skrive ut på skjermen at salget gikk i orden, f.eks. med en utskrift som dette: "Feltet F(13,15) selges til Petrol A/S". Hvis feltet allerede var solgt, må programmet i stedet gi en feilmelding. Annuller kjøp av et felt. Denne kommandoen vil funksjonæren gi hvis et oljeselskap ringer og sier at de ønsker å annullere kjøpet av et felt. Programmet må da spørre brukeren om navnet på oljeselskapet og navnet på feltet som oljeselskapet ikke lenger ønsker å eie. Deretter skal programmet sjekke at dette feltet faktisk er solgt til dette oljeselskapet, og i så fall registrere at feltet ikke lenger har noen eier (og følgelig er ledig for salg). Mengden olje som er utvunnet i feltet skal ikke settes til null igjen. Brukeren skal få bekreftelse på at salget er annullert. Hvis feltet derimot ikke var solgt til dette oljeselskapet, må brukeren få beskjed om dette. Lag oversiktskart. Programmet skal da skrive ut på skjermen et kart (se eksempel lenger ned i oppgaven) hvor hvert felt er markert med en "." hvis det er ledig og "x" hvis det er solgt. Lag liste over oljeselskaper. Programmet skal da skrive ut på skjermen en liste med navnene på alle oljeselskapene som eier felter. Hvert oljeselskap skal bare forekomme en gang i denne listen, og under navnet på hvert oljeselskap skal det være angis hvor mange (men ikke hvilke) felter selskapet eier. Oppdater oljeutvinning. Hver tredje måned må oljeselskapene ringe til funksjonæren og fortelle hvor mye olje de har utvunnet på hvert av feltene i løpet av de tre siste månedene. Da bruker funksjonæren denne kommandoen for å registrere informasjonen. Programmet ber da om navnet på feltet og hvor mye olje (målt i fat) selskapet har utvunnet der de siste tre måneder, og oppdaterer registeret. Finn maksimal oljeutvinning. Programmet skal da finne ut hvilket felt som har utvunnet mest olje, og skrive ut på skjermen navnet på dette feltet, navnet på eieren og hvor mye olje som er utvunnet der. Hvis flere felter tilfredsstiller kravet, holder det at programmet skriver ut informasjon for ett av disse feltene (vilkårlig hvilket). Finn sum oljeutvinning. Programmet skal da regne ut hvor mye olje som er utvunnet i sum i alle de feltene som er solgt, og skrive ut resultatet på skjermen. Husk å få med alle feltene, også de som er levert tilbake, men hvor det har vært utvinning. Avslutt. Programmet skal da avslutte. Det er ikke meningen at programmet skal ta vare på (skrive til fil) de dataene som er registrert av funksjonæren. 2

Nedenfor ser du et eksempel på starten av en kjøring av programmet (bruker-input er markert med understreking). Utskriften er bare ment å illustrere hvordan kommunikasjonen kan foregå; dersom du ønsker å presentere menyen annerledes osv, så kan du gjøre det. >java Oblig2 *** VELKOMMEN TIL RURITANIAS OLJEFELTOVERSIKT *** Du har følgende valgmuligheter: 1) Kjøp et felt 2) Annuller kjøp av et felt 3) Lag oversiktskart 4) Lag liste over oljeselskaper 5) Oppdater oljeutvinning 6) Finn maksimal oljeutvinning 7) Finn sum oljeutvinning 8) Avslutt Velg kommando: 1 ** Kjøp et felt ** Oppgi feltet som ønskes kjøpt: F(3,6) Oppgi oljeselskapets navn: Oljesøl A/S Feltet F(3,6) selges til Oljesøl A/S. Du har følgende valgmuligheter: 1) Kjøp et felt 2) Annuller kjøp av et felt 3) Lag oversiktskart 4) Lag liste over oljeselskaper 5) Oppdater oljeutvinning 6) Finn maksimal oljeutvinning 7) Finn sum oljeutvinning 8) Avslutt Velg kommando: 5... osv... Tips og forutsetninger som kan gjøres For hvert felt er det to opplysninger som skal tas vare på: (1) navnet på oljeselskapet som eier det; og (2) hvor mye olje som er utvunnet i feltet. Du kan bruke to to-dimensjonale arrayer til å lagre disse opplysningene: String[][] eier = new String[16][22]; double[][] utvunnet = new double[16][22]; Dermed vil f.eks. eier[3][5] være navnet på oljeselskapet som eier feltet F(3,5), og utvunnet[3][5] vil være antall fat olje som er utvunnet på dette feltet (sistnevnte array kunne også vært deklarert som en int-array - her står du fritt til å velge). Det finnes andre måter å løse oppgaven på (vi kunne klart oss med en enkelt to-dimensjonal array med pekere til objekter av en klasse som vi selv lager - men denne teknikken gjennomgås ikke før senere i kurset og skal ikke anvendes i denne oppgaven). 3

Her er noen tips og kommentarer til noen av kommandoene. Hver av disse punktene løses lettest hvis du for hvert punkt lager en metode som kalles hvis brukeren ønsker den kommandoen utført, men siden metoder er relativt nytt stoff, aksepteres også løsninger uten slike metoder : Kjøp et felt. Programmet må ha en måte å finne ut om et felt er solgt eller ikke. En enkel måte å finne ut om f.eks. F(3,6) er solgt er å se om eier[3][6] er satt til et navn eller ikke. Rett etter at 2D-arrayen eier er deklarert er alle verdiene i arrayen lik den spesielle verdien null, og du kan derfor sjekke om F(3,6) er ledig ved å teste om eier[3][6] == null. Når programmet skal lese inn navnet på feltet som skal selges, må du klare å trekke ut radnummeret og kolonnenummeret fra feltnavnet. Hvis f.eks. brukeren skriver "F(3,6)" så må du altså klare å "få tak i" tallene 3 og 6 siden du trenger disse når du skal sette inn navnet på oljeselskapet i eier-arrayen. Dette kan gjøres på flere måter; en av dem er å bruke setningene int radnr = tast.inint("f(,)"); int kolnr = tast.inint("f(,)"); Her er det en variant av inint() som brukes. Det som står i anførselstegn er de tegnene som skal betraktes som skilletegn - altså de tegnene som inint skal se på som "blanke tegn". I tillegg får vi alltid med linjeskift og vognretur (men ikke blank ) som skilletegn når vi angir egne skilletegn som ovenfor. Annuler kjøp av et felt. Her må du huske å sette eier[radnr][kolnr] til null, hvor radnr og kolnr er radnummeret og kolonnenummeret til det feltet som ikke lenger skal ha noen eier. Lag oversiktskart. Det oversiktskartet som skal lages skal se omtrent slik ut (men hvor plasseringen av "x" og "." naturligvis kan variere og skal vise hvilke felter som er henholdsvis solgt og ledig). 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 0 x x x................... 1 x x x.......... x x....... 2. x x................. x. 3. x x x............... x x. 4.. x...... x............ 5.. x...... x x........... 6.. x..... x.. x.......... 7.. x................... 8.. x x........ x......... 9.. x................ x.. 10.. x...... x......... x x. 11......... x...... x... x. 12.. x...... x...... x x... x 13.. x................... 14.. x...... x............ 15......... x............ 4

Lag liste over oljeselskaper med antall felter. Her lønner det seg å først lage en String-array med navnene på oljeselskapene som eier felter, og hvor hvert selskap bare forekommer en enkelt gang i arrayen. Det er to måter å gjøre dette på. Den ene måten er å lage en slik array når programmet starter opp, og sørge for å legge inn navn på nye oljeselskap i arrayen når kommandoen "Selg et felt" utføres (du må da også huske å ta ut et navn dersom et oljeselskap annullerer et kjøp og ikke lenger eier noen felter). Den andre måten er å lage en slik array hver gang kommandoen "Lag liste over oljeselskaper" utføres. Da må du løpe gjennom hele 2D-arrayen eier, og hver gang du ser et navn som ikke allerede ligger i arrayen over oljeselskapnavn så må du legge det inn i sistnevnte array som eier av ett felt. Hvis du senere treffer på et oljeselskap som du allerede har navnet på, må du så telle opp antall oljefelter det selskapet eier. Oppdater oljeutvinning. Husk at du i denne oppgaven skal addere den innleste verdien til den verdien som allerede er registrert i systemet (siden verdien i registeret skal være det totale antall fat olje som er utvinnet i et felt). Finn maksimal oljeutvinning. Denne oppgaven løser du greiest ved å løpe gjennom hele 2D-arrayen utvunnet og hele tiden holde rede på den største verdien du har sett hittil (og hvor du så den). Husk at du må hoppe over de feltene som ikke har noen eier. Finn sum oljeutvinning. Her kan du bare løpe gjennom hele 2D-arrayen utvunnet og summere verdiene. Du kan gjøre egne forutsetninger etter behov så lenge disse ikke er i strid med oppgaven, men sørg for å kommentere disse i programmet. Et tips: sørg først for å få kommandoløkken til å fungere, dvs sørg for at programmet klarer å skrive ut lovlige kommandoer og lese inn en kommando på korrekt måte. Deretter kan du gå videre og programmere de enkelte kommandoene (i vilkårlig rekkefølge). Husk å kompilere og teste programmet ditt regelmessig når du lager det! Leveringskrav Her student skal levere hver sin egenprogrammerte løsning, og du plikter å ha lest og forstått følgende krav til innleverte oppgaver ved institutt for informatikk: http://www.ifi.uio.no/studinf/skjemaer/erklaring.pdf Oppgaven (java-filen)skal leveres elektronisk i Jolysystemet http://obelix.ifi.uio.no:8080/wizard.html Da må du legge en kommentar som første linje i.javafilen din som sier hvem du er, login-navnet, gruppe, oblignummer, kurskode og semester som flg: //<brukernavn> g-<gruppenummer> o-<oblignummer> k-<kurskode>/<semester>. eks: for Arne Maus, (arnem) på gruppe 12: // arnem g-12 o-2 k-inf1000/h07 ). Se også kursets hjemmesider for oppdateringer og beskjeder. 5