TDT4100 Objektorientert programmering



Like dokumenter
TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering

TDT Prosedyre- og objektorientert programmering

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

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

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TDT Prosedyre- og objektorientert programmering

TDT4100 Objektorientert programmering

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

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

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

UNIVERSITETET I OSLO

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

UNIVERSITETET I OSLO

TDT Prosedyre- og objektorientert programmering

OPPGAVE 5b og 8b Java Kode

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

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

TDT Prosedyre- og objektorientert programmering

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

TDT4100 Objektorientert programmering

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

TDT Prosedyre- og objektorientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamen IN1010/INF1010 våren 2018

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

UNIVERSITETET I OSLO

EKSAMEN. Objektorientert programmering

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

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

INF106 Objektorientert programmering

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

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

Løsningsforslag til eksamen i INF1000 våren 2006

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

EKSAMEN. Algoritmer og datastrukturer

OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0

Eksamensoppgave i IFUD1025 Programmering i Java

Forelesning inf Java 5

LO191D/LC191D Videregående programmering

Forelesning inf Java 5

EKSAMENSOPPGAVE. Vil det bli gått oppklaringsrunde i eksamenslokalet? Svar: NEI

BOKMÅL Side 1 av 6. EKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Fredag 6. juni 2008 Kl

UNIVERSITETET I OSLO

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

UNIVERSITETET I OSLO

Forelesning inf Java 4

EKSAMEN med løsningsforslag

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

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

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Algoritmer og Datastrukturer

Eksamensoppgave i IFUD1025 Programmering i Java og IINI4013 Programmering i Java

Objektorientert Programmering Ekstraordinær eksamen 2014

Fakultet for informasjonsteknologi, Institutt for datateknikk og informasjonsvitenskap

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

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

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Eksamensoppgave i IFUD1025 Programmering i Java

Gjennomgang av eksamen H99

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

EKSAMEN. Emne: Algoritmer og datastrukturer

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

Eksamen Objektorientert Programmering 2013

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Eksamen Oppgave a) public class DayTime { public final int hours, minutes;

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

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

Transkript:

Eksamensoppgave i TDT4100 Objektorientert programmering Fredag 19. august 2011, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikrer Trond Aalberg. Kontaktperson under eksamen Hallvard Trætteberg (mobil 918 97263) Språkform: Bokmål Tillatte hjelpemidler: C Én valgfri lærebok i Java er tillatt. Bestemt, enkel kalkulator tillatt. Sensurfrist: Fredag 9. september Les oppgaveteksten nøye. Finn ut hva det spørres etter i hver oppgave. Dersom du mener at opplysninger mangler i en oppgaveformulering gjør kort rede for de antagelser og forutsetninger som du finner det nødvendig å gjøre. Side 1 av 6

Del 1 Metoder (30%) Tre små trøndere på Høili plass er en barnesang som synges litt spesielt. Første vers synges med a -lyd for alle vokalene, med andre ord Tra sma trandara pa, andre vers synges med e -lyd for alle vokalene og så videre for alle vokalene i alfabetet. I denne oppgaven skal du lage en metode for å skrive ut sanger på denne formen, med tilhørende hjelpemetoder. Du kan anta at alle metodene og evt. felt du ønsker å innføre samles i en felles klasse kalt Song. For alle deloppgavene så belønnes du for å bruke (hjelpe)metoder fra tidligere deloppgaver. a) Skriv en metode isvowel(char c) som returnerer true dersom c er en vokal og false ellers. Både store og små bokstaver må håndteres. private static String vowels = "aeiouyæøå"; public static boolean isvowel(char c) { return vowels.indexof(character.tolowercase(c)) >= 0; b) Skriv en metode String computeverse(string originalverse, char v) som tar inn originalverset og en vokal v som parametre. Metoden skal returnerer verset, med vokalene i originalverset erstattet med den angitte vokalen v. Dersom computeverse kalles med Alfabet og i som argument, så skal Ilfibit returneres. Merk at også her må store og små bokstaver håndteres riktig. Dersom v ikke er en vokal så skal det kastes et passende unntak. public static String computeverse(string originalverse, char v) { if (! isvowel(v)) { throw new IllegalArgumentException(v + " is not a vowel"); String verse = ""; for (int i = 0; i < originalverse.length(); i++) { char c = originalverse.charat(i); if (! isvowel(c)) { verse += c; else if (Character.isUpperCase(c)) { verse += Character.toUpperCase(v); else { verse += Character.toLowerCase(v); return verse; c) Skriv en metode writesong(string originalverse) som tar inn originalverset som parameter og skriver ut alle versene, hvor hvert vers har alle vokalene erstattet med en bestemt vokal. Det skal altså skrives ut ett vers for hver vokal i alfabetet. Dersom writesong kalles med Alfabet som argument, så skal Alfabat\nElfebet\nIlfibit\n \nylfybyt skrives ut (\n er et linjeskift mellom versene). public static void writesong(string originalverse) { for (int i = 0; i < vowels.length(); i++) { System.out.println(computeVerse(originalVerse, vowels.charat(i))); Side 2 av 6

d) Du skal gjøre det mulig å skrive ut en sang med vers for et bestemt/begrenset sett med vokaler. Dette skal gjøres ved at Song-klassen instansieres med originalverset og writesong-metoden kalles med settet av vokaler. Dersom en utfører new Song( Alfabet ).writesong( aei ), så skal Alfabat\nElfebet\nIlfibit skrives ut (\n er fortsatt linjeskift). Forklar med tekst og kode hvilke endringer som må gjøres for at dette skal være mulig. En må introdusere et String-felt for originalverset. Konstruktøren må ta inn originalverset og sette feltet. Metodene computeverse og writesong skal ikke lenger ta inn originalverset, men lese det tilsvarende feltet. Da kan de heller ikke lenger være deklarert med static. writesong-metoden må iterere over vokalene i argumentet, ikke alle vokalene i alfabetet. Del 2 Klasser (35%) Du skal realisere et rating/poengsystem for et nettsted hvor personer kan publisere artikler/innlegg. Både personer og innlegg har en rating. Ratingen er et tall mellom 1 og 5 og starter som 1. De som leser innleggene kan gi 1 til 5 poeng til innleggene og/eller forfatterne for å øke eller redusere deres rating. Ratingen til både personer og innlegg er til enhver tid gjennomsnittet av poengene de har fått. Dersom et innlegg har fått totalt 10 poeng på 5 poenggivinger, vil innlegget ha 10 / 5 = 2 som rating. Personer med høy rating regnes som viktigere enn de med lav rating og poengene som gis vektes derfor på følgende måte: Dersom en person med rating R gir P poeng, så regnes det som R poenggivinger à P poeng. Dersom innlegget i eksemplet over, med 10 poeng på 5 poenggivinger, får 4 poeng (P) fra en person med 1 som rating (R), så vil den nye ratingen være (10 + P*R) / (5+R) = 14/6 = 2,333... Ratingen øker altså fra 2 til 2,333... fordi samlet antall ratingpoeng øker fra 10 til 14 og antall poenggivinger fra 5 til 6. Dersom innlegget istedenfor får 4 poeng (P) fra en person med 3 som rating (R), så vil den nye ratingen være (10 + P*R) / (5+R) = 22/8 = 2,75. Ratingen øker altså fra 2 til 2,75 fordi samlet antall ratingpoeng øker fra 10 til 22 og antall poenggivinger fra 5 til 8. Rating av personer håndteres på samme måte som for innlegg. a) Implementer klassen Person med felt og innkapslingsmetoder for navn og nødvendige felt for å håndtere ratingen. For å endre ratingen skal Person-klassen kun ha én metode, receivepoints(int points, Person giver), som kan brukes når personen giver gir points poeng til Person-objektet som metoden kalles på. Dersom randi og jon refererer til hvert sitt Person-objekt, så skal altså kallet randi.receivepoints(5, jon) oppdatere randi sin rating iht. de 5 poengene og jon sin rating, som beskrevet over. Husk å validere argumentene! b) Du skal implementere en Submission-klasse (innlegg) og tenker at du kan spare kode ved å flytte kode for å håndtere rating til en egen klasse og (gjen)bruke denne vha. arv. Implementer en slik løsning. public class Rating { private double pointsum = 1, weightsum = 1; public void receivepoints(int points, Person rater) { if (points < 1 points > 5) { Side 3 av 6

throw new IllegalArgumentException("points must be between 1 and 5, but was " + points); double raterweight = rater.getrating(); pointsum += raterweight * points; weightsum += raterweight; public double getrating() { return pointsum / weightsum; Person og Submission arver fra Rating. c) Delegering er en fleksibel teknikk for å (gjen)bruke nyttig funksjonalitet i andre klasser. Vis hvordan kode for å håndtere rating kan samles i en egen klasse, som klassene Person og Submission kan delegere til, istedenfor å bruke arv. Rating blir som over. Person: public class Person { private Rating rating = new Rating(); public void receivepoints(int points, Person rater) { rating.receivepoints(points, rater); public double getrating() { return rating.getrating(); Submission blir tilsvarende. Del 3 Testing (15%) a) Forklar med tekst og kode hvordan du vil teste hver av metodene i klassen Song fra oppgave 1 a-c. public class SongTest extends TestCase { private static String vowels = "aeiouyæøå", consonants = "bcdfghjklmnpqrstvwxz"; public void testisvowel() { for (int i = 0; i < vowels.length(); i++) { asserttrue(song.isvowel(vowels.charat(i))); Side 4 av 6

for (int i = 0; i < consonants.length(); i++) { assertfalse(song.isvowel(consonants.charat(i))); public void testcomputeverse() { assertequals("ilfibit", Song.computeVerse("Alfabet", 'i')); public void testwritesong() { Song.writeSong("Alfabet"); b) Forklar med tekst og kode hvordan du vil teste Song-klassen fra oppgave 1 d). Her kan en bruke samme test-strategi, men utføre kallene iht. det nye designet. Del 4 Java-forståelse (20%) a) I Java må alle deklarasjoner av felt, parametre og variabler inneholde en type, f.eks. int a. Hva er hensikten med deklarasjon av typer i et programmeringsspråk? Hensikten med typer er å kunne begrense/sjekke hvilke operasjoner som er lovlige ved kompilering/i editoren. Uten typer kan en f.eks. ikke sjekke om a * b er lovlig eller ikke. b) Hva skrives ut av følgende kode? Forklar hvorfor! System.out.println( Hallvard sin alder er + 4 * 10 + 4); Utskriften blir Hallvard sin alder er 404. Pga. operator-presedensen beregnes først 4 * 10 (= 40) og så utføres + ene fra venstre mot høyre. String + int + int blir tolket som ((String + int) + int), og String + int utføres ved at int en gjøres om til en String og legges til (append es). Intensjonen var antageligvis å legge sammen 40 og 4 som tall, og for å få til det må en legge parenteser rundt slik: Hallvard sin alder er + (4 * 10 + 4). c) Anta følgende tre varianter av klassen A. I hvert tilfelle utføres new A() og en får utskriften som vist under hver variant, hhv. 1, 2 og 1. Forklar hvorfor! public class A { private int i = 0; private int foo() { i = i + 1; return i; public A() { if (foo()!= 0 foo() == 0) { System.out.println(i); public class A { private int i = 0; private int foo() { i = i + 1; return i; public A() { if (foo() == 0 foo()!= 0) { System.out.println(i); public class A { private int i = 0; private int foo() { return i++; public A() { if (foo() == 0 foo()!= 0) { System.out.println(i); Side 5 av 6

Powered by TCPDF (www.tcpdf.org) 1 2 1 I det første tilfellet gir det første kallet til foo() 1 og det første leddet i if-testen dermed true. I det andre tilfellet gir det første leddet false og foo() utføres en ekstra gang. I det tredje tilfellet returnerer det første kallet til foo() 0, selv om/samtidig som i økes og det første leddet i if-testen gir true. d) Anta følgende metode-deklarasjon: int foo(int i) { if (i > 0) { System.out.println( i: + foo(i - 1)); return i; Hva blir skrevet ut dersom en utfører foo(2)? Forklar hvorfor! i: 0 i: 1 Kallet til foo(i-1) utføres før kallet til println (selve utskriften). Derfor vil utskriften fra kallet til foo(1) komme før utskriften fra kallet til foo(2). Side 6 av 6