Ol Emnekode: Faglig veileder: I L~~25 A - E!8 Viho~d~.1. F ntall oppga~ forsiden): 8 5. -;;;handskr~vn-;



Like dokumenter
Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

ANTDAGER = 358; I Ifra nyttår 08 til 08 1ed julaften

Les gjennom hele oppgavesettet før du begynner å b,svare deloppgavene.

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

Antall sider (inkl forsiden): 6. Alle trykte og håndskrevne

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.

Antall sider (inkl. forsiden): 6

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

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

UNIVERSITETET I OSLO

INF1000 Metoder. Marit Nybakken 16. februar 2004

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

LO191D/LC191D Videregående programmering

INF106 Objektorientert programmering

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

UNIVERSITETET I OSLO

EKSAMEN. Objektorientert programmering

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

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

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Emnekode: LV121A Dato: Alle skrevne og trykte hjelpemidler

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

KANDIDATEN MÅ SELV KONTROLLERE AT OPPGAVESETTET ER FULLSTENDIG

Gjennomgang av eksamen H99

Ordliste. Obligatorisk oppgave 1 - Inf 1020

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

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

TOD063 Datastrukturer og algoritmer

INF Uke 10. Ukesoppgaver oktober 2012

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

INF Seminaroppgaver til uke 3

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

Eksamen. Objektorientert Programmering IGR 1372

Eksamen IN1010/INF1010 våren 2018

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

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

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

INF1000 Behandling av tekster

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

UNIVERSITETET I OSLO

Løse reelle problemer

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

HØGSKOLEN I SØR-TRØNDELAG

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

1 t:n'v'\ekode LO325E. Alle ~vne og trykte. GOd'"j(jent kalkulator

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

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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 EKSAMEN

UNIVERSITETET I OSLO

EKSAMEN med løsningsforslag

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.

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Kontinuasjonseksamen

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

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

UNIVERSITETET I OSLO

Diverse eksamensgaver

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Transkript:

Emne: PROGRAMMERING Ol Emnekode: Faglig veileder: I L~~25 A - E!8 Viho~d~.1 Grupper: I Dato: laa, lab, lac, lia, ~IB, l~c, A_~~~) _~~~~12.~!3 -. Antall sider (inkl, Eksamensoppgaven best~r av: forsiden): 8 5 Tillatte hjelpemidler: -ra";~kte F ntall oppga~ -;;;handskr~vn-; l I ~~;~n~?~, :'!I Antall,..n~11 vedlegg: YeQlegg; O u,; Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn for løsningen. - - - Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.. Hold deg til de Identifikator-navnene som er brukt i oppgaveteksten, dog med unntak av metodenes parameternavn som kan velges fritt.. Dersom det er en deloppgave du ikke f~r til, bør du g~ videre til den neste. F~r du bruk for en metode fra en deloppgave du ikke har gjort, kan du gjøre kall p~ metoden selv om du Ikke har programmert den. Du forutsetter da at den utfører det den er tiltenkt ~ gjøre. Det er viktig at du svarer (i alle fall litt) p~ alle deloppgavene.. Merk deg at svært mye av programmeringen gar ut p~ ~ gjøre kall p~ passende metoder av dem som er omtalt i oppgaven. Merk deg derfor hva de omtalte metodene utfører. Pass p~ ved metodekall at argumenter er av riktig type og sørg for ~ gjøre bruk av dataene som metodene returnerer.. Svar nøyaktig p~ det du blir spurt om. Dersom du mener at oppgaveteksten Ikke gir deg tilstrekkelig informasjon eller er oklar, kan du gjøre dine egne forutsetninger. Gjør I sa fall rede for disse.. Ved sensur vil alle bokstaverte deloppgaver (a, b, c,...) telle Ilke mye. I 09.12.03 10:'1

I denne oppgaven skal du lage deler av et program som simulerer billettsystemet til skiheisene pa et skisenter. Med enkle modifikasjoner kan systemet anvendes p~ mange tilsvarende problemstillinger der man enten betaler pr. gang, pr. dag, pr. m~ned eller pr. ~r, som f.eks ved bomstasjoner, p~ et treningstudio eller liknende. Programmet skal ha en modul som simulerer billettkontrollen, og en annen for blant annet salg av forskjellige typer heiskort. De enkelte deloppgavene inneholder nærmere informasjon. Oppgave 1 For hver tur i skiheisen m~ skiløperen/alpinisten passere billettkontrollen med gy1dig heiskort. Kortet er enten et klippekort, et dagskort eller et ~rskort. (Vi har av hensyn til oppgavens kompleksitet valgt ~rskort istedenfor sesong kort som ville vært mer realistisk.) Du skal i denne deloppgaven lage en abstrakt superklasse Kort. Klassen skal innholde de data og metoder som er felles for alle typer heiskort, blant annet: kortnr pris I I et unikt nummer som identifiserer hvert enkelt kort II hva kortet koster i hele kroner. Klassen skal ha en konstruktør for nødvendig initialisering av instansvariablene/datafeltene. HINT: For ~ generere unike nummer til hvert kort kan det være lurt ~ bruke en static variabel som økes med en for hvert kort som blir generert. Videre skal klassen ha aksess-metoder (get-metoder) som returnerer verdiene til henholdsvis kortnr og pris. Resten av metodene skal være abstrakte: public abstract boolean passering(}; public abstract boolean gyldig(}; og skal følgelig implementeres senere. a) Programmer klassen Kort ** De neste to deloppgavene g~r ut p~ ~ programmere metoder i klassen Klippekort. Nedenfor finner du en skisse av denne klassen: public class Klippekort extends Kort. public static final int PRIS PER KLIPP = 20i private int anta.l1klippi /7 antall klipp som til enhver tid er igjen på kort private static int antallsolgte. O; II Det totale antall solgte klippekort private static int sum = o; II Den totale summen det er solgt klipp for /1 på alle klippekortene til sammen. < konstruktør < metoder> b) Programmer klassens konstruktør. Som parameter skal kontruktøren ta imot informasjon om hvor mange klipp kortet inneholder som nytt. Foruten ~ sørge for ~ initialisere klassens instansvariable/datafelt, skal konstruktøren ogs~ sørge for a oppdatere antall solgte klippekort og ikke minst summen det er solgt klippekort for s~ langt. 09.12.0310:51

Videre skal du I denne deloppgaven programmere aksess-metoder (get-metoder) for static-varlablene antallsolgte og sum. c) Du skal i denne deloppgaven programmere tre metoder: public void ladopp int n ).) Metoden over skal øke antall klipp p~ kortet med det antallet som parameteren n angir og oppdatere sur'!1men det er solgt klipp for. p1l1blic boolean gyldig () Metoden over skal returnere true hvis kortet er gyldig og p~lic boolean passering() {. motsatt fall false. Metoden over skal registrere en tur i skiheisen, under forutsetning av at kortet er gyldig. Returverdien skal fortelle om passeringen av billettkontrollen var vellykket.... To av korttypene, dagskort og ~rskort, er avhengig av ~ lagre henholdsvis dagen og ~ret kortene blir solgt. I pakken java.util finner vi klassen Calendar, og i den de metodene vi trenger for ~ f~ tak i dagen og året vi st~r i ved hjelp av følgende setninger: int dag = Calendar.getlnstance().get in~ Ar - Calendar.getlnstance().get( Calendar. DAY OF YEAR Calendar.YEAR-);- d) Nedenfor ser du en skisse av klassen Årskort public class Årskort extends Kort { public final static int ARSPRIS - 3000; private int år; II Året kortet gjelder for pr,ivate String navn; II Eierens navn private static int antallsolgte - O; II Det totale antall solgte årskort private static int sum - o; II Den totale summen det er solgt årskort for < konstruktør> < aksess-metoder / get-metoder < metoder du skal programmere Programmer klassens konstruktør. Konstruktøren mottar navnet på eieren av kortet som parameter og skal sørge for å initialisere og oppdatere klassens instansvariable/datafelt. public boolean gyldig () Metoden over skal kun undersøke om vi "befinner oss i riktig år ut fra det 3ret kortet gjelder for. Returverdien skal samsvare med resultatet. Kortet er personlig, og enkelte ganger vil det ved billettkontrollen bli sjekket om brukeren av kortet er eieren av kortet. I denne forbindelse skal du programmere metoden public boolean passering(string navn) Metoden over registrerer en passering av billettkontrollen under forutsetning av at kortet er gyldig og at navnet som parameteren angir også er navnet på eieren av kortet. Returverdien skal fortelle om personen passerte billettkontrollen eller ikke. Eierens identitet blir imidlertid ikke sjekket ved hver passering, s du skal ogs programmere metoden 09.12.03 10:51

public boolean passering () som kun registrerer en passering under forutsetning av at kortet er gyldig. Returverdien skal fortelle om personen passerte billettkontrollen eller ikke. Du skal Ikke programmere aksess-metodene/ get-metodene da disse stort sett blir like dem du programmerte under punkt b. Men det er viktig at du bruker dem der du finner det hensiktsmessig. Til slutt I oppgave 1 ser du en skisse over klassen Dagskort. Du skal Ikke programmere noe I denne klassen, men vite at du har den og merke deg hvilke metoder den har slik at du kan bruke den der du finner det nødvendig: ~ublic claes Dagskort extends Kort public final static int DAGSPRIS - 2 private int dag; private static int sum - o; private static int antallsolgte. O; < konstruktør> < aksess-metoder / get-metoder > public boolean gyldig ( ) { public boolean passering () }... Oppgave 2 Klassen Kortsystem, som er skissert nedenfor, skal lagre heiskortene. I utgangspunktet er det plass til 100 heiskort. Arrayens størrelse skal imidlertid kunne økes etter behov slik at salg av heiskort ikke begrenses til 100. ~ublic class Kortsystem public static final int MAX - 100; public static final int UTVIDELSE - 10; public static final int KLIPPEKORT - O, private Kort[] kortarray; DAGSKORT = l, SESONGKORT = 2 ~ublic Kortsystem() 'f. kortarraya new Kort [MAX) < metoder du skal programmere> a) public void utvidarray ( ) Metoden skal utvide arrayen med ~ mange elementer som konstanten UTVIDELSE angir. Metoden vil bli kalt n~r det er behov for ~ utvide arrayen I forbindelse med Innsetting av et nytt helskort. b) public void sett InnKort (Kort k) Metoden mottar et nytt helskort som parameter og skal sette dette Inn p~ første ledige plass i arrayen. Hvis arrayen er full, m& du først utvide den med si mange elementer som 09.12.03 10:51

konstanten UTVIDELSE angir, og deretter sette inn kortet. c) Under denne deloppgaven skal du programmere følgende to metoder public Kort finnkort(int nr) 1 som returnerer en referanse til heiskortet med kortnr lik den innkomne parameteren nr. Hvis kortet Ikke finnes i arrayen, skal metoden returnere null. public void fjernugyldigekort() Metoden over skal fjerne alle ugyldige kort fra arrayen, det vil si kort som er g~tt ut p~ dato, eller klippekort der alle klippene er brukt opp. d) Eieren av et klippekort skal ha mulighet til ~ "lade opp" kortet med et visst antall klipp. public boolean ladoppkort {int nr, antall l Metoden skal øke antall klipp på kortet med kortnr lik den innkomne parameteren nr, med det antall klipp som den innkomne parameteren antall angir. Hvis dette lar seg gjøre, skal metoden returnere true, og i motsatt fall skal den returnere false. e) Kortsystemet skal ha mulighet for å skrive ut informasjon om hvor mange kort det er solgt av de forskjellige typene, hvor mye som er tjent inn på hver type, og hvor mye som er tjent inn totalt. p~lic String inntjeningsinfo().) Oppgave 3 Bi I lettsystemets display for billettkontroll er vist på bildet under. P8rsonk~oii:. ;:':"i""c;"i; BlIett,-kM'OR ~I I,'" I.. Vinduet er definert klassen BillettXontroll som du.finner en skisse av nedenfor: import-setninger public claes BillettKontroll extends JFrame { private JTextField kortnrfeit, navnefelt, display private JButton kontroll; private Kortsystem kortsystem; public BillettKontroll(Kortsystem k) { super ("BILLETT-KONTROLL") ; kortsystem - k; ~ontroll = new JB u t t on ("Sillett-kon troll") i ~ontroll.addactionlistener(new ActionListener() of8 09.12.0310:51

< oppretter resten av brukergrensesnittet public void kontrollerkort() t a) Metoden du skal programmere public vold kontrollerkort 1,. i denne oppgaven skal kalles ved billett-kontroll Metoden m~ lese Inn kortets nummer og sjekke at kortet er gyldig, under forutsetning av at det finnes, og eventuelt registrere en passering (ved klippekort). Hvis kortet er gyldig, skrives "OK" i diplay-vinduet, i motsatt fall "STOPP". Hvis kortet er et ~rskort, skal metoden sjekke om brukeren av programmet har skrevet inn et navn i navnefeltet, og i s~ fall foreta en billettkontroll som ogs~ sjekker navnet. Metoden skal sørge for ~ blanke ut navnet i navnefeltet etter at kontrollen er foretatt. Hvis det ikke st~r noe i navnefeltet, skal det bare sjekkes om kortet er gyldig. TIL ORIENTERING: For ~ f~ skrevet ut "OK" og "STOPP" med fontene som vist p~ bildet med sentrering av teksten midt p~ displayet og med bakgrunnsfargene rød eller grønn, er det brukt følgende programsetninger: display.setfont(new Font ("Times", Font.BOLD, 60»; display.setbackground( Color.RED); II ev. Color.GREEN display.sethorizontalalignment(display.center); Oppgave 4 Vinduet under brukes ved salg av heiskort, opplading av klippekort og til hente informasjon om salg av kort med mer. J<lippekort kr. 20.- pr. klipp Dagskort: kr. 200.- Sesongkort kr. 3000.-.." a~.;;",~ ~-.~., ~, :~ Antæl~.I K-l",": I - """-"-1: ~"C"c): Opplading av klippekort I Bøtal kr:.., r-~.~~iue kort "'U' ~ r~n ~1g6 ~ I s~w~~ Vinduet er definert klassen Kortsalg som du finner en skisse av nedenfor: < import-setninger> public claes Kortsalg extends JFrame { private static final int KLIPP - l, DAG - 2, ÅR - 3i private JTextField kortnrfelt, navnefelt, betalingsfelt, antallklippfelti private JButton klipp, dag, år, infoknapp, fjern, ladeknappi private JTextArea info, displayi of8 09.12.0310:51

private Lytter lytter; private Kortsystem kortsystem; public KOrtsalg(KOrtsystem k} super ("KORTSALG") i kortsystem. ki lytter 8 new Lytter() i < oppretter resten av brukergrensesnittet klipp.addactionlistener(lytter) i d~g.addactionlistener(lytter)i år. addactionlistener (lytter) i ladeknapp. addactionlistener ( lytter metoder du skal programmere> p~ivate claes Lytter a) Ptfblic: vold selgkort(int type) Metoden skal foreta et salg av et helskort av typen parameteren type angir. (Se konstantene skissen av klassen over.) NSr kortet er opprettet og satt inn I datasystemet, skal metoden skrive ut kortets nummer i tekstfeltet kortnrfel t og prisen som skal betales I tekstfeltet betalingsfelt. b) p+lic void ladoppkort Metoden skal lade opp klippekortet med det antall klipp som brukeren skriver inn, under forutsetning av at nummeret brukeren skriver inn tilhører et klippekort i datasystemet. Hvis dette g&r bra, skal det skrives en melding om det i displayet og prisen som skal betales skrives i betalingsfeltet. I motsatt fall skal det gis melding om at klippekort med dette nummer ikke finnes. c) I denne deloppgaven skal du programmere to metoder: P~lic void salgsinformasjon f l som skriver ut ps displayet hvor mange kort det er solgt av de forskjellige typene, hvor mye som er tjent inn ps hver type, og hvor mye som er tjent inn totalt. ~lic voicl fjernugyldigekort ( som sørger for at alle ugvldige'kort"bttr fjernet fra datasystemet, det vil si kort som er g~tt ut p~ dato når metoden blir kalt, eller klippekort der alle klippene er brukt opp. d) Programmer den private lytteklassen private class Lytter. slik at den fanger opp hendelsene som brukeren av programmet genererer og utfører de tilhørende operasjonene. 09.12.0310:51

Oppgave 5 Lag klassen KortApplikasjon som inneholder hovedprogrammet. Dette skal opprette et synlig vindu av hver av typene du har programmert og starte hele applikasjonen. Programmer lukkeknappene på vinduene slik at applikasjonen avsluttes n~r vinduene lukker seg. SLUTT! af8 09.12.0310:51