INF1000 (Uke 15) Eksamen V 04

Like dokumenter
INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Oppgave 1. Oppgave 2. Oppgave 3. 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 i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

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

Endret litt som ukeoppgave i INF1010 våren 2004

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

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

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

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

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

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

Oblig4 - forklaringer. Arne og Ole Christian

UNIVERSITETET I OSLO

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

Forelesning inf Java 4

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

Blokker og metoder INF1000 (Uke 6) Metoder

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

INF1000 (Uke 6) Mer om metoder, tekster

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

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

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

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

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

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Forelesning inf Java 5

Forelesning inf Java 5

Inf1000 (Uke 10) HashMap og ArrayList

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

INF1000: Forelesning 4. Mer om arrayer Metoder

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

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

INF1000 (Uke 6) Mer om metoder, tekster

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

INF1000 Behandling av tekster

Orakeltjeneste på Abel Hjelp til Obligatorisk oppgave 2. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. Rep: Metoder

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

UNIVERSITETET I OSLO

INF1000 : Forelesning 5

UNIVERSITETET I OSLO

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

Repetisjon INF 1000 våren 2006

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

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

Forelesning inf Java 5

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

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

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

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

INF 1000 høsten 2011 Uke september

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

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

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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Ole Christian Lingjærde, 12. september 2013

Oblig4 - forklaringer. Arne og Ole Christian

Forelesning inf Java 4

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

TOD063 Datastrukturer og algoritmer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

Mål for INF1000. Repetisjon INF 1000 våren Representasjon av data. Programvareutvikling - oversikt

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

UNIVERSITETET I OSLO

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

UNIVERSITETET I OSLO

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

INF1000 : Forelesning 4

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

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

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

Eksempel: Body Mass Index (BMI)

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Transkript:

INF1000 (Uke 15) Eksamen V 04 Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset

22-05-2006 2

22-05-2006 3

22-05-2006 4

Oppgave 1a Vi har et program med følgende setninger: String tre = "3"; System.out.println(tre+4); Hva skrives ut når programmet kjøres? 1. 34 2. 7 3. tre4 4. Ingen av alternativene ovenfor 22-05-2006 5

Oppgave 1b Vi har et program med følgende setninger: int tre = 3; System.out.println(4+tre); Hva skrives ut når programmet kjøres? 1. 43 2. 7 3. 4tre 4. Ingen av alternativene ovenfor 22-05-2006 6

Oppgave 1c Vi har et program med følgende setninger: int k = 0; boolean fortsett = true; while (k < 5 && fortsett) { if (k == 3) fortsett = false; System.out.println("HEI"); Hvor mange ganger skrives teksten "HEI" ut? 1. 0 2. 3 3. 4 4. 5 5. Ingen av alternativene ovenfor 22-05-2006 7

Oppgave 1d Vi har et program med følgende setninger: String s = "apekatt"; String t = ""; int n = s.length(); for (int pos = n-1; pos >= 0; --pos) t += s.substring(pos,pos+1); System.out.println(t); Hva skjer når programmet kjøres? > ttakepa 22-05-2006 8

Oppgave 1e Vi har et program med følgende setninger: String s = "hus"; int j = 34; int n = s.length(); if (n > 5 && j == 34) { if (j < 40) System.out.println("A"); else if (s.charat(2) == 's' j > 40) System.out.println("B"); else System.out.println("D"); Hva skrives ut når programmet kjøres? > B 22-05-2006 9

22-05-2006 10

Oppgave 1f De følgende spørsmålene besvares medutgangspunkt i Java-koden vist i figur 1 på neste side. Hvilken verdi får d1.år etter definisjonen i linje 21? 1. 1 2. 11 3. 2001 4. 2004 5. Noe annet 6. Definisjonen er ulovlig 22-05-2006 11

Oppgave 1g Hvilken verdi får d2.år etter at ++-operasjonen i linje 24 er utført? 1. 0 2. 1 3. 2000 4. 2004 5. 2005 6. Noe annet 7. Operasjonen er ulovlig 22-05-2006 12

Oppgave 1h Hva skjer hvis vi setter en static foran deklarasjonen av år i linje 6? 1. Ingen forskjell 2. Alle datoer vi lagrer vil ha samme år 3. Alle datoer vi lagrer vil være like 4. Endringen er ulovlig 22-05-2006 13

Oppgave 1i I metoden les ønsker vi å lese tre heltall som utgjør en dato fra filen fil. Hva er lovlige return-setninger i linje 17 for å få dette til? 1. return new Dato(); 2. return (Dato)new Dato(); 3. return fil.indato(); 4. return new Dato(fil.inInt(), fil.inint(), fil.inint()); 5. return new Dato(3*new inint()); 6. return Dato.in(fil): 7. return (Dato)fil.inText(); 22-05-2006 14

Oppgave 1j Hva er korrekte uttrykk for å få tak i datoen for påskedagen etter at linje 30 er utført? 1. h.get("påske") 2. h.get("påske") 3. (Dato)h.get("påske") 4. (Dato)h.get("PÅSKE") 5. (String)h.get("påske") 6. (String)h.get("PÅSKE") 7. (Bil)h.get("påske") 8. (Bil)h.get("PÅSKE") 22-05-2006 15

Oppgave 2 (vekt 35%) Anta at vi har to filer med værdata på samme format som i den siste obligatoriske oppgave. Det er mange måter å lagre dataene på; i denne oppgaven antar vi at det er gjort slik det er vist i figur 2 på neste side. 22-05-2006 16

import java.util.*; class Meteorologisk { HashMap stasjoner = new HashMap(); public static void main (String arg[]) { Meteorologisk met = new Meteorologisk(); //... class Værstasjon { int nummer, hoh; String navn, kommune, fylke; boolean østlandet, vestlandet; Månedsdata mdata[] = new Månedsdata[12]; //... class Månedsdata { int månedsnr; Dagsdata ddata[] = new Dagsdata[31]; //... class Dagsdata { double vind, nedbør, temp_min, temp_max; //... 22-05-2006 17

Oppgave 2a Tegn UML klassediagram og objektdiagram for datastrukturen. 22-05-2006 18

objektdiagram 22-05-2006 19

Oppgave 2b Finn data Skriv Java-kode (som skal ligge i main) for å finne nedbøren den 15.3 ved stasjon GARDERMOEN. Værstasjon gmoen = (Værstasjon)met.stasjoner.get("GARDERMOEN"); double nb15mars = gmoen.mdata[3-1].ddata[15-1].nedbør; 22-05-2006 20

Oppgave 2c Finn kaldeste observasjon Skriv Java-kode (som skal ligge i main) som finner den laveste temperaturen som er observert og skriver den ut. 22-05-2006 21

En enkel men oversiktlig måte å gjøre det på er å la klassene Meteorologisk, Værstasjon og Månedsdata ha hver sin metode mintemp som finner minimum blant sine data. NB! Denne koden er litt for enkel til å være helt riktig: den antar at det finnes data for alle månedene i året og at alle måneder har 31 dager. Men en slik løsning vil bli godtatt til denne eksamenen. Koden i main double mintemp = met.mintemp(); 22-05-2006 22

Metoden mintemp i Meteorologisk double mintemp() { double min = 999; Iterator it = stasjoner.keyset().iterator(); while (it.hasnext()) { Værstasjon vs = (Værstasjon)it.next(); double mx = vs.mintemp(); if (mx < min){ min = mx; return min; 22-05-2006 23

Metoden mintemp i Værstasjon double mintemp() { double min = 999; for (int m = 0; m < 12; ++m) { double mx = mdata[m].mintemp(); if (mx < min) { min = mx; return min; 22-05-2006 24

Metoden mintemp i Månedsdata double mintemp () { double min = 999; for (int d = 0; d < 31; ++d) { double mx = ddata[d].temp_min; if (mx < min){ min = mx; return min; 22-05-2006 25

Oppgave 3 Personnummer (vekt 35%) Fra og med 1964 har hver person med fast bosted i Norge fått tildelt et 11-sifret fødselsnummer. De seks første sifrene angir fødselsdato på formatet ddmmåå, der dd, mm og åå angir posisjoner for sifrene i henholdvis dag, måned og år. Bare de to siste sifrene av årstallet brukes. De fem siste sifrene i fødselsnummeret kalles personnummer. Et personnummer er delt inn i to grupper. De tre første sifrene angir et individnummer som skal skille personer født på samme dato. Det tredje av disse sifrene vil også angi kjønn, ved at kvinner får tildelt et partall, mens menn får tildelt et oddetall. De to siste sifrene I personnummeret er kontrollsifre som beregnes ut fra alle foregående siffer i fødselsnummeret. 22-05-2006 26

Eksempel Betrakt fødselsnummeret 081273 24604 Dette tilhører en person som er født 8. desember 1973. Siden det niende sifferet (6) er et partall, er denne personen en kvinne. Kontrollsifrene i de to siste posisjonene, 0 og 4, er beregnet ut fra de foregående sifrene. I denne oppgaven skal du skrive innmaten i to metoder som inngår i en klasse Fødselsnummer som er vist i figur 3 på forrige side. 22-05-2006 27

class Fødselsnummer { // Lagring av fødselsnummer, siffer for siffer int[] s = new int[11]; // Faktorer for kontroll av fødselsnummer int[] a = {3,7,6,1,8,9,4,5,2; int[] b = {5,4,3,2,7,6,5,4,3,2; Fødselsnummer (String fnr) { // Kontrollerer at fnr er en tekststreng bestående av 11 siffer. // Deler opp strengen siffer for siffer. Lagrer hvert siffer // som et heltall i arrayen s slik at det første sifferet ligger // i s[0], og det siste i s[10]. // Du kan anta at denne metoden allerede finnes og oppfører // seg som beskrevet ovenfor. Denne metoden skal derfor // ikke skrives.... boolean delelig11 (int tall) { // Tester om fødselsnummeret er delelig med 11. Hvis det // er tilfelle returneres verdien true, ellers returneres // verdien false. int tmp = tall/11; return (11 * tmp == tall); boolean gyldig () { // Tester om fødselsnummeret som er lagret i arrayen s er gyldig. Hvis det er //tilfelle returneres verdien true, ellers returneres verdien false.... String tekst (boolean bare_dato) { // Gjør om sifre som er lagret i arrayen s til en tekststreng og returnerer //denne.... 22-05-2006 28

Oppgave 3a For å unngå feil ved inntasting av fødselsnummere i et datasystem er det nødvendig å kontrollere om de inntastede sifrene er gyldige. Du skal gjøre slik kontroll tilgjengelig i klassen ovenfor ved å skrive innholdet i metoden gyldig. Algoritmen for sjekking av kontrollsifrene er som følger: 1. Beregn summen sum1 = 3*s[0] + 7*s[1] + 6*s[2] + +5*s[7] + 2*s[8] der de ni første sifrene i fødselsnummeret hentes fra arrayen s deklarert i klassen Fødselsnummer. I et gyldig fødselsnummer skal summen av sum1 og det første kontrollsifferet (s[9]) være delelig med 11. Benytt arrayen a og metoden delelig11 som begge er definert ovenfor. 22-05-2006 29

Fortsettelse av oppgave 3a 2. Beregn summen sum2 = 5 s[0] + 4 s[1] + 3 s[2] + +3 s[8] + 2 s[9] der de ti første sifrene i fødselsnummeret er hentet fra arrayen s deklarert ovenfor. I et gyldig fødselsnummer skal summen av sum2 og det andre kontrollsifferet (s[10]) være delelig med 11. Benytt arrayen b og metoden delelig11 som begge er definert ovenfor. Begge kontrollsifrene må være gyldige for at fødselsnummeret skal aksepteres. 22-05-2006 30

Observer at arrayene a og b i klassen Fødselsnummer inneholder vektene som brukes til å beregne summene sum1 og sum2. I tillegg har du en metode som sjekker om et tall er delelig med 11 eller ikke. Metoden gyldig kan dermed skrives slik: sum1 regnes ut: int sum1 = 0; for (int i = 0; i < 9; ++i){ sum1 += a[i]*s[i]; sum2 regnes ut: int sum2 = 0; for (int i = 0; i < 10; ++i){ sum2 += b[i]*s[i]; Bruker funksjonen delelig11 som returnerer en boolsk varabel til å finne ut om (sum1 + s[9]) og (sum2 + s[10]) er delelig på 11 delelig11(sum1+s[9]); delelig11(sum2+s[10]); 22-05-2006 31

boolean gyldig () { // Tester om fødselsnummeret som er lagret i arrayen s er // gyldig. Hvis det er tilfelle returneres verdien true, // ellers returneres verdien false. int sum1 = 0; int sum2 = 0; for (int i = 0; i < 9; ++i){ sum1 += a[i]*s[i]; for (int i = 0; i < 10; ++i){ sum2 += b[i]*s[i]; boolean ok = delelig11(sum1+s[9]); ok = ok && delelig11(sum2+s[10]); return ok; 22-05-2006 32

Oppgave 3b I forbindelse med utskrifter er det hensiktsmessig med en tekstlig representasjon av et fødselsnummer. Klassen Fødselsnummer har derfor en metode tekst(boolean bare_dato) som kan gjøre om sifrene i arrayen s til en tekststreng og returnere denne. Hvis parameteren bare_dato har verdien true, returneres kun fødselsdatoen (seks siffer), ellers returneres hele fødselsnummeret (11 siffer). I det siste tilfellet skal fødselsdatoen og personnummeret separeres ved å sette inn et blankt tegn i teksten som returneres. Skriv innholdet i metoden tekst. 22-05-2006 33

Vi må bygge opp en tekst bestående av sifrene lagret i arrayen s. Dette kan gjøres på flere måter, men den enkleste er å benytte pluss-operatoren til konkatenering av en tekst med et heltall (som konverteres til tekst). Metoden tekst kan skrives slik: Tom tekst for å kunne konkatenere med +: String t = ""; Løkke for å konvertere et og et tall til tekst (konverterer først de 6 første tallene = datoen som alltid skal skrives ut). for (int i = 0; i < 6; ++i){ t += s[i]; Sjekker om den boolske variabelen bare_dato er false før resten evt. konverteres til tekst: if (!bare_dato) { t += " "; for (int i = 6; i < 11; ++i){ t += s[i]; 22-05-2006 34

String tekst (boolean bare_dato) { // Gjør om sifre som er lagret i arrayen s til // en tekststreng og returnerer denne. Hvis bare_dato // har verdien true returneres bare fødselsdato // (s[0],...,s[5]), ellers returneres alle sifrene // s[0],...,s[10], med et blankt // tegn satt inn mellom fødselsdato og personnummer. String t = ""; // Tom tekst for å kunne konkatenere med + for (int i = 0; i < 6; ++i) t += s[i]; if (!bare_dato) { t += " "; for (int i = 6; i < 11; ++i){ t += s[i]; return t; 22-05-2006 35