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

Like dokumenter
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

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

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

UNIVERSITETET I OSLO

Gjennomgang av en tenkt eksamensoppgave

Gjennomgang av en tenkt eksamensoppgave

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

s 678 * Hvordan designe og programmere objektorientert * Støtte til oppstart på Oblig 4: Jobbe frem eget forslag til datastruktur

INF 1000 høsten 2011 Uke 10: 25. november

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

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

UNIVERSITETET I OSLO

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

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

Løsningsforslag til eksamen i INF1000 våren 2006

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

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

b) 10 2 = 20 c) 5 1 = 5.

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

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

Oblig4 - forklaringer. Arne og Ole Christian

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

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

INF1000 : Forelesning 4

Forelesning inf Java 5

Forelesning inf Java 5

INF Forelesning 10. Eksempler på Hashmap Oppramstyper Innstikksortering Javadoc

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

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

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

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

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

PRØVEEKSAMEN (rettet versjon 27/11)

UNIVERSITETET I OSLO

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

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

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

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

Ole Christian Lingjærde, 12. september 2013

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

Forelesning inf Java 4

INF1000 : Forelesning 3

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

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

Blokker og metoder INF1000 (Uke 6) Metoder

Oblig4 - forklaringer. Arne og Ole Christian

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

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

Repetisjon. INF gruppe 13

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF1000 (Uke 6) Mer om metoder, tekster

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

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

INF1000 : Forelesning 5

Oppgave01.java class Bongo { 2 public static void main(string[] args){ 3 int[][][]bongo = new int[2][3][4]; 4 5 // SVAR: 24 6 } 7 } 8

UNIVERSITETET I OSLO

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

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

Løsningsforslag, inf101, våren 2001

Endret litt som ukeoppgave i INF1010 våren 2004

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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Inf1000 (Uke 10) HashMap og ArrayList

Repetisjon INF 1000 våren 2006

Forelesning inf Java 3

Løsningsforslag INF desember 2007

UNIVERSITETET I OSLO

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

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

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

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

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

Transkript:

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

Oppgave 1 Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI int i; int k = i; int i, j = 4; int k = j; double[] x = new double[1]; String[] s = new char[10]; String s = { Arne, Ole ; int i = new int; char[] c = null;

Oppgave 2 Hvor mange ganger blir INF1000 skrevet ut? a) for (int i=0; i<4; ++i) { System.out.println( INF1000 ); Svar:... 4 ganger b) for (int i=1; i<4; i++) { for (int j=1; j<5; j++) { System.out.println( INF1000 ); 12 ganger Svar:... c) for (int i=0; i<4; i+=2) { for (int j=0; i+j<4; j+=i+1) { System.out.println( INF1000 ); 5 ganger Svar:... i j 0 0 0 1 0 2 0 3 2 0

Oppgave 3 Anta at følgende kodelinjer utføres: int x = 22; int y = x / 27; int z = y * 27; boolean test = (x == z y > 0); x y z test 22 - - - 22 0 - - 22 0 0-22 0 0 false Hva er verdien til variabelen test rett etterpå? Svar:... false

Oppgave 4 Anta at følgende setninger utføres: i j k verdi int k = 33; int i = 2*k; int j = k++; if (k>j) j += 67; k = k + j + i++; - 66 66 66 67 - - 33 100 100 33 33 34 34 200 - - - - - int verdi = ++k; 67 100 201 201 Hva er verdien til variabelen verdi like etter at setningene over er utført? 201 Svar:...

Oppgave 5 Anta at følgende er deklarert i en metode i et program: int[] vekt = new int[100]; int sum = 0; Anta at arrayen vekt fylles opp med tilfeldige verdier. Vil alternativene under alltid gi som resultat at sum inneholder summen av alle elementene i arrayen vekt? JA NEI int k = 0; while (k < vekt.length) { sum = sum + vekt[k]; k øker ikke i løkka for (int k = vekt.length; k > 0; k--) { sum += vekt[k-1];

JA NEI int k = 0; do { k++; sum = sum + vekt[k]; while (k < vekt.length); k løper fra 1 til vekt.length når vi summerer int k = 0; do { sum = sum + vekt[k]; k++; while (k < vekt.length); for (k = 0; k < vekt.length; k++) { if (vekt[k] > 0) { sum += vekt[k]; else { k ikke deklarert + sum -= vekt[k]; feil oppdatering når vekt[k] < 0

JA NEI int k = 0; Summerer ikke for (int i = 0; i < vekt.length; i++) i for-løkka { sum = vekt[k++]; for (int i = 0; i < vekt.length - 1; i += 2) { sum += vekt[i] + vekt[i+1]; boolean ferdig = false; int k = 0; while (!ferdig) { if (k > 99) { ferdig = true; else { sum = sum + vekt[k++];

Oppgave 6 Vi kan lage en sekvens med heltall på følgende måte: la de to første elementene i sekvensen begge være 1 og la deretter hvert element være summen av de to foregående. Den sekvensen vi da får starter slik: 1, 1, 2, 3, 5, 8, 13,... og kalles Fibonacci-sekvensen. Du skal nå lage en metode som beregner de n første elementene i Fibonaccisekvensen og returnerer disse i en heltallsarray av lengde n+1 (det første elementet i arrayen, svarende til posisjon 0, skal ikke benyttes). Posisjon k i arrayen som returneres skal inneholde det k te elementet i Fibonacci-sekvensen for k=1,...,n. Du kan anta at n 2.

int[] fibonacci (int n) { int[] a = new int[n+1]; a[1] = 1; a[2] = 1; for (int i=3; i<n+1; i++) { a[i] = a[i-1] + a[i-2]; return a;

Oppgave 7 Skriv ferdig metoden under, som teller opp hvor mange ganger tegnet i charvariabelen tegn forekommer i tekststrengen tekst, og returnerer dette antallet. For eksempel skal kallet antallforekomster ( Engelske, e ) returnere verdien 2. Hvis tekst == null så skal metoden returnere verdien 0. int antallforekomster (String tekst, char tegn) { if (tekst == null) return 0; int antall = 0; for (int i=0; i<tekst.length(); i++) { if (tekst.charat(i) == tegn) antall++; return antall;

Oppgave 8 Norge består av 19 fylker som hver består av et antall kommuner. Anta at vi modellerer dette ved hjelp av tre klasser Land, Fylke og Kommune slik at Norge representeres ved et objekt av klassen Land, hvert fylke er representert ved et objekt av klassen Fylke og hver kommune er representert ved et objekt av klassen Kommune. Lag et UML klassediagram som viser forholdet mellom de tre klassene Land, Fylke og Kommune, og få på riktige antall i hver ende av forholdene. 1 19 1 1..* Land Fylke Kommune består av består av

Oppgave 9 class StudentSystem { public static void main (String[] args) { Studieprogram inf = new Studieprogram("Informatikk"); Studieprogram bio = new Studieprogram("Biologi"); new Student("Kari Olsen", inf); new Student("Eva Larsen", inf); new Student("Per Jensen", bio); bio.liste(); inf.liste(); class Student { String navn; Student (String navn, Studieprogram sp) { this.navn = navn; sp.meldinnstudent(this); String somtekst() { return navn; class Studieprogram { String tittel; Student[] medlemmer; int antall; Studieprogram (String tittel) { this.tittel = tittel; medlemmer = new Student[100]; antall = 0; void meldinnstudent(student stud) { medlemmer[antall] = stud; antall++; void liste() { for (int i=0; i<antall; i++) { System.out.println(medlemmer[i].somTekst());

new Studieprogram("Informatikk"); "Informatikk" class Studieprogram { String tittel; Student[] medlemmer; int antall; 0 Studieprogram (String tittel) { this.tittel = tittel; medlemmer = new Student[100]; antall = 0; null null null... null...

Studieprogram inf = new Studieprogram("Informatikk"); Studieprogram bio = new Studieprogram("Biologi"); inf : Studieprogram tittel = "Informatikk" medlemmer antall = 0 meldinnstudent() liste() bio : Studieprogram tittel = "Biologi" medlemmer antall = 0 meldinnstudent() liste()

new Student ("Kari Olsen", inf); inf : Studieprogram tittel = "Informatikk" medlemmer antall = 1 meldinnstudent() liste() : Student navn = "Kari Olsen" somtekst() bio : Studieprogram tittel = "Biologi" medlemmer antall = 0 meldinnstudent() liste()

new Student ("Eva Larsen", inf); inf bio : Studieprogram tittel = "Informatikk" medlemmer antall = 1 meldinnstudent() liste() : Studieprogram tittel = "Biologi" medlemmer antall = 0 meldinnstudent() liste() : Student navn = "Kari Olsen" somtekst() : Student navn = "Eva Larsen" somtekst()

new Student ("Per Jensen", bio); inf bio : Studieprogram tittel = "Informatikk" medlemmer antall = 1 meldinnstudent() liste() : Studieprogram tittel = "Biologi" medlemmer antall = 0 meldinnstudent() liste() : Student navn = "Kari Olsen" somtekst() : Student navn = "Eva Larsen" somtekst() : Student navn = "Per Jensen" somtekst()

bio.liste(); inf bio : Studieprogram tittel = "Informatikk" medlemmer antall = 1 meldinnstudent() liste() : Studieprogram tittel = "Biologi" medlemmer antall = 0 meldinnstudent() liste() : Student navn = "Kari Olsen" somtekst() : Student navn = "Eva Larsen" somtekst() : Student navn = "Per Jensen" somtekst()

inf.liste(); inf bio : Studieprogram tittel = "Informatikk" medlemmer antall = 1 meldinnstudent() liste() : Studieprogram tittel = "Biologi" medlemmer antall = 0 meldinnstudent() liste() : Student navn = "Kari Olsen" somtekst() : Student navn = "Eva Larsen" somtekst() : Student navn = "Per Jensen" somtekst()

Svar: Per Jensen Kari Olsen Eva Larsen

Oppgave 10 Anta at du har deklarert en HashMap: HashMap cdsamling = new HashMap(); og at du legger inn informasjon om CD ene dine i HashMapen, med platens tittel som nøkkel og artistnavnet som verdi (du antar at alle platene dine alle har ulik tittel). Et eksempel er cdsamling.put( Not going under, Maria Arredondo ); Skriv noen programsetninger som: først ber om og leser inn et artistnavn fra tastatur deretter går gjennom HashMapen og skriver ut titlene til alle platene du har registrert med denne artisten. Hint: husk at du vil ha tak i både nøklene og verdiene når du løper gjennom HashMapen. Det kan derfor lønne seg å lage en Iterator over nøklene (platetitlene). Du kan anta at programsetningene plasseres slik i programmet at de har tilgang til HashMapen cdsamling.

In tast = new In(); System.out.print( Artistens navn: ); String artistnavn = tast.inword( \n ); Iterator it = cdsamling.keyset().iterator(); while (it.hasnext()) { String tittel = (String) it.next(); String navn = (String) cdsamling.get(tittel); if (navn.equals(artistnavn)) { System.out.println(tittel);

Moral når du løper gjennom en HashMap: Hvis du bare er ute etter verdien, kan du bruke it.values().iterator() Hvis du er ute etter både nøkkelen og verdien, kan du bruke it.keyset().iterator() for å finne nøkkelen, og get() for å finne verdien.

Oppgave 11 I programmet nedenfor skal du lage en konstruktør til klassen Student. Konstruktøren skal ha studentens navn som parameter og skal initiere objektvariabelen navn. Du skal også skrive en objektmetode void økpoeng(int poeng) i klassen Student som øker antall studiepoeng med parameterens verdi. I klassen StudentTest skal du så sørge for å få initiere arrayen uiostud med 32000 Student-objekter. Studentobjektene i arrayen uiostud skal ha hvert sitt studentnavn Stud-1, Stud-2, Stud-3,... Stud-32000. Dermed skal f.eks. uiostud[252] peke på et Student-objekt hvor studentens navn er satt lik Stud-253. Til sist skal du sette antall studiepoeng til 30 for hver av studentene Stud-1,..., Stud-25000.

class Student { String navn; int antallstudiepoeng = 0; // Her skal du skrive konstruktøren Student (String navn) { this.navn = navn; // Her skal du skrive objektmetoden økpoeng void økpoeng (int poeng) { antallstudiepoeng += poeng;

class StudentTest { Student[] uiostud = new Student[50000]; public static void main (String[] args) { // Her skal du opprette 32000 Student-objekter med navn Stud-1, // Stud-2,...,Stud-32000 og legge dem inn i uiostud-arrayen StudentTest st = new StudentTest(); for (int i=0; i<32000; i++) { st.uiostud[i] = new Student( Stud- + (i+1)); // Her skal du øke antall studiepoeng med 30 for studentene // med studentnavn Stud-1, Stud-2,..., Stud-25000. for (int i=0; i<25000; i++) { st.uiostud[i].økpoeng(30); // end main

Oppgave 12 Filen SpamOrd.txt inneholder endel spam-ord (atskilt av blanke tegn), dvs ord som du ikke forventer å finne i seriøse eposter til deg, men som ofte forekommer i useriøse eposter (såkalt spamepost). Du skal lage et program som leser SpamOrd.txt og som deretter leser filen Epost.txt og sjekker om denne inneholder noen av spam-ordene. Programmet skriver til slutt ut på skjermen om filen Epost.txt inneholdt noen spam-ord eller ikke (du trenger ikke å skrive ut hvilke eller hvor mange spam-ord filen inneholdt). Du kan anta at SpamOrd.txt maksimalt inneholder 200 ord. I denne oppgaven kan du godt legge all programkoden inn i mainmetoden.

import easyio.*; import java.util.*; class Spam { public static void main (String[] args) { HashMap h = new HashMap(); In spamfil = new In( SpamOrd.txt ); while (!spamfil.lastitem()) { h.put(spamfil.inword(), null); In epostfil = new In( Epost.txt ); boolean funnet = false; while (!epostfil.lastitem() &&!funnet) { if (h.containskey(epostfil.inword()) funnet = true; if (funnet) System.out.println( Spam-ord! ); else System.out.println( Ingen spam-ord );

Oppgave 13 Skriv en metode som finner og skriver ut på skjerm hvor mange ulike verdier du har i en array og returnerer dette antallet. Hint: løp gjennom alle elementene i arrayen, og for hvert element teller du det med (dvs øker antallet elementer med 1) kun dersom det er siste gang dette elementet forekommer i arrayen (det kan du sjekke med en ny løkke inni den ytre løkken). Du kan anta at lengden av arrayen a er minst 1. 7 3 6 2 10 3 2 10 antall++

void finnantalluliketall (int[] a) { int antall = 0; for (int i=0; i<a.length; i++) { int ai = a[i]; boolean flere = false; int j = i+1; while (j < a.length &&!flere) { if (a[j++] == ai) flere = true; if (!flere) antall++; System.out.println(antall);

Oppgave 14 Et primtall er et heltall k 2 som bare er delelig med 1 og seg selv. F.eks. er 5 et primtall fordi det ikke er delelig med noen av tallene 2, 3, 4 (med andre ord: vi kan ikke skrive 5 som et helt multiplum av noen av disse tallene), mens 4 ikke er et primtall fordi det er delelig med 2. Det minste primtallet er 2. Hvis k 3 er et heltall, så er k et primtall hvis det ikke er delelig med noen av tallene 2, 3,..., k-1. For å sjekke om et tall er delelig med et annet i Java kan vi bruke operatoren %. Hvis a og b er to heltall, så vil a % b == 0 hvis og bare hvis a er delelig med b. Skriv ferdig metoden nedenfor som skriver ut på skjermen de n første primtallene. F.eks. skal kallet skrivprimtall(5) skrive ut tallene 2, 3, 5, 7 og 11. Du kan anta at n 1.

void skrivprimtall (int n) { System.out.println(2); int antall = 1; int k = 3; while (antall < n) { boolean erprimtall = true; for (int i=2; i<k; i++) { if (k % i == 0) erprimtall = false; if (erprimtall) { System.out.println(k); antall++; k++;