PRØVEEKSAMEN (rettet versjon 27/11)

Like dokumenter
PRØVEEKSAMEN (rettet versjon 27/11)

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

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

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

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 (Uke 14) Resten av eksamen H03 + del av V05

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Det matematisk-naturvitenskapelige fakultet

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

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

INF1000: Forelesning 7. Konstruktører Static

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

Gjennomgang av en tenkt eksamensoppgave

UNIVERSITETET I OSLO

Forelesning inf Java 4

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

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

Gjennomgang av en tenkt eksamensoppgave

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

Oblig4 - forklaringer. Arne og Ole Christian

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Løsningsforslag INF desember 2007

INF1000: Forelesning 7

UNIVERSITETET I OSLO

INF1000: Forelesning 6. Klasser og objekter del 1

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Dagens tema Kapittel 8: Objekter og klasser

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

Løsningsforslag til eksamen i INF1000 våren 2006

Repetisjon. INF gruppe 13

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

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; }

To måter å programmere på. Java 12. Programmering med objekter. Statisk programmering

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

Gjennomgang av eksamen H99

INF1000 : Forelesning 4

Endret litt som ukeoppgave i INF1010 våren 2004

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

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

Løsningsforslag, inf101, våren 2001

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

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

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

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

Forelesning inf Java 5

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

Forelesning inf Java 5

Oblig4 - forklaringer. Arne og Ole Christian

UNIVERSITETET I OSLO

Inf1000 (Uke 10) Oppgaveløsning. Hashmap

Oppgave 1 - Kortsvarsoppgave. INF1000 eksamen V05. Oppgave 1 (c) Oppgave 1 (b) Svar: a = 9, b=10

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

Hva er en metode. Hva skjer når vi kaller en metode

Transkript:

PRØVEEKSAMEN (rettet versjon 27/11) Eksamen i : INF1000 Grunnkurs i objektorientert programmering Eksamensdag : Onsdag 26 nov. 2003 Tid for eksamen : 1400-1700 Oppgavesettet er på : 13 sider Vedlegg : intet Tillatte hjelpemidler : Alle trykte og skrevne Les gjennom hele oppgaven før du begynner å løse oppgaven. Kontroller 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. Endel av spørsmålene er flervalgsoppgaver. Sett da kryss for alle riktige alternativer. På disse oppgavene får du poeng etter hvor mange avkrysningbokser som stemmer overens med fasiten (dvs som har kryss når fasitsvaret er kryss og som står tomme når fasitsvaret er at det skal stå tomt). Hvis du har satt et kryss i en avkrysningsboks og etterpå finner ut at du ikke ønsket et kryss der, kan du skrive "FJERN" like til venstre for 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 (Merk: dette punktet kan du se bort fra nå under prøveeksamen det gjelder under den ordentlige eksamenen 5. desember, hvor du må skrive på gjennomslagspapir). Oppgave A (forslag til tidsbruk: 45 min 60 min) 1) Anta at følgende deklarasjoner utføres: int i = 0; int j = i; Hva gjelder like etterpå? Variabelen i har verdien 0 Variabelen j har verdien 0 Variablene i og j er blitt til samme variabel Vi har j > i 1

2) Anta at følgende deklarasjon utføres: int antall = 3; og at vi deretter utfører en av alternativene nedenfor. Kryss av de alternativene som vil føre til at variabelen antall får verdien 5: ++antall; ++antall; antall++; antall++; antall += 2; antall += antall + 2; antall = (int) (3.5 + antall/2); antall = 4 + antall/2; 3) Anta at følgende setninger utføres: int i = 5; int j = i--; i = j + i; Hva er verdien til variabelen i like etter at setningene over er utført? Svar:...9... 4) Anta at følgende kodelinjer utføres: boolean b; int i = 13; int j = 12; int k = 200; b = k < i*j && i == (j+1) i == 14; Hva er verdien til variabelen b rett etterpå? true i*j k false 13 5) Vi har følgende programsetninger: int j = 0; for (int i = 0; j < 777; i++) { j = i; System.out.println( Eksamen ); Hvor mange ganger skrives Eksamen ut i løkken ovenfor? Svar:...778... (fordi j == 0 de to første gangene løkka går, så 1,2,...776 2

6) Anta at følgende setninger er utført: int [] a = new int[77]; int stind =0 int i = 0; int j; Hvilke av alternativene nedenfor finner indeksen til det største elementet i arrayen a og legger denne indeksen inn i variabelen stind: while (a[i] > 0) { stind = a[i++]; for (i = 0; i < a[i].length; i++) { if (j < a[i]) { j = a[i]; stind = i; while (a[i++] < a.length) { if (stind > i) { stind =a[i]; while (i < a.length) { if(a[i++] > a[stind]) { stind = i-1; for (i = 0; i < a.length; ++i) { if(a[stind] > a[i]) { stind = a[i]; for (i = 0; i < a.length; i = i) { stind = stind + a[i++]; 7) Anta at filen ButikkMain.java inneholder et program med bl.a. klassene ButikkMain, Butikk og PrisKategori. Følgende programsetninger befinner seg i en metode i klassen Butikk: PrisKategori pk = new PrisKategori(); pk.init( A, 12.50); Nedenfor er noen mulige deklarasjoner av metoden init i klassen PrisKategori. Vi konsentrerer oss her kun om første linje i metodedeklarasjonen (=metode-hodet), ikke om innholdet i metodene. Kryss av de alternativene som gjør at kallet ovenfor er syntaktisk korrekt: private void init(string kategori, double pris) {... protected void init(string kategori, double pris) {... void init(char kategori, double pris) {... static void init(string kategori, double pris) {... boolean init(string varenavn, double pris) {... 3

8) Vi har følgende programsetninger: int i = 9; int j = 8; int d = 99; String s = 9 ; if (j >= i s.equals( +(j+1))) { System.out.println( A ); else { if (j == i 1) { System.out.println( B ); else { System.out.println( C ); Hva blir skrevet ut ovenfor? A B C AB AC 9) Anta at vi har deklarert følgende klasse;: class Oppg9{ static int s = 99; static void giverdi(int k, int p) { k++; p = s; s = k + 2; public static void main (String[] args){ int s = 13; int k = 14; giverdi(s-2,13); System.out.println( Nå er s = + s); Hva skrives ut i den siste setningen i main? Nå er s = s Nå er s = 0 Nå er s = 13 Nå er s = 14 Nå er s = 15 4

Nå er s = 16 Nå er s = k 10) Anta at vi har følgende program: class Person { private static String navn = ""; Person (String navn) { this.navn = navn; String fånavn() {return navn; class Oppgave { public static void main (String [] args) { Person s = new Person("Grete"); Person p = new Person("Jens"); System.out.println(s.fåNavn() + + p.fånavn()); Hva skriver programmet ovenfor ut på skjermen? Svar:... Jens Jens... 11) Vi har følgende programkode: class Test { int i = 99; int a(int i) {this.i = i; return b(i*2)+ 2; int b(int i) {i = c(i+1); return i; int c(int k) {return i+k; public static void main (String [] args) { int k = new Test().a(2); System.out.println( Verdi: + k); Hva blir utskriften fra programmet ovenfor? Verdi: 2 Verdi: 9 Verdi: 12 Verdi: 24 Verdi: 25 Ingenting programmet vil ikke kompilere 5

Oppgave B (forslag til tidsbruk: 2t 2t 15 min) 1) Metoden finnmax nedenfor skal returnere med verdien av det største elementet i arrayen a, hvor a kan antas å inneholde minst en verdi (dvs lengden av a er positiv). Skriv ferdig metoden. double finnmax (double [] a) { double max = a[0]; for (int i = 1; i < a.length; i++) { if (a[i] > max) max = a[i]; return max; 2) Petter har tenkt å lage en spørreundersøkelse om hvor fornøyde studentene har vært med første semester på Blindern. For å gjøre en grundig undersøkelse, ønsker han å finne ut om studenter med ulik bakgrunn har ulike oppfatninger om undervisningen. I tillegg til spørsmålene om hvordan de synes undervisningen har vært, tenker han å registrere følgende opplysninger om hver av de som er med på spørreundersøkelsen: brukernavn, adresse, fødselsnummer (11 siffer), telefonnummer, statsborgerskap, yrke og sivil stand (ugift/gift/samboer), forelder/ikke forelder, gjeld til lånekassa og hva man stemte ved siste valg. Vil et register med ovenstående opplysninger om førstesemester-studentene kreve konsesjon? Nei Ja, på grunn av følgende paragrafer i loven om personvern:.. 8 (og 11) En del av opplysningene er ikke relevante for formålet( eks. telefonnummer), 12 bruk av fødselsnummer (trenger ikke sikker identifisering av de som svarer) 9 Bruk av sensitive persondata (statsborgerskap, sivil stand, stemme siste valg) Det holder å nevne bruk av Mer enn nødvendig informasjon og Sensitive persondata, og kan gi eksempel på hver av disse.. 6

3) Nedenfor finner du et uferdig program: class Tomter { public static void main(string[] args) { // Opprett en ny tomt med 212 som gårdsnummer, 33 som bruksnummer, // og med angitt adresse og eier: Tomt s1 = new Tomt(212, 33, "Eriks vei 3", "Per Jensen"); // Opprett en ny tomt med 342 som gårdsnummer, 22 som bruksnummer, og med // adresse og eier begge satt til IKKE REGISTRERT : Tomt s2 = new Tomt(342, 22); class Tomt { String eier; String adresse; int gårdsnummer; int bruksnummer; // Her skal du føye til noe Skriv den programkoden som må føyes til klassen Tomt for at instruksjonene i main-metoden skal fungere slik kommentarene i programmet angir: Tomt (int gnr, int bnr, String adr, String navn) { gårdsnummer = gnr; bruksnummer = bnr; eier = navn; adresse = adr; Tomt (int gnr, int bnr) { gårdsnummer = gnr; bruksnummer = bnr; eier = "IKKE REGISTRERT"; adresse = "IKKE REGISTRERT"; 7

4) Betrakt følgende uferdige program: import easyio; import java.util.*; class MittRegister { public static void main (String [] args) { Register reg = new Register(); reg.ordreløkke(); class Register { private HashMap biler = new HashMap(); void ordreløkke() {... void legginnbil() { // Les inn reg.nr, eier og reg.år fra terminal, opprett nytt Bil-objekt og legg // objektet inn i HashMapen biler. void tautbil() { // Les inn reg.nr fra terminal og fjern objektet med dette reg.nr fra HashMapen // biler, eller gi feilmelding hvis ingen slik bil finnes i registeret. void skrivallebiler(string filnavn) { // Skriv ut all info om alle biler til en fil med angitt filnavn class Bil private String regnr; private String eier; private int regår; // Registreringsnr, f.eks. AX25333 // Navn på eier // Hvilket år bilen ble registrert private static Out skjerm = new Out(); Bil(String regnr, String eier, int regår) { this.regnr = regnr; this.eier = eier; this.regår = regår; void skrivut() { skjerm.outln( Registreringsnr: + regnr); skjerm.outln( Eier: + eier); skjerm.outln( Registringsår: + regår); void skrivut(out s) { s.outln( Registreringsnr: + regnr); s.outln( Eier: + eier); s.outln( Registringsår: + regår); Du skal i denne oppgaven skrive ferdig en del av programmet ovenfor. Se neste side. 8

4-A) Skriv metoden legginnbil() void legginnbil() { // Les inn reg.nr, eier og reg.år fra terminal, opprett // nytt Bil-objekt og legg // objektet inn i HashMapen biler. In s = new In(); System.out.print("Gi Reg.nummer:"); String num = s.inword("\n"); System.out.print("Gi Reg.eier:"); String eier = s.inword("\n"); System.out.print("Gi regår:"); int aar = s.inint(); Bil b = new Bil(num,eier,aar); biler.put(num,b); // bruker regnum som nøkkel 4-B) Skriv metoden tautbil() void tautbil() { // Les inn reg.nr fra terminal og fjern objektet med dette reg.nr fra HashMapen // biler, eller gi feilmelding hvis ingen slik bil finnes i registeret. In s = new In(); System.out.print("Gi Reg.nummer:"); String num = s.inword("\n"); if (biler.containskey(num) ){ biler.remove(num); System.out.println("Bil med reg-num:" + num+ " fjernet"); else{ System.out.println("Bil med reg-num:" + num+ " finnes ikke"); 9

4-C) Skriv metoden skrivallebiler(string filnavn): void skrivallebiler(string filnavn) { // Skriv ut all info om alle biler til en fil med angitt filnavn Out ut = new Out(filnavn); Iterator i = biler.values().iterator(); while (i.hasnext()) { Bil b = (Bil) i.next(); b.skrivut(ut); ut.close(); 5) Du har følgende problemstilling: Et kurs (beskrevet med en kurskode, antall studenter og antall studiepoeng), har flere studenter (hver beskrevet med navn og studentnummer). Begrepene Kurs og Student representeres her naturlig med hver sin klasse. 5-A) Tegn et UML klassediagram med antall på forholdet mellom disse klassene. 5-B) Nedenfor er en skisse til et lite program som inneholder de to klassene diskutert ovenfor, i tillegg til en klasse med en main-metode: import easyio.*; import java.util.*; class Studenter { public static void main (String [] args) { Kurs k = new Kurs( INF1000, 10, studenter.txt ); class Kurs { 10

String kurskode; int antstud; int studpoeng; HashMap studenter = new HashMap(); Kurs(String navn, int spoeng, String fil) { studpoeng = spoeng; kurskode = navn; In s = new In(fil); while (!s.lastitem()) { String studnum = s.inword(); s.inint(); // skip forbi antall forsøk s.skipwhite(); String n = s.inword("\n"); Student stud = new Student(navn, studnum); studenter.put(studnum, stud); class Student { String navn; String studnum; Student(String navn, String snum) { this.navn=navn; studnum = snum; Skriv ferdig klassene Kurs og Student. Kurs-klassen skal i tillegg til de objektvariablene som er nevnt tidligere (kurskode, antall studenter og antall studiepoeng) inneholde en HashMap studenter som holder rede på alle studentene som tar kurset. Idet et Kurs-objekt opprettes skal alle objektvariablene få verdier, og HashMapen studenter skal også fylles opp med informasjon om alle studentene som følger kurset. Informasjon om studenter skal leses fra filen med navnet som oppgis når Kurs-objektet opprettes. Hver linje i filen inneholder informasjon om en enkelt student og består av (1) et studentnummer; (2) hvor mange ganger studenten har vært meldt opp i kurset før; og (3) studentens navn. Opplysning (2) er ikke relevant for vårt formål og skal ikke tas vare på. Her er et eksempel på starten av en slik fil (antall studenter som det er informasjon om i filen er ikke kjent på forhånd): Filen studenter.txt: 345653 0 Petter Jensen 363322 0 Arne Hansen 366444 2 Kari Olsen 842234 0 Varg Veum... osv... 11

Merk: det er ikke meningen at du skal lage noen ordreløkke eller på annen måte utvide programmets funksjonalitet ut over det som det direkte bes om ovenfor. 6) Anta at vi har behov for å lagre mange objekter av klassen Person, med personens fødselsnummer (en tekststreng) som nøkkel. Vi kunne brukt en HashMap til dette formål, men her skal vi se hvordan vi kunne laget vår egen variant av klassen HashMap ved bruk av arrayer. import easyio.*; import java.util.*; class PersonTabell { private String [] nøkler; private Person [] personer; private int antall; PersonTabell(int maxantall) { personer = new Person[maxAntall]; nøkler = new String[maxAntall]; antall = 0; void put(string nøkkel, Person p) { // Legg inn (nøkkel, p) i tabellen if (antall < personer.length) { personer[antall] = p; nøkler[antall++] = nøkkel; Person get(string nøkkel) { // Returner med peker til Person-objektet som ble lagt inn // med den gitte nøkkelen Person p = null; for (int ind = 0; ind < antall; ind ++) { if (nøkler[ind].equals(nøkkel)) { p = personer[ind]; ind = antall; return p; Person [] getallvalues() { // Returner med arrayen av Person-pekere, men bare // den delen av arrayen som er fylt opp med Person-pekere Person [] p = new Person[antall]; for (int i =0; i < antall; i++) p[i] = personer [i]; return p; boolean containskey(string nøkkel) { 12

// Returner med true hvis nøkkelen ligger i arrayen nøkler // og med false ellers. boolean funnet = false; int i = 0; while (! funnet && i < antall) { if (nøkler[i].equals(nøkkel)) { funnet = true; else{ i++; return funnet; class Person { String navn; 13