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

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

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

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

PRØVEEKSAMEN (rettet versjon 27/11)

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

PRØVEEKSAMEN (rettet versjon 27/11)

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

UNIVERSITETET I OSLO

Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

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

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Gjennomgang av eksamen H99

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

UNIVERSITETET I OSLO

Gjennomgang av en tenkt eksamensoppgave

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

Gjennomgang av en tenkt eksamensoppgave

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

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

UNIVERSITETET I OSLO

Oblig4 - forklaringer. Arne og Ole Christian

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Forelesning inf Java 5

Forelesning inf Java 5

Blokker og metoder INF1000 (Uke 6) Metoder

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

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

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 prøveeksamen oppgave 1, 2, 4, 5, 7

UNIVERSITETET I OSLO

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

Endret litt som ukeoppgave i INF1010 våren 2004

Forelesning inf Java 4

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

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

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

EKSAMEN I EMNET INF100/INF100-F Grunnkurs i programmering (Programmering 1) Fredag 16. desember 2005 Tid: 09:00 14:00

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

Repetisjon. INF gruppe 13

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

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

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

UNIVERSITETET I OSLO

Dagens tema Kapittel 8: Objekter og klasser

INF1000 (Uke 6) Mer om metoder, tekster

Hva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

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

INF1000 Forelesning 8. Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem?

Transkript:

FASIT UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler : 11 sider Ingen 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. 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. Oppgave 1 Er disse programsetningene lovlige i Java? JA NEI int x = 3.14; int y = 7 / 2; int z = z + 15; double[] x = {4; char c = "c"; String s = 35 + "35"; String[] navn = new String[356][343]; int[][] a = new int[12][]; int[3][5] a = new int[3][5];

Oppgave 2 Hvor mange ganger blir INF1000 skrevet ut på skjermen? a) for (int i=0; i<=100; i++) { Svar:..101... ganger 2 b) for (int i=0; i<100; i++) { for (int j=0; j<=20; j++) { Svar:...2100... ganger c) for (int i=0; i<10; i++) { for (int j=i; j<10; j++) { Svar:...55... ganger d) int teller = 0; do { int k = ++teller; teller += ++k; while (teller < 10); Svar:...3... ganger e) int teller = 0; while (teller*teller / (7 + teller) == 0) { teller++; Svar:...4... ganger ( N.B Manglet en { etter while(..) ) Oppgave 3 Anta at følgende kodelinjer utføres: String s = "konteeksamen"; String t = s.substring(5,8); int pos = t.indexof("eks"); Hva er verdien til variabelen pos rett etterpå? Svar:...0...

3 Oppgave 4 Skriv ferdig metoden under, som med utgangspunkt i et positivt heltall (gitt i heltallsparameteren tall) skal beregne og returnere antall siffer i heltallet. Dermed skal f.eks. kallet finnantallsiffer(6342) returnere med verdien 4, mens kallet finnantallsiffer(2) skal returnere med verdien 1. Svar: int finnantallsiffer(int tall) { // enten denne: String s = +tall; if (tall == 0) return 0 else return s.lenth(); // eller denne: int antsiffer =0; while (tall > 0) { antsiffer++; tall = tall/10; return antsiffer; Oppgave 5 Anta at følgende setninger utføres: int verdi = 0; for (int i=0; i<5; i++) { verdi = i + verdi; for (int i=0; i<5; i++) { verdi = i - verdi; System.out.println("Verdien er: " + verdi); Hva skrives ut på skjermen? Svar:...Verdier er: -8...

Oppgave 6 Følgende arrayer er deklarert i en metode i et program: int[] a = new int[50]; int[] b = new int[50]; 4 Anta at arrayene a og b allerede er fylt opp med verdier som er lest fra en fil, slik at vi tilsammen har 100 heltallsverdier. Vi ønsker å finne den største av alle disse 100 verdiene og legge denne maksimalverdien inn i en heltallsvariabel max. Vil alternativene under alltid føre til at max får denne maksimalverdien? JA NEI int max = 0; for (int i=0; i<50; i++) { if (a[i] > b[i] && b[i] > max) { max = a[i]; else { max = b[i]; int max = 0; for (int i=0; i<50; i++) { if (a[i] > max) { max = a[i]; else if (b[i] > max) { max = b[i]; int max = 0; for (int i=0; i<50; i++) { if (a[i] > max) { max = a[i]; if (b[i] > max) { max = b[i]; int max = 0; for (int i=0; i<50; i++) { if (a[i] > max b[i] > max) { if (a[i] > b[i]) { max = a[i]; else { max = b[i];

Oppgave 7 Anta at følgende array er deklarert i en metode i et program: int[] a = new int[100]; 5 Anta videre at arrayen a er fylt opp med verdier, og at verdien 14 forekommer nøyaktig en gang i arrayen. Vil alternativene under alltid gi som resultat at variabelen antall inneholder antall elementer i a som er større enn 14? JA NEI while (k < a.length && a[k] > 14) { k++; antall++; stopper hvis a[k] <= 14 while (k < a.length a[k] > 14) { antall++; k++; finner bl.a alt for mange, boolean funnet = false; while (k < a.length &&!funnet) { if (a[k] > 14) { funnet = true; k++; finner ikke alle > 14 do { if (a[k] > 14) { antall++; k++; while (a[k] < a.length); helt gal while-test while (k < a.length) { int i = k; while (a[i] > 14) { antall++; i++; Går galt hvis siste element er >14 k = i + 1; Oppgave 8 På neste side er det gitt et uferdig program hvor du skal fylle inn programkode som angitt under. Merk: du skal ikke utvide klassen med andre objektvariable eller klassevariable enn de som er gitt nedenfor.

6 Lag først en konstruktør til klassen Bil der hvor det er satt av plass til dette. Konstruktøren skal ha bilens registreringsnummer og bilens vekt (i kg) som parametre, og skal legge disse verdiene inn i de tilsvarende objektvariablene. Skriv deretter på angitt plass en objektmetode storvekt uten noen parametre som avgjør om bilens vekt overstiger 1500 kg og som returnerer resultatet som en boolsk verdi (true hvis vekten overstiger 1500 kg, og false ellers). Skriv så programkode i main-metoden som oppretter to Bil-objekter, ett med registreringsnummer "A22553" og vekt 950 kg, og ett med registringsnummer "U12345" og vekt 1550 kg. Fra main-metoden skal du så kalle på metoden storvekt i hver av Bilobjektene og skrive ut svaret som returneres på skjermen. class Bil { private String regnr; // bilens registreringsnummer private int vekt; // bilens vekt (i kg) // skriv konstruktør her Bil( String regnr, int vekt) { this.regnr = regnr; this.vekt = vekt; // skriv objektmetoden storvekt her boolean storvekt() { return vekt > 1500; // end class Bil class BilTest { public static void main ( String[] args) { // skriv kode her som oppretter to Bil-objekter og // skriver ut om de overstiger 1500 kg. Bil b1 = new Bil("A22553",950), b2 = new Bil ("U12345", 1550); System,out.println( Bil 1 er tung : + b1.storvekt()); System,out.println( Bil 2 er tung : + b2.storvekt()); // end main // end class BilTest

7 Oppgave 9 På en universitet finnes det 9 fakulteter som hver igjen består av en eller flere institutter. Hvert institutt består så av fra 2 til 14 forskningsgrupper, hver igjen med fra 2 til 10 vitenskapentlige ansatte. Tegn et UML-klassediagram med de 5 (Java-)klassene som kan brukes til å representere dette problemet. Gi navn på disse klassene og plasser antall på forholdet mellom disse klassene. Svar: Universitet finnes 1 9 Fakultet består av består av 1 1:* Institutt 1 1..* Forskningsgruppe med 1 1..* Vit.ansatt Oppgave 10 Anta at følgende program utføres: class Element { Element neste; static int antallelementer; Element(int k) { antallelementer++; if (k > 0) { neste = new Element(k-1); else { neste = null; public static void main(string[] args) { antallelementer = 0; Element e1 = new Element(4); System.out.println( 1) + antallelementer); Element e2 = new Element(6); System.out.println( 2) + antallelementer); Tegn først opp for deg selv og finn ut hvor mange objekter av klassen Element vi får laget av de ulike setningene i main. Svar så på spørsmålet: hva skriver programmet ut på skjermen? Svar:...1) 5 2) 12.. (den lager 7 Element-objekter andre gang)...

8 Oppgave 11 Anta at vi har en tekstfil Sensur-INF1000-H01.txt som inneholder resultatene fra sensuren i INF1000 høsten 2001. Filen består av en linje for hver kandidat som tok eksamen. Hver linje består av et kandidatnummer (et heltall) og en karakter (en bokstav) atskilt av blanke tegn. Her ser vi de fem første linjene i filen (hele filen består av flere hundre linjer): 29 A 30 F 31 B 32 F 33 C Vi har også en tekstfil Kandidatnummer-INF1000-H01.txt som inneholder kandidatnummere og tilhørende studentnummere for de samme studentene som i den første filen ovenfor. Her er et eksempel på fire linjer fra denne fila (første tallet på hver linje er et kandidatnummer, og siste tallet er studentnummeret til samme student): 32 123453 29 433213 31 387635 30 111321 Antall linjer i denne filen er naturligvis det samme som antall linjer i den første filen, siden det er de samme studentene det er informasjon om. Merk at den siste filen ikke er sortert etter kandidatnummeret eller studentnummeret. Du skal nå lage et komplett, kompilerbart program som løser to problemer. I punkt a) nedenfor skal du bruke HashMap til å løse problemet, mens det i punkt b) er valgfritt om du benytter array eller HashMap. Merk: det er ikke nødvendig å programmere noen kommandoløkke. Når programmet startes skal det løse de to angitte problemene a) og b) nedenfor uten å spørre brukeren om noe, og deretter skal programmet avslutte. a) Du skal lage en ny fil Kandidat-sensur-INF1000-H01.txt som kombinerer informasjon fra de to filene nevnt ovenfor. Filen du skal lage skal inneholde en linje for hver av studentene som tok eksamen i INF1000 høsten 2001. Hver linje skal inneholde to opplysninger: kandidatens studentnummer og kandidatens karakter (atskilt av blanke tegn). Her er et eksempel som viser hvordan tre av linjene i denne filen kan se ut (denne fila er heller ikke sortert etter studentnummeret eller karakteren): 433213 A 111321 F 387635 B b) Du skal skrive programkode som finner ut hvor mange (antallet) som har fått de ulike karakterene A, B, C, D, E og F. Du skal også regne ut prosentandelen av kandidatene som strøk (dvs fikk karakteren F). Skriv programmet på de neste sidene.

Svar: 9 import easyio.*; import java.util.*; class Sensur { public static void main(string[] args) { HashMap k = new HashMap(); int [] stat = new int[6]; In kar = new In("Sensur-INF1000-H01.txt"); while (! kar.lastitem()) { int num = kar.inint(); String ks = ""+num; kar.skipwhite(); char ka = kar.inchar(); stat[ka -'A']++; Character cc = new Character(ka); k.put(ks,cc); In kand = new In("Kandidatnummer-INF1000-H01.txt"); Out sensur = new Out("Kandidat-sensur-INF1000-H01.txt"); while(! kand.lastitem()) { int knum = kand.inint(), studnum= kand.inint(); String kands = ""+knum; Character karakter = (Character) k.get(kands); sensur.outln(studnum + " " + karakter.tostring()); sensur.close(); for (int i = 0; i < 6; i++ ) { System.out.println("Antallet som fikk " + (char)('a'+i) +" er" + stat[i]); System.out.println("Strykprosenten er: " + (stat[5]*100.0/k.size()) +"%");