UNIVERSITETET I OSLO



Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

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

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

UNIVERSITETET I OSLO

INF1000 Metoder. Marit Nybakken 16. februar 2004

Løsningsforslag INF desember 2007

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TOD063 Datastrukturer og algoritmer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 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; }

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

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

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

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

Løsningsforslag til eksamen i INF1000 våren 2006

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

PRØVEEKSAMEN (rettet versjon 27/11)

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

Forelesning inf Java 5

Forelesning inf Java 5

PRØVEEKSAMEN (rettet versjon 27/11)

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

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

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

INF1000: noen avsluttende ord

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

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

Repetisjon. INF gruppe 13

INF1000: Forelesning 7

HØGSKOLEN I SØR-TRØNDELAG

Oppgave 3: Binær representasjon

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

UNIVERSITETET I OSLO

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

Forelesning inf Java 4

Algoritmer og Datastrukturer

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

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

INF1000: Forelesning 7. Konstruktører Static

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

TDT4100 Objektorientert programmering

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

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

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

INF Løsning på seminaropppgaver til uke 8

INF1000 Behandling av tekster

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.

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

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

Løse reelle problemer

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

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF1000 : Forelesning 4

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

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

UNIVERSITETET I OSLO

Transkript:

Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet er på 17 side(r), med 13 oppgaver Vedlegg: Ingen Tillatte hjelpemidler: Alle trykte og skrevne Les nøye gjennom hver oppgave før du løser den. For hver oppgave er angitt det maksimale antall poeng du kan få hvis du svarer helt riktig. Summen av poengene er 240, slik at 1 poeng tilsvarer 1 minutt av eksamenstiden. Pass på at du bruker tiden din riktig. Kontroller også at oppgavesettet er komplett før du begynner å besvare det. Dersom du savner opplysninger i oppgaven, kan du selv legge dine egne forutsetninger til grunn og gjøre rimelige antagelser, så lenge de ikke bryter med oppgavens "ånd". Gjør i så fall rede for forutsetningene og antagelsene du gjør. Dine svar skal skrives på disse oppgavearkene, og ikke på separate ark. Dette gjelder både spørsmål med avkrysningssvar og spørsmål hvor du bes om å skrive programkode. I de oppgavene hvor det skal skrives programkode, anbefales det at du først skriver en kladd på eget ark før du fører svaret inn i disse oppgavearkene på avsatt plass. Noen av spørsmålene er flervalgsoppgaver. På disse oppgavene får du poeng etter hvor mange korrekte svar du gir. Du får ikke poeng hvis du lar være å besvare et spørsmål, eller dersom du krysser av begge svaralternativer. Hvis du har satt et kryss i en avkrysningsboks og etterpå finner ut at du ikke ønsket å krysse av der, kan du skrive "FEIL" like til venstre for den aktuelle avkrysningsboksen. Husk å skrive såpass hardt at besvarelsen blir mulig å lese på alle gjennomslagsarkene, men ikke legg andre deler av eksamensoppgaven under når du skriver. Oppgave 1 (1 poeng) Hvor mange char-verdier er det plass til i arrayen tegn? char [][] tegn = new char [5][2]; Svar: 10

Side 2 Oppgave 2 (9 poeng) Er disse programsetningene lovlige i Java? JA NEI int tall = null; int x = new int [5]; boolean[]s = new s[8]; int i =1, j= i/3 i ; String char = INF1000 ; int [] x2 = new double [2]; double [][] XX = 1.23; String[] s = { opp, ned ; double [] x = new double{1.0, 2.0, 3.0, 4.0; int[][] a, [][]b; Oppgave 3 (12 poeng) Hva skrives ut i hvert av programeksemplene nedenfor? 3a) String s; if (true) { s = "Per"; else { s= "Pål"; System.out.println (s); Svar: Per 3b) int tall = 5; if (! (tall < 10)) { System.out.println (tall); else { System.out.println (tall + tall); Svar: 10

Side 3 3c) tall = 0; System.out.println (--tall); System.out.println (tall++); System.out.println (tall); Svar: -1-1 0 3d) int tall = 0; tall = tall-- + tall++; System.out.println (tall); Svar: -1 Oppgave 4 (4 poeng) Hva skrives ut, evt hvor mange ganger, i programeksempelet nedenfor? String t = "INF1000"; for (int i = 0; i < t.length(); i++) { String u = ""; for (int j = t.length(); j > i; j--) { u = t.charat(j-1) + u; u = t.substring (0,i) + u; System.out.println (u); Svar: 7 ganger INF1000.

Side 4 Oppgave 5 (10 poeng) Skriv en metode som tar et antall minutter som parameter, regner om i timer og minutter og skriver ut resultatet på skjermen. void omregning(int min) { int timer = min / 60; int minutter = min % 60; System.out.println(timer + " timer og " + minutter + " minutter"); Oppgave 6 (20 poeng) Skriv en metode som tar en String med et mobilnummer som input. Metoden skal returnere mobilnummeret som en String uten innledende +, og med landkode først. Du kan anta at nummeret i parameteren alltid er 8-sifret, men kan i tillegg inneholde landkode (alltid 2-sifret) med eller uten + foran. Dersom landkode mangler kan du anta at det er et norsk nummer, og legge til 47 først i teksten som returneres. String rettmobil(string mob) { int len = mobil.length(); if (len == 11) { return mobil.substring(1,11); else if (len == 10) { return mobil; else if (len ==8) { return "47" + mobil; else return null;

Side 5 Oppgave 7 (8 poeng) Anta at følgende kodelinjer utføres: String t = "llmmnop"; String u = t.charat (1) + "mmno"; if (t.indexof(u)>0) System.out.println (1); if (t.startswith (u)) System.out.println (2); if (t.endswith (u)) System.out.println (3); Hva skrives ut på skjermen? Svar: 1 Oppgave 8 (8 poeng) Hva returneres fra metodekallet metode (5,4)? int metode (int tall1, int tall2) { int svar = tall1 * tall2; while (svar > tall1) { svar = svar-tall1; return svar; Svar: 5 (alltid tall1) Oppgave 9 (30 poeng) P. Smart har gjennom en årrekke hjulpet et økende antall venner og slektninger med reparasjoner og vedlikehold av deres påhengsmotorer. Etter hvert er det blitt mange motorer og reparasjoner, og han ønsker seg derfor et program som kan holde orden på data om de motorene han har sett på og hva han har foretatt seg med hver enkelt. Du skal hjelpe til med å implementere dette systemet i Java. P. Smart ønsker å bruke klassen Rep, med String-variable hva og dato, og int-variabelen minbrukt til å lagre data om de gangene han har gitt bistand. Datoen lagres som en String på formen aammdd, hva er en tekststreng der han fritt kan beskrive det som er gjort og minbrukt inneholder antall minutter brukt. Du skal skrive klassen Rep med variable og konstruktør der disse variablene er parametre. For enkelt å kunne få oversikt over de gangene han har hjulpet til med bestemte typer problemer, skal du også skrive metoden finnes (String s) i klassen Rep som søker etter stikkord s i variabelen hva.

Side 6 I denne oppgaven kan det være nyttig å bruke String-metodene: int indexof (String s) // søker etter strengen s i denne strengen, returnerer indeks der den ble funnet eller -1 hvis den ikke finnes. Metoden skiller mellom store og små bokstaver. String touppercase() // returnerer en kopi av denne strengen, men med alle små bokstaver gjort om til store. Oppgave 9a) Skriv klassen Rep. Class Rep { String hva; String dato; Int minbrukt; Rep (hva, dato, min) { this.hva = hva; this.dato = dato; minbrukt = min; boolean finnes (String sord) { sord = sord.touppercase(); if (oppgave.touppercase().indexof(sord)!= -1) return true; else return false; Oppgave 9b) P. Smart ønsker en klasse Eier for å holde styr på data om eiere. Foreløpig trenger han bare to variable i klassen: String navn og String mobil. Deklarer klassen Eier med variable og konstruktør med parameter for hver variabel. Mobilnummeret som oppgis skal sjekkes og endres slik at det er i et fast format. Du kan anta at metoden rettmobil() fra oppgave 6) er ferdig deklarert i klassen Eier. class Eier { String navn; String mobil; Eier(String navn, String mobil) { this.navn = navn; this.mobil = rettmobil(mobil);

Side 7 Oppgave 9c) P. Smart har skissert klassen Motor som vist nedenfor. Skriv ferdig metodene i klassen. class Motor { Eier mineier; String merke; int hk; HashMap <String, Rep> utfoert = new HashMap <String, Rep> (); Motor (Eier mineier, String merke, int hk) { this.mineier = mineier; this.merke = merke; this.hk = hk; void nyrep (String hva, String naar, int min) { // Dersom det ikke er registrert noen reparasjon av denne motoren // på gitt dato, opprettes et nytt Rep-objekt. Ellers legges // informasjon om utført arbeid og antall minutter til det // eksisterende. if(!utfoert.containskey(naar)) { Rep nyrep = new Rep(hva, naar, min); utfoert.put(naar, nyrep); else { Rep oppdaterrep = utfoert.get(naar); oppdaterrep.hva += " " + hva; oppdaterrep.minbrukt += min;

Side 8 int beregnantmin () { // Metoden legger sammen reparasjonstiden for alle reparasjoner på // denne motoren, og returnerer dette int totalsum = 0; for (Rep r : utfoert.values()) { totalsum += r.minbrukt; return totalsum; Oppgave 10 (28 poeng) 10a) Testprogram for klassene Rep og Motor Lag et test-program som benytter koden fra oppgave 9 til å gjøre følgende: Opprette ett eier-objekt Opprette ett motor-objekt, med den nyopprettede eieren som eier Registrere 3 reparasjoner på motoren Skrive ut totalt antall timer og minutter brukt på reparasjoner for denne motoren. Du velger selv verdier for variablene i de objektene du oppretter. class TestProgram { public static void main(string[] args) { Eier jeg = new Eier("Bendik", "90686502"); Motor poengs = new Motor(jeg, "Yamaha", 9); 20); poengs.nyrep("klutchen sitter fast.", "240611", 40); poengs.nyrep("klutchen datt av ved levering", "240611", poengs.nyrep("renset for saltvann.", "140611", 20); System.out.print("Tid brukt på reparasjon: "); poengs.omregning(poengs.beregnantmin());

Side 9 10b) UML objektdiagram Lag et UML objektdiagram som viser datastruktur med de objektene du opprettet i testprogrammet i oppg. 10a). Du trenger ikke vise metoder i objektene.

Side 10 Oppgave 11 (80 poeng) Du skal skrive ferdig en første versjon av et system for P. Smart basert på klassene Rep, Motor og Eier fra oppgave 9. Systemet skal inneholde en klasse MotorSystem som holder rede på opptil 100 påhengsmotorer. Flere motorer skal kunne peke til samme eier. Systemet må derfor lete gjennom eksisterende eiere for å sjekke om eieren av en ny motor allerede er registrert på en annen motor, og i så fall la den nye motoren peke til samme objekt. For å sjekke om en eier allerede er registrert ønsker han å bruke eierens mobilnummer, siden han har sikret seg at mobilnumrene er lagret på en uniform måte. Fyll ut metodene nedenfor i klassen MotorSystem, basert på opplysningene ovenfor: Metode lagredata som skriver alle data på fil (du velger selv formatet på filen skilletegn og/ eller antall av for eksempel reparasjoner for en motor) Metode beregntotmin som går gjennom alle reparasjoner i systemet og regner ut antall minutter som er brukt totalt og skriver det ut på skjerm i timer og minutter (bruk metoden omregning fra opggave 5) Konstruktør Motorsystem som bygger opp datastrukturen og leser alle data fra fil. // import-setninger import java.util.hashmap; import easyio.*; class MotorRep { public static void main (String [] args) { final String FILNAVN = motor.txt ; MotorSystem ms = new MotorSystem (FILNAVN); // kall på ordreløkke e.l. dette skal du IKKE skrive // end main() //end class MotorRep class MotorSystem { // deklarasjon av variable skal skrives HashMap<String, Eier> eiere = new HashMap<String, Eier>(); Motor[] motorer = new Motor[100]; int teller; MotorSystem(String filnavn) { // konstruktør - skal skrives this.teller = 0; In innfil = new In(filnavn);

Side 11 /* Fil: navn;mobil;merke;hk 2 hva;naar;min hva;naar;min */ while(!innfil.endoffile()) { Motor nymotor; Eier eier; String enmotor = innfil.readline(); String[] param = enmotor.split(";"); String navn = param[0]; String nummer = param[1]; String merke = param[2]; int hk = Integer.parseInt(param[3]); System.out.println(enMotor); eier = eiere.get(nummer); if(eier == null) { eier = new Eier(navn, nummer); eiere.put(nummer, eier); nymotor = new Motor(eier, merke, hk); // int antrep = Integer.parseInt(innfil.readLine()); System.out.println(antRep); for(int i = 0; i < antrep; i++) { String enrep = innfil.readline(); String[] detaljer = enrep.split(";"); String hva = detaljer[0]; String dato = detaljer[1]; int minbrukt = Integer.parseInt(detaljer[2]); nymotor.nyrep(hva, dato, minbrukt); motorer[teller++] = nymotor; innfil.close();

Side 12 lagredata(string filnavn) { // denne skal skrives Out utfil = new Out(filnavn); for(int i = 0; i < motorer.length; i++) { //Evt i < teller if(motorer[i]!= null) { Motor m = motorer[i]; utfil.outln(m.mineier.navn + ";" + m.mineier.mobil + ";" + m.merke + ";" + m.hk); utfil.outln(m.utfoert.size()); for(rep r : m.utfoert.values()) { utfil.outln(r.hva + ";" + r.dato + ";" + r.minbrukt); utfil.close(); beregntotmin () { // denne skal skrives int sum = 0; for(int i = 0; i < motorer.length; i++) { if(motorer[i]!= null) { sum += motorer[i].beregnantmin(); omregning(sum); // evt hjelpemetoder

Side 13 Oppgave 12 (20 poeng) Universitetet i Langtvekkistan planlegger å lage et system som rapporterer direkte til Studentenes Lånekasse i landet hvilke studenter som ikke har god nok studieprogresjon i forhold til normen hvert semester. De vil for hver slik student sende en epost til Lånekassa om hvor få eksamener disse studentene har tatt, basert på sitt eget studentregister der blant annet eksamensresultater lagres. Disse studentene vil så få redusert lån neste semester. Du skal skrive en vurdering om det er tillatt for Universitetet i Langtvekkistan etter bestemmelsene i Lov om behandling av personopplysninger (de har den samme loven i Langtvekkistan som i Norge) å sende slike beskjeder om studenter som ikke jobber bra nok til Lånekassa. Begrunn svaret med å vise til konkrete paragrafer som du mener er relevante, og hvorfor de er det. Systemet de planlegger rammes ikke av 2 dette er ikke sensitiv informasjon, og Univeristetet i Langtvekkistan har klart lov etter 8: (a) Oppfylle avtale med den registrerte, c) Ivareta den registrertes interesser, og e) å utøve offentlig myndighet) til å samle inn disse data for eksamensformål. Den desidert mest relevante paragrafen her er 11 Grunnkrav til behandling av personopplysninger, og punkt b) og særlig pkt. c): b) bare nyttes til uttrykkelig angitte formål som er saklig begrunnet i den behandlingsansvarliges virksomhet, c) ikke brukes senere til formål som er uforenlig med det opprinnelige formålet med innsamlingen, uten at den registrerte samtykker. Det er rimelig å si at uten at Universitetet søker og får tillatelse av Datatilsynet og dette også offentliggjøres for studenter som tar kurs på Universitetet, så bryter dette foreslåtte systemet punktene b) og c) i 11 og er derfor ikke lovlig. Hvis man vil hevde at dette tenkte systemet er lovlig bør man vise til 8 e) om å utøve offentlig myndighet, men det er nok en noe svakere besvarelse.