Eksamensoppgave i IFUD1025 Programmering i Java og IINI4013 Programmering i Java

Like dokumenter
Eksamensoppgave i IFUD1025 Programmering i Java

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

Eksamensoppgave i IFUD1025 Programmering i Java

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

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

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

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

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

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

Eksamensoppgave i IFUD1025 Programmering i Java

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

HØGSKOLEN I SØR-TRØNDELAG

INF1000 Behandling av tekster

Eksamen IN1010/INF1010 våren 2018

TDT4100 Objektorientert programmering

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

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

UNIVERSITETET I OSLO

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

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

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

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

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

UNIVERSITETET I OSLO

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

String-manipulasjon og I/O i Java. INF1000 h14 - Hans Petter Taugbøl Kragset

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

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 Sortering. Marit Nybakken 1. mars 2004

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

Endret litt som ukeoppgave i INF1010 våren 2004

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øse reelle problemer

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

INF1000 (Uke 6) Mer om metoder, tekster

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

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

UNIVERSITETET I OSLO

Forelesning inf Java 5

Forelesning inf Java 5

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

TDT4100 Objektorientert programmering

INF106 Objektorientert programmering

Å lese tall fra en fil, klassen Scanner

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

UNIVERSITETET I OSLO

Informasjon Prøveeksamen i IN1000 høsten 2018

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

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

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMENSOPPGAVE I INF-1100

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

HØGSKOLEN I SØR-TRØNDELAG

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

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

Fakultet for informasjonsteknologi, Institutt for datateknikk og informasjonsvitenskap

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

HØGSKOLEN I SØR-TRØNDELAG

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

UNIVERSITETET I OSLO

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

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

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

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

Leksjon 7. Filer og unntak

HØGSKOLEN I SØR-TRØNDELAG

Transkript:

Fakultet for teknologi Eksamensoppgave i IFUD1025 Programmering i Java og IINI4013 Programmering i Java Faglig kontakt under eksamen: Vuokko-Helena Caseiro Tlf.: +39 06 51 26 063 Eksamensdato: 30. november 2016 Eksamenstid (fra til): 9:00 13:00 Tillatte hjelpemidler: Alle skrevne og trykte hjelpemidler. Enkel numerisk kalkulator. Kalkulatoren kan maksimalt ha funksjonalitet tilsvarende Citizen SR270 College eller HP30S. Annen informasjon: Målform/språk: Bokmål Antall sider (uten forside): 5 Antall sider vedlegg: 1

Oppgave 1 ( 50 % ) Bussreise Holdeplassene på en bussrute er nummerert 0, 1, 2 og så videre helt opp til siste holdeplass. Vi ser på en bussreise og ønsker å kunne følge nøye med på passasjerantallet underveis. Bussen stopper på alle holdeplassene. På hver holdeplass kan passasjerer gå av og på bussen. Det er aldri noen passasjerer ombord verken når bussen ankommer holdeplass 0, eller når den drar fra siste holdeplass. To eksempler på reiser: På bussrute 715 er det sju holdeplasser. Nedenfor ser du to forskjellige reiser på denne ruten. For begge reisene er det slik at - I første kolonne står holdeplassen. - I andre kolonne står antall passasjerer som går av bussen på holdeplassen. - I tredje kolonne står antall passasjerer som går på bussen på holdeplassen. - I fjerde kolonne har vi regnet ut antall passasjerer ombord når bussen drar fra holdeplassen. Eksempel 1 Avgang kl. 9:07 den 30.11.2016 holdeplass går av går på ombord 0 0 4 4 1 1 6 9 2 2 9 16 3 5 20 31 4 29 1 3 5 2 0 1 6 1 0 0 Eksempel 2 Avgang kl. 12:37 den 30.11.2016 holdeplass går av går på ombord 0 0 0 0 1 0 10 10 2 2 7 15 3 0 13 28 4 3 0 25 5 19 0 6 6 6 0 0 Du skal lage en klasse Reise for å representere en bussreise. Klassen skal ha en eneste mutasjonsmetode, ankommerholdeplass(), og klienten bør kalle denne metoden hver gang bussen ankommer en holdeplass. a) Begynn å lage klassen Reise. Det skal være tre objektvariabler: o neste av type int: Hvis ikke reisen er slutt, er neste den neste holdeplassen bussen skal til. Hvis reisen er slutt, er neste lik antall holdeplasser. o av av type int[]: tabell med lengde lik antall holdeplasser. For hver holdeplass i < neste er av[i] lik antall passasjerer som gikk av bussen på holdeplass i. For hver holdeplass i neste er av[i] lik 0. o på av type int[]: tabell med lengde lik antall holdeplasser. For hver holdeplass i < neste er på[i] lik antall passasjerer som gikk på bussen på holdeplass i. For hver holdeplass i neste er på[i] lik 0. Det kunne ha vært naturlig å ha med flere objektvariabler, som for eksempel rutenummeret og tidpunktet for reisen, men ikke ta med flere. Lag en konstruktør med en eneste parameter, nemlig totalt antall holdeplasser. Lag get-metoder der du bruker dyp kopiering. Eksempel 1 fortsatt: Innholdet i Reise-objektet idet bussen drar fra holdeplass 3: 2

b) Lag en Reise-metode public boolean erslutt() Hvis bussen har vært på alle holdeplassene, skal metoden returnere true, ellers false. Eksempel 1 fortsatt: Hvis neste er 7, skal metoden returnere true, ellers false. c) Lag en Reise-metode public void ankommerholdeplass(int antallav, int antallpå) Hvis reisen ikke er slutt, skal metoden registrere at antallav passasjerer går av og at antallpå passasjerer går på, og dessuten skal neste økes med 1. Eksempel 1 fortsatt: Hvis neste er 4, skal element nummer 4 i av få verdien 29 og element nummer 4 i på skal få verdien 1, og deretter skal neste bli 5. d) Lage en Reise-metode public int[] finnantallombord() For hver av de holdeplassene som bussen har vært på hittil, skal returtabellen inneholde antall passasjerer som var ombord ved avreisen fra hver av disse holdeplassene. Eksempel 1 fortsatt: Hvis neste er 4, skal metoden returnere tabellen med 4, 9, 16, 31. e) Lag en Reise-metode public int finnantallombord(int nr) Hvis bussen har vært på holdeplass nr, skal metoden returnere antall passasjerer som var ombord da bussen dro fra holdeplass nr. Ellers skal metoden returnere 0. Eksempel 1 fortsatt: Hvis neste er 4 og nr er 2, skal metoden returnere 16. f) Lag en Reise-metode public int finnmaksimumombord() Metoden skal returnere høyest antall passasjerer ombord etter noen holdeplass hittil. Eksempel 1 fortsatt: Hvis neste er 4, skal metoden returnere 31. Hvis neste er 3, skal metoden returnere 16. Vi ser nå på en annen klasse: MangeReiserPåSammeRute. Denne klassen har en objektvariabel private Reise[] reisene; Alle reisene i reisene er på samme rute. g) Lag en MangeReiserPåSammeRute-metode public Reise finngjennomsnittsreisen() Hvis alle reisene i reisene er slutt, skal metoden returnere den reisen som er slik at for hver holdeplass i er o av[i] lik gjennomsnittet av antall passasjerer som gikk av på holdeplass i, og o på[i] lik gjennomsnittet av antall passasjerer som gikk på på holdeplass i. Når du skal dele to heltall på hverandre, så unngå heltallsdivisjon ved å caste først det ene tallet til et desimaltall. Rund så av resultatet av divisjonen til nærmeste heltall, for eksempel slik: int resultatsomheltall = (int) (resultatsomdesimaltall + 0.5); Eksemplene fortsatt: La reisene inneholde de to avsluttede reisene. Metoden skal returnere et Reise-objekt som er slik at av inneholder 0, 1, 2, 3, 16, 11, 4 og på inneholder 2, 8, 8, 17, 1, 0, 0. 3

Oppgave 2 ( 50 % ) Nasjonal iban-kalkulator Vi skal se på en forenklet versjon av iban («international bank account number»), som er et bankkontonummer som følger en internasjonal standard. Hvert land har sin egen landkode på to bokstaver og sin ibanlengde som er minst 10. Velg et land. For at en streng skal være et gyldig iban i landet må følgende tre krav være oppfylt: - Krav 1: Strengen må starte med landets landkode. Rett etter landkoden må det stå to sifre. Strengens lengde må være lik landets ibanlengde. - Krav 2: Strengen kan bare inneholde tillatte tegn. De tillatte tegnene er sifrene 0, 1,..., 9 og de store bokstavene A, B,..., Z. - Krav 3: Strengen må passere «modulus-97-testen». Denne testen går ut på gjøre om strengen til et heltall og så sjekke om resten er 1 når vi deler heltallet på 97. Vi kommer til detaljene på neste side. Eksempel 1: Norge har "NO" som landkode og 15 som ibanlengde. Strengen "NO4330002275321" er et gyldig iban i Norge: - Krav 1 er oppfylt siden strengen starter med "NO" etterfulgt av de to sifrene 4 og 3, og siden hele strengen har lengde 15. - Krav 2 er oppfylt siden strengen bare inneholder tillatte tegn. - Krav 3 er oppfylt. Eksempel 2: Nederland har "NL" som landkode og 18 som ibanlengde. "NL38INGB0002010534" er et gyldig iban i Nederland. Du skal lage en klasse NasjonalIbankalkulator for å behandle ibaner i et bestemt land. To av metodene skal være offentlige: Det er gyldigiban(), som sjekker om argumentet er et gyldig iban i dette landet, og klassemetoden finngruppert(), som legger inn mellomrom i oppgitt iban for å gjøre det lettere å lese. Noen tips: - Vedlegget i dette eksamenssettet inneholder endel String-metoder. - + kan brukes til å lage en ny streng gitt en streng og et tegn, eller gitt to strenger. - Alle sifrene 0, 1,..., 9 ligger rett etter hverandre i Unicode-tegnsettet. - Alle bokstavene A, B,..., Z ligger rett etter hverandre i Unicode-tegnsettet. a) Begynn å lage klassen NasjonalIbankalkulator. Det skal være to objektvariabler: o landkoden av type String: landets landkode o ibanlengden av type int: landets ibanlengde Lag en passende konstruktør. Du trenger ikke å kontrollere konstruktørens argumenter. Eksempel 1 fortsatt: For Norge er landkoden lik "NO" og ibanlengden lik 15. Eksempel 2 fortsatt: For Nederland er landkoden lik "NL" og ibanlengden lik 18. b) Lag to NasjonalIbankalkulator-metoder private static boolean erbokstav(char tegn) private static boolean ersiffer(char tegn) Hvis tegn er en av bokstavene A, B,, Z, skal erbokstav() returnere true, ellers false. Hvis tegn er et av sifrene 0, 1,, 9, skal ersiffer() returnere true, ellers false. 4

c) Lag en NasjonalIbankalkulator-metode private boolean krav1eroppfylt(string streng) Hvis streng oppfyller krav 1 i dette landet, skal metoden returnere true, ellers false. d) Lag en NasjonalIbankalkulator-metode private static boolean krav2eroppfylt(string streng) Hvis streng oppfyller krav 2, skal metoden returnere true, ellers false. Modulus-97-testen på en streng foretas som følger: 1. Flytt de fire første tegnene bakerst i strengen. 2. Erstatt hver bokstav i strengen med to sifre: A erstattes med 10, B med 11,..., Z med 35. 3. Tolk strengen som et tall, og regn ut resten når du deler tallet på 97. Hvis resten er lik 1, passerer strengen modulus-97-testen, ellers ikke. Eksempel 1 fortsatt: Vi foretar modulus-97-testen på "NO4330002275321": 1. Ved å flytte de fire første tegnene bakerst får vi "30002275321NO43". 2. Ved å erstatte N med 23 og O med 24 får vi "30002275321232443". 3. 30002275321232443 % 97 er lik 1. Så "NO4330002275321" passerer testen. Se bort fra følgende potensielle problemer med modulus-97-testen: - Strengen i punkt 3 kan begynne med sifferet 0. - I virkeligheten er ofte tallene i punkt 3 for store for Javas heltallstyper. e) Lag en NasjonalIbankalkulator-metode private static boolean krav3eroppfylt(string streng) Hvis streng oppfyller krav 3, skal metoden returnere true, ellers false. f) Lag en NasjonalIbankalkulator-metode public boolean gyldigiban(string streng) Hvis streng er et gyldig iban, skal metoden returnere true, ellers false. Vi gjør et iban lettere å lese ved å dele det i grupper på fire tegn med mellomrom (altså tegnet ʹ ʹ) imellom. Eventuelle overskytende tegn utgjør en mindre gruppe bakerst. g) Lag en NasjonalIbankalkulator-metode public static String finngruppert(string streng) som returnerer streng delt i grupper på fire tegn, som nettopp beskrevet. Eksempel 1 fortsatt: La streng være "NO4330002275321". Metoden skal returnere "NO43 3000 2275 321". 5

Vedlegg: Klassen java.lang.string Klassen benyttes til å håndtere strenger. Klassen er immutabel. Alle metoder med returtype String returnerer en referanse til et nytt objekt av denne klassen. Konstruktør: public String(String tekst) Metoder: public char charat(int indeks) Metoden returnerer tegnet på den gitte posisjonen (indeksen). Posisjonene nummereres fra og med 0. Hvis indeks er negativ eller større eller lik lengden på strengen, kastes unntaket IndexOutOfBoundsException. public int indexof(int tegn) public int indexof(int tegn, int fraindeks) public int indexof(string deltekst) public int indexof(string deltekst, int fraindeks) Metodene brukes til å søke etter et enkelt tegn eller en deltekst i strengen. Datatypen til parameteren tegn er int; du kan likevel sende inn et vanlig tegn (datatypen char) som argument. Metodene returnerer posisjonen til tegnet eller posisjonen til begynnelsen av delteksten. Dersom tegnet eller delteksten ikke eksisterer, returnerer metodene -1. Første posisjon i strengen har nummer 0. To av metodene tar fraindeks som argument; det gjør det mulig å begynne søket på en annen posisjon (indeks) enn 0. Dersom fraindeks er mindre enn 0, begynner søket i begynnelsen av strengen. Dersom fraindeks er større enn strengens lengde - 1, returneres -1. Dersom deltekst er lik null, kastes unntaket NullPointerException. public int length() Metoden returnerer antall tegn som strengen består av, inkludert alle blanke. public String substring(int startindeks) public String substring(int startindeks, int sluttindeks) Metodene returnerer en del av strengen. Den første metoden returnerer hele strengen fra og med startindeks, mens den andre returnerer strengen fra og med posisjon startindeks til og med posisjon (sluttindeks - 1). Ugyldige argumentverdier (eksempel: sluttindeks større enn strengens lengde) kaster unntaket IndexOutOfBoundsException. public String replace(char gmltegn, char nytttegn) Metoden returnerer en streng der alle forekomster av et bestemt tegn (første parameter) er erstattet med et annet tegn (andre parameter). public boolean startswith(string prefiks) Metoden tester om strengen starter med prefiks. Metoden returnerer true hvis prefiks er en delstreng av strengen fra og med posisjon 0, false ellers. public static String valueof(int tall) Metoden omformer heltallet tall til en streng og returnerer denne strengen. public String trim() Metoden returnerer en streng som er lik den opprinnelige strengen, men der blanke tegn i begynnelsen og i slutten av strengen er fjernet. Blanke tegn midt i strengen er beholdt. Med blanke tegn menes ikke bare tegnet ' ', men også en del andre usynlige tegn som for eksempel linjeskift og tabulatorer. public boolean equals(object detandreobjektet) Metoden returnerer true dersom strengene er like, ellers false. Metoden returnerer false også dersom detandreobjektet er null eller tilhører en annen klasse enn String. Metoden fungerer for æ, ø og å. 6