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

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

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

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

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

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

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

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

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

MAT-INF 1100: Obligatorisk oppgave 1

UNIVERSITETET I OSLO

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

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

MAT-INF 1100: Obligatorisk oppgave 1

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

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

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF1000 oppgaver til uke 38 (17 sep 23 sep)

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

INF Obligatorisk innlevering 5

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

INF Ekstrainnlevering

og Java

Verdens korteste grunnkurs i Excel (2007-versjonen)

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

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

Oblig4 - forklaringer. Arne og Ole Christian

INF1000: noen avsluttende ord

Endret litt som ukeoppgave i INF1010 våren 2004

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

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

Oblig 3 tips litt mer tips enn i oppgaven

UNIVERSITETET I OSLO

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

IN1010 V18, Obligatorisk oppgave 5

UNIVERSITETET I OSLO

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

2 Om statiske variable/konstanter og statiske metoder.

Obligatorisk oppgave 1 INF1020 h2005

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

Argumenter fra kommandolinjen

Ukeoppgaver 2: sep (INF Høst 2010)

Fra Python til Java, del 2

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

INF Innleveringsoppgave 6

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

Bruk av kildeavskrifter som er merket med grønn kule

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

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

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

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. 6: 28. sep - 4. okt (INF Høst 2011)

Inf109 Programmering for realister Uke 5. I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse.

Oblig3Pi en matematisk rettet variant av oppgave nr. 3 (av 4) i INF1000 våren 2009 ett av to alternativer for oblig 3.

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

Oblig 3 tips litt mer tips enn i oppgaven

Ukeoppgaver INF1000: 12. feb 16. feb

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

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

Dette eksemplet forutsetter at du allerede har gjennomgått Kom i gang med tavler 1.

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

Forelesning inf Java 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.

Gulbrand Grås Husleiesystem

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

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

løsningsforslag-uke5.txt

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

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.

Ukeoppgaver 1: 30. aug 3. sep (INF Høst 2010)

Oversikt. Hva er programmering & Java forkurset til INF1000. Hva er en datamaskin. Arne Maus Inst for Informatikk Univ. i Oslo

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Joly. Brukerdokumentasjon for foreleser/administrator

Brukerveiledning WordPress. Innlogging:

Obligatorisk oppgave 2: Bilhierarki

INF1000: noen avsluttende ord

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

Hvordan installere Java og easyio på Windows

Obligatorisk oppgave 5: Labyrint

MAT-INF 1100: Obligatorisk oppgave 1

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

Oblig3 - obligatorisk oppgave nr. 3 (av 4) i INF1000

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon:

INF1000 : Forelesning 1 (del 2)

Kort veiledning for mottakere

MAT-INF 1100: Obligatorisk oppgave 1

Velkommen til Brother's Keeper 6 for Windows!

Forelesning inf Java 1

Transkript:

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 Leveringsfrist Oppgaven må leveres senest fredag 30. september kl 16.00. 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. 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 13 x 17 ruter (se figur under), hvor radene er nummerert fra 0 til 12 og kolonnene er nummerert fra 0 til 16. 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 12 og kolnr er et heltall mellom 0 og 16. For eksempel angir F(0,0), F(0,1), F(0,2),..., F(0,16) 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 endel andre ting (se under). 1

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: 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. Annuler kjøp av et felt. Denne kommandoen vil funksjonæren gi hvis et oljeselskap ringer og sier at de ønsker å annulere 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 iså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 annulert. 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 en liste over alle feltene 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 mest og minst oljeutvinning. Programmet skal da finne ut hvilket felt som har utvunnet mest olje og hvilket felt som har utvunnet minst olje (av de feltene som er solgt), og skrive ut på skjermen navnet på disse to feltene, navnet på eierene og hvor mye olje som er utvunnet der. Hvis flere felter tilfredsstiller kravene, holder det at programmet skriver ut informasjon for ett av hver av disse to feltene for mest og minst verdi (vilkårlig hvilket). Finn sum av all oljeutvinning. Programmet skal da regne ut hvor mye olje som er utvunnet i sum blant de feltene som er solgt, og skrive ut resultatet på skjermen. 2

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. 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) Annuler kjøp av et felt 3) Lag oversiktskart 4) Lag liste over oljeselskaper 5) Oppdater oljeutvinning 6) Finn maksimal og minimal 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) Annuler kjøp av et felt 3) Lag oversiktskart 4) Lag liste over oljeselskaper 5) Oppdater oljeutvinning 6) Finn maksimal og minimal 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[13][17]; double[][] utvunnet = new double[13][17]; 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 3

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). Her er noen tips og kommentarer til noen av kommandoene: 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(",)"); 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". 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 0 x x x.............. 1..... x x x x x x x.... x 2. x x. x x x..... x x x.. 3 x x x.............. 4..... x x x x x x x.... x 5 x x x.... x x... x x.. x 6 x..... x x x..... x x. 7. x x. x x x..... x x x.. 8..... x x x x x x x.... x 9 x x x.... x x... x x.. x 10 x. x x x..... x x x.... 11 x. x x x..... x x x.... 12 x x x x x x.... x x... x x 4

Lag liste over oljeselskaper. 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 annulerer 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. 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 og minimal oljeutvinning. Denne oppgaven løser du greiest ved å løpe gjennom hele 2D-arrayen utvunnet og hele tiden holde rede på den største og minste verdien du har sett hittil (og hvor du så den). Husk at du må hoppe over de feltene som ikke har noen eier (mest aktuelt for å fine minste antall fat som er utvunnet). 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 (fortsetter på neste side) 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 skal leveres elektronisk. Send programfilen (.java-filen) og resultatet av en testkjøring (se nedenfor) med epost til gruppelæreren din (inf1000-gruppenummer@ifi.uio.no) Hele programmet ditt (.java-filen) skal være på én fil, og testkjøringen på en annen fil. Legg inn en kommentarlinje som følger først i.java-fila: //<brukernavn> g-<gruppenummer> o-<oblignummer> k-<kurskode>/<semester>. 5

Anta at foreleseren Arne Maus med brukernavn: arnem skulle levere oblig 2 på gruppe 14 på kurset inf1000 denne høsten. Første linje skulle da se ut som: // arnem g-14 o-2 k-inf1000/h05 Fyll da første linje ut med det som er riktig for deg (Husk to skråstreker // først på linja og mellomrom mellom de fire opplysningene). Resultatet av testkjøringen skal vise utskriften på skjermen når du starter opp programmet ditt og tester ut de forskjellige delene som du er spurt om å lage i oppgaven. Kjører du Unix, kan du bruke et program som heter photo for å lagre på fil alt som skrives ut på skjermen under en testkjøring. Du gir da følgende kommando i xterm-vinduet rett før du starter java-programmet ditt: photo testoblig2.txt Etter at du har startet programmet ditt, testet det ut og fått det til å avslutte, gir du kommandoen exit (eller trykker Control-D) for å avslutte photo-programmet. Nå ligger all utskriften fra testen på filen testoblig2.txt (du kan kalle filen noe annet hvis du ønsker). Resultatet kan du tilsvarende få tak i hvis du kjører kommandovindu i Windows. Enklest er at du med venstre museknapp klikker på symbolet øverst til venstre på ramma til kommandovinduet. I menyen som da faller ned velger du edit og så select all. Da skulle all teksten i vinduet få hvit bakgrunnsfarge. Trykk så på enter-tasten (den store tasten til høyre på tastaturet med en pil på). Da har du kopiert det som var i kommandovinduet. Nå kan du gå inn i din vanlige programeditor (TextPad, emacs,..), opprette en ny fil og lime(paste) dette inn. Denne filen editerer du så evt. litt for å fjerne linjer som ikke har med siste kjøring av programmet, og leverer så sammen med.java-filen. Hvis du har spørsmål vedrørende leveringsmåte eller annet, så kontakt gruppelæreren din i god tid før innleveringsfristen. Det er ditt ansvar at oppgaven kommer frem til øvingslæreren på riktig måte innen leveringsfristen. Lykke til! 6