INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012



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

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

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

INF Uke 10. Løsningsforslag ukeoppgaver oktober 2012

UNIVERSITETET I OSLO

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

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

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

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

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

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

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

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

INF Løsning på seminaropppgaver til uke 8

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

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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

Oblig4 - forklaringer. Arne og Ole Christian

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

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

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Løse reelle problemer

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Løse reelle problemer

UNIVERSITETET I OSLO

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

INF1000: Forelesning 6. Klasser og objekter del 1

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

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

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Ukeoppgaver INF1000: 12. feb 16. feb

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

INF1000: Forelesning 4. Mer om arrayer Metoder

Løsningsforslag ukeoppg. 4: sep (INF Høst 2011)

INF Uke 11. Ukeoppgaver oktober 2012

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

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

Gjennomgang av en tenkt eksamensoppgave

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 en tenkt eksamensoppgave

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

Ukeoppgaver 2: sep (INF Høst 2010)

INF1000: Forelesning 7

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

UNIVERSITETET I OSLO

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

Forelesning inf Java 5

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

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

Forelesning inf Java 5

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 Behandling av tekster

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

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

INF1000: noen avsluttende ord

TDT4100 Objektorientert programmering

INF1000: Forelesning 7. Konstruktører Static

UNIVERSITETET I OSLO

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

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Jentetreff INF1000 Debugging i Java

INF1000 : Forelesning 4

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Transkript:

INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver som dekker de ulike delene av pensum. Nøkkeloppgaver er oppgaver merket med [Nøkkeloppg.] og er plukket ut som spesielt representativ for de viktigste temaene fra ukens forelesning, og alle bør ha som minimumsmål å løse denne selvstendig. Oppgave 1 Legg inn i et hashmap: Du har klassen Dyr (se under). Lag en klasse DyreMap, som inneholder en main-metode. Her skal du deklarere et HashMap<String, Dyr>. Opprett minst tre objekter av klassen Dyr, finn på navn og idnr. Husk at idnr bør være unike! Legg disse inn i hashmappet med idnr som nøkkel. class Dyr { String navn; String idnr; Dyr(String navn, String idnr) { this.navn = navn; this.idnr = idnr; String getidnr() { return idnr; Oppgave 2 [Nøkkeloppg.] Array vs. HashMap a) Følgende program viser et enkelt banksystem med en array kontoer[], og metoder for å finne en konto vha. navn til eieren og vha. kontonummer. Skriv om programmet slik at det bruker en HashMap i stedet for arrayen kontoer[]. I 1

første omgang lager vi en HashMap, med personnavn som nøkkel og et Kontoobjekt som verdi, deklarert slik: HashMap<String, Konto> kontofranavn = new HashMap<String, Konto>(); Hvilke fordeler og ulemper får vi av å bruke HashMap her? Hva kan variabelen antkontoer erstattes med i programmet? Anta foreløpig at personnavnene er unike og at hver person bare kan ha en konto i banken. class Konto { int nr; // kontonummer String navn; // eier int saldo; Konto(int nr, String navn, int saldo) { this.nr = nr; this.navn = navn; this.saldo = saldo; void settinn(int innskudd) { saldo = saldo + innskudd; class Bank { Konto[] kontoer = new Konto[1000]; int antkontoer = 0; public static void main(string[] args) { Bank b = new Bank(); Bank() { åpnenyttkonto(530010, "Nils", 4000); åpnenyttkonto(720020, "Elin", 8000); åpnenyttkonto(910030, "Tina", 9000); Konto k = finnkontofranavn("elin"); System.out.println("Elins kontonr: " + k.nr + ", saldo: " + k.saldo); k = finnkontofranr(530010); System.out.println("Kontonr. " + k.nr + " tilhører " + k.navn); void åpnenyttkonto(int nr, String navn, int saldo) { Konto k = new Konto(nr, navn, saldo); kontoer[antkontoer] = k; antkontoer++; Konto finnkontofranavn(string navn) { for (int i = 0; i < antkontoer; i++) { 2

if (kontoer[i].navn.equals(navn)) { return kontoer[i]; return null; Konto finnkontofranr(int kontonr) { for (int i = 0; i < antkontoer; i++) { if (kontoer[i].nr == kontonr) { return kontoer[i]; return null; Kjøreeksempel: Elins kontonr: 720020, saldo: 8000 Kontonr. 530010 tilhører Nils b) Lag en HashMap til, kalt kontoer, hvor du bruker som nøkkel kontonummeret konvertert til String, og fortsatt Konto-objektene som verdi. Vis at metoden finnkontofranr() blir enklere nå. Videre tenk deg at vi skal ha en metode for å fjerne en konto. Følgende kode viser hvordan det kan gjøres med arrayer. Hvor mange programsetninger trengs det når vi bruker en HashMap i stedet? Og med to? void avsluttkonto(konto k) { // Fjerner en konto ved å finne indeksen til kontoen i arrayen // kontoer[] og flytte alle kontoene med høyere indeks en plass ned. boolean funnet = false; for (int i = 0; i < antkontoer &&!funnet; i++) { if (kontoer[i] == k) { funnet = true; for (int j = i; j < antkontoer - 1; j++) { kontoer[j] = kontoer[j + 1]; antkontoer--; c) Disse oppgavene har begrensningen at personnavnene må være unike og at hver person bare kan ha en konto i banken. Hvordan ville man unngått disse begrensninger i et mer avansert system? Hvilke fordeler og ulemper ser du av å bruke HashMap-er i stedet for 2D-arryaer i Oblig 3? (foreslå mulige nøkkel/verdi-kombinasjoner). 3

Hint: Se avsnitt 9.11 på side 191 i læreboka for forskjellene mellom arrayer og HashMap-er. Oppgave 3 HashMap: Hva skrives ut? import java.util.*; class Personer { public static void main(string[] args) { HashMap register = new HashMap (); Person p1 = new Person("Ida", 19); Person p2 = new Person("Lars", 21); register.put(p1.navn, p1); register.put(p2.navn, p2); // a) // b) // c) // d) // e) // f) Person p = register.get("ida"); System.out.println(p.navn + p.alder); for (String s : register.keyset()) { System.out.println(s); p1.alder = 24; for (Person p3 : register.values()) { System.out.println(p3.navn + ":" + p3.alder); if (register.containsvalue(p2) &&! register.containskey("elin")) { System.out.println(true); register.remove("lars"); System.out.println(register.size() + " - " + register.isempty()); System.out.println(register.remove("Ida") == null); System.out.println(register.remove("Ida") == null); class Person { String navn; int alder; Person(String navn, int alder) { this.navn = navn; this.alder = alder; 4

Oppgave 4 [Nøkkeloppg.] HashMap med akronymer: kap. 9, oppg. 2 (noe modifisert tekst) (side 195) a) Et akronym er et initialord (forkortelse) som blir lest og uttalt som et vanlig ord, altså ikke bokstav for bokstav.lag et program som leser inn en rekke akronymer og deres tolkning fra fil (du finner en fil med akronymer (og andre forkortelser) på bokas hjemmeside: akronymer.txt). Legg akronymene og tolkningene i en HashMap med akronymet som nøkkel. Brukeren skal oppgi et akronym til programmet og få tilbake en eller flere tolkninger av akronymet. Det kan maksimalt være 10 tolkninger til hvert akronym. Denne brukerdialogen skal gå i løkke til brukeren svarer ". Tips: Lag en klasse der objekter har følgende attributter: akronymet og en String-array med tolkninger, samt antall tolkninger. Pekere til objekter av denne klassen legges i HashMap med akronymet som nøkkel. Det kan være lurt å lage en metode i denne klassen som legger til en ny tolkning, og som holder orden på hvor mange tolkninger det er i øyeblikket. API Application Programming I n t e r f a c e AV Audio/Video AV A uthenticity V e r i f i c a t i o n BASH Bourne Again S h e l l [ Unix ] EU Europaunionen FN Forente nasjoner... osv... b) Utvid programmet slik at bruker får anledning til å legge til en tolkning dersom den ikke finnes fra før. Oppgave 5 [Nøkkeloppg.] Uke 3: Array med tall a) Lag et program med en for-løkke som ber bruker taste inn fem heltall og lagrer disse i en array kalt tall: int[] tall = new int[5]; b) Sum av array: Utvid programmet slik at det regner ut summen av tallene ved hjelp av en løkke, og skriver ut resultatet. c) Minste verdi: Utvid programmet slik at det finner og skriver ut det minste tallet i arrayen. d) Lave verdier: Legg til programkode som skriver ut alle verdiene i arrayen som er mindre enn 10. 5

e) Søk: Legg til programkode som skriver ut en beskjed om verdien 5 finnes eller ikke finnes i arrayen. Oppgave 6 Metoder (10 poeng) oppgave 5 fra eksamen h09 a) Nedenfor er det deklarert en metode sum(int[] array), som skal beregne summen av tallene i en int-array. Vil metoden kompilere? Hvis nei, forklar hva som må endres for at metoden skal kompilere. public void sum ( int[] array ) { int sum = 0; for (int i=0; i < array.length: i++) { sum += array { i ; return sum; b) Deklararer en metode snitt(int[] array), som skal beregne gjennomsnittet av tallene i parameteren array av type int-array. Snittet skal beregnes med flyttallsdivisjon og returverdien skal være av type double. Du skal skrive hele metoden, inkludert signaturen. c) Vi kan beregne en gjenstands snitthastighet ved å dividere tilbakelangt distanse på tid. Deklararer en metode som tar to double-parametre distanse og tid, og som returnerer hastigheten som en double-verdi. Hvis verdien til tid er 0, skal metoden returnere -1. Du skal skrive hele metoden, inkludert signaturen. Finn på et passende metodenavn. d) I sjø- og luftfart oppgis ofte hastigheter i knop. Én knop er definert som én nautisk mil pr. time, som tilsvarer 1852 meter pr. time. Deklarer en metode som tar en double-parameter knop og returnerer den tilsvarende hastigheten i km/t som en double-verdi. Du skal skrive hele metoden, inkludert signaturen. Finn på et passende metodenavn. Oppgave 7 Klasser og objekter, Oppgave 11 eksamen h05 (25 poeng) I programmet nedenfor skal du lage en konstruktør til klassen Pyramide som har pyramidens bredde, lengde og høyde som tre double-parametreparameter. Du skal også lage en objektmetode i klassen Pyramide som regner ut volumet og returnerer denne verdien (du skal bruke formelen: volum = 0.333*høyde*bredde*lengde). Du skal også skrive programkode i main som oppretter to 6

pyramider, en med langde =30.1,bredde=30.1 og høyde = 22.9 og en med samme grunnflate, men med dobbelt så stor høyde som den første pyramiden. Fra main skal du så kalle på volumberegningsmetoden i hvert av de to objektene og skrive ut en linje for hver pyramide med høyde, lengde og bredde samt volumet. class PyramideTest { public static void main ( String [] args) { // skriv kode her som lager to Pyramide-objekter og // skriver ut deres høyde, lengde og volum // end main // end class PyramideTest class Pyramide { double høyde, lengde, bredde; // skriv konstruktør her // skriv objektmetode her som beregner og returnerer volumet // end class Pyramide Ekstraoppgaver Oppgave 1 Bytte verdiene i to variable Lag et program som inneholder to heltallsvariable, a = 2 og b = 10. Skriv kode som bytter om verdiene i de to variablene, og skriver resultatet til skjerm. (Resultatet skal altså være a = 10 og b = 2.) Programmet skal fungere for alle verdier av a og b, du kan altså ikke skrive a = 10; og b = 2; direkte i programmet ditt. Prøv med andre verdier for a og b, og sjekk at programmet fortsatt fungerer. Oppgave 2 Løkker: Hva blir skrevet ut? Avgjør uten å bruke datamaskin hva som blir skrevet ut når følgende programsetninger utføres. 7

//(a) //(b) //(c) //(d) //(e) int a = 10; while (a < 20) { a += 4; System.out.println("a = " + a); int sum = 0; for (int b = 1; b < 6; b += 2) { sum += b; System.out.println("sum = " + sum); int produkt = 1; for (int c = 1; c < 4; c++) { produkt = produkt * c; System.out.println(produkt); for (int d = 3; d >= 1; d--) { for (int e = 1; e <= 3; e++) { System.out.println(d + e); int teller = 0; for (int ytre = 0; ytre < 3; ytre++) { teller++; for (int indre = 0; indre < 3; indre++) { teller++; System.out.println(teller); 8