Tentamen i Objektorienterad programmering

Relevanta dokument
Tentamen i Objektorienterad programmering E

Tentamen i Objektorienterad programmering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen OOP

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Tentamen, EDAA20/EDA501 Programmering

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

OOP Objekt-orienterad programmering

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Tentamen i Objektorienterad programmering E

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad programmering D2

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Grundläggande programmering med C# 7,5 högskolepoäng

Tentamen, EDA501 Programmering M L TM W K V

Objektsamlingar i Java

DELPROV 1 I DATAVETENSKAP

Tentamen, EDA501 Programmering M L TM W K V

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 7. Träd och binära sökträd

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Föreläsning 3-4 Innehåll

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Institutionen för TENTAMEN CTH HT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Föreläsning 8: Exempel och problemlösning

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Laboration 4: Game of Life

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Programmering för språkteknologer II, HT2014. Rum

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

DAT043 Objektorienterad Programmering

Föreläsning REPETITION & EXTENTA

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

OOP Objekt-orienterad programmering

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Programmering A. Johan Eliasson

Tentamen. Grundläggande programmering i Java A 5p, DTAA

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

TENTAMEN OOP

Objektorienterad programmering i Java

Tentamen. Lösningsförslag

Redovisning av inlämningsuppgifter

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

SMD 134 Objektorienterad programmering

Tentamen, EDAA10 Programmering i Java

Algoritmer. Två gränssnitt

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

TENTAMEN OOP

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Malmö högskola 2007/2008 Teknik och samhälle

Föreläsning 9: Arv och UML

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Laboration 10 - NetBeans

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

OOP Omtenta

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Instuderingsfrågor, del D

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Laboration A Objektsamlingar

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

OOP Objekt-orienterad programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Föreläsning 5-6 Innehåll

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Föreläsning 10. ADT:er och datastrukturer

Transkript:

CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar till uppgifterna behöver ej kommenteras. Ej heller behöver nödvändiga importer anges. Triviala syntaxfel tolereras utan poängavdrag vid rättningen. Skriv läsligt! Skrivningen kan ge maximalt 40 p; 20 p ger med säkerhet godkänt. 27 p ger betyget 4 och 33 p betyget 5. 1. Betrakta följande Javaprogram: public class Uppgift1 { public static void incr(int n) {n++; public static void incrfst(int[] a) {a[0]++; public static void main(string[] args) { int k = 2; int[] v = {1,2,3; incr(k); System.out.println(k); incr(v[1]); System.out.println(v[1]); incrfst(v); System.out.println(v[0]); Vilken utskrift fås när programmet körs? Förklara kortfattat. (4 p) 2. Definiera en klass Uppgift2 med följande metoder: (a) public static double length(double[] v), som beräknar längden av vektorn v. Längden av en vektor (x 0,x 1,...x n 1 ) ges av x0 2 + x2 1 +... + x2 n 1. (3 p) (b) public static double[] normalized(double[] v), som returnerar en normaliserad variant av v. Man normaliserar en vektor genom att dividera varje komponent med vektorns längd (vilket gör att den normaliserade vektorn har längd 1). (3 p) (c) En main-rutin som deklarerar och skapar en vektor, samt skriver ut den normaliserad. Du kan välja vektorn själv i main om du vill; den behöver inte läsas in från användaren. (3 p) 1

3. Vi betraktar ett program som hanterar information om hästar och deras släktskap 1. En central klass i programmet är klassen Horse, vars objekt representerar en enskild häst. Klassen erbjuder följande metoder: public String getname(); returnerar hästens namn. public int getnrofchildren(); returnerar antalet barn hästen har. public Horse getchild(int i); returnerar barn nummer i. public void addchild(horse h); lägger till h som ytterligare ett barn. En realistisk klass skulle innehålla många fler metoder (för att ge födelsedatum, kön, föräldrar, ras, mm), men vi bortser här från detta. Implementera klassen Horse med ovanstående metoder; du får själv välja lämpliga parametrar till konstrueraren. (5 p) 4. Vi vill utveckla ett program som listar alla ord som finns i en engelsk text, med ett ord per rad. Ett ord definieras som en följd (engelska) bokstäver; vi bortser från komplikationen att ett ord kan fortsätta på nästa rad (och då avslutas med bindestreck på den första raden). (a) Definiera först en statisk metod public static void printwords(scanner in); som på terminalen listar alla ord som förekommer i in i den ordning de kommer. Om samma ord återkommer listas det igen. Observera att texten innehåller annat än bokstäver och blanktecken, såsom punkt, komma, semikolon, mm. Det räcker därför inte att använda in.next() för att hitta nästa ord. Vi påminner om metoden String findinline(string pattern) i Scanner. Denna metod söker efter en sträng som matchar pattern på den aktuella raden. Denna rutin kommer alltså att återge texten nästan oförändrad, men med skiljetecken borttagna och bara ett ord per rad. (3 p) (b) I Java Collections Framework finns förutom listor också interfacet SortedSet<E>. En klass som implementerar detta interface kan ses som en mängd av element av typen E. Bland annat finns metoderna public boolean add(e e); public Iterator<E> iterator(); Anropet s.add(e) lägger till e till s och returnerar true om e inte redan fanns där, annars returneras false. Som namnet SortedSet antyder kommer iteratorn att ge elementen i sorterad ordning, efter den naturliga ordningen. En implementation av detta interface finns också, klassen TreeSet<E>. Standardkonstrueraren i denna klass skapar en ny, tom mängd. Använd denna klass för att definiera public static void printwordssorted(scanner in); som skriver ut alla ord som finns i in i sorterad ordning. Dessutom ska vi undvika att få med samma ord två gånger om det förekommer både som första ord i en mening (och därför börjar med stor bokstav) och inuti en mening. Detta görs genom att göra om alla ord till att bara bestå av små bokstäver. (4 p) (c) Lägg slutligen till en main-rutin som läser en text från standard input och skriver ut alla ord i texten i sorterad ordning. (1 p) 1 Problemförfattaren vet mycket litet om hästavel. T ex säger man kanske inte barn om hästars avkomma? 2

5. Solitär är ett brädspel för en ensam spelare där 32 (svarta) kulor är placerade på en spelplan med 33 små fördjupningar som i bilden till vänster nedan; fördjupningen i mitten är tom. Ett drag i spelet består av att en kula hoppar över en grannkula (ovanför, nedanför, till vänster eller till höger) till platsen på andra sidan den överhoppade kulan, som måste vara tom. Den överhoppade kulan tas bort från spelplanen och spelet går ut på att få bort alla kulor utom en. I startläget är alltså fyra drag möjliga; man kan välja att flytta den kula som finns två steg från mitten åt något håll till mittpositionen. Den andra bilden visar läget efter det första draget om kulan två steg ovanför mitten valdes. Användaren gör ett drag i två steg; först klickar man på den kula man vill flytta; denna blir då vald, vilket syns genom att den visas vit, som till vänster nedan. Därefter klickar man på den tomma plats man vill hoppa till och draget utförs. Därefter är ingen kula vald, vilket visas till höger. Om draget är otillåtet (den nya platsen är inte tom, den ligger inte två steg ifrån eller den mellanliggande platsen är tom) sker inget mer än att ingen kula längre är vald. Om man ångrar ett påbörjat drag kan man alltså göra det ogjort genom att fullfölja med ett otillåtet drag. 3

Programmet utnyttjar en uppräkningstyp för situationen i varje plats på spelplanen: public enum State {OCCUPIED, EMPTY, OUTSIDE En plats kan vara upptagen, tom eller utanför. Det sista alternativet gör det möjligt att betrakta spelplanen som en 7 7-matris av positioner; 16 platser i hörnen kommer alltid att vara utanför. Dessutom finns tre klasser: En modellklass SolitaireModel, som representerar spelets tillstånd: public class SolitaireModel { private static final int SIZE = 7; private State [][] board; public SolitaireModel() { board = new State[SIZE][SIZE]; for (int r=0; r < SIZE; r++) for (int c=0; c < SIZE; c++) if ((r < 2 r > SIZE-3) && (c < 2 c > SIZE-3)) board[r][c] = State.OUTSIDE; else board[r][c] = State.OCCUPIED; board[3][3] = State.EMPTY; public void move(int r0, int c0, int r, int c) { // Överhoppas här public State getstate(int r, int c) { return board[r][c]; public int getsize() { return SIZE; Den överhoppade metoden move tar som parametrar två positioner för ett drag, startpositionen (r0,c0) och slutpositionen (r,c). Om det är ett giltigt drag att flytta en kula i startpositionen till slutpositionen så genomförs detta drag; annars sker ingenting. Notera att modellklassen inte vet någonting om valda platser; först när bägge positionerna för ett tänkt drag är kända anropas move. En vyklass SolitaireView, som visualiserar spelplanen: public class SolitaireView extends JPanel { private static final int MARGIN = 5; private static final int CIRCLE_SIZE = 40; 4

private static final int GRID_SIZE = CIRCLE_SIZE+2*MARGIN; private SolitaireModel model; private boolean hasselection; private int selrow, selcol; public SolitaireView(SolitaireModel model) { this.model = model; setpreferredsize(new Dimension(model.getSize()*GRID_SIZE, model.getsize()*grid_size)); setbackground(color.light_gray); addmouselistener(new MyListener()); public void paintcomponent(graphics g) { super.paintcomponent(g); for(int r = 0; r < model.getsize(); r++) for(int c = 0; c < model.getsize(); c++) { g.setcolor(color.black); State state = model.getstate(r,c); if (state == State.OCCUPIED) g.filloval(margin+c*grid_size,margin+r*grid_size, CIRCLE_SIZE,CIRCLE_SIZE); else if (state == State.EMPTY) g.drawoval(margin+c*grid_size,margin+r*grid_size, CIRCLE_SIZE,CIRCLE_SIZE); if (hasselection) { g.setcolor(color.white); g.filloval(margin+selcol*grid_size,margin+selrow*grid_size, CIRCLE_SIZE,CIRCLE_SIZE); private class MyListener extends MouseAdapter { public void mouseclicked(mouseevent e) { // Överhoppas här Tillståndsvariabeln hasselection håller reda på om någon kula är vald; i så fall finns rad och kolonn i selcol och selrow. Detta framgår också i paintcomponent, där en vit kula ritas endast om hasselection är true. Muslyssnarens metod mouseclicked, som anropas av Java när användaren klickar med musen och som måste se till att dessa variabler har rätt värden, har överhoppats. En huvudklass med en main-rutin, som skapar ett modellobjekt, ett vyobjekt och ett fönster samt placerar vyn i fönstret, packar detta och gör det synligt. Överhoppas. Dina uppgifter är nu: (a) Definiera metoden move i SolitaireModel. (4 p) (b) Definiera metoden mouseclicked i SolitaireView. (4 p) 5

6. Vi återknyter till klassen Horse i uppgift 3. Observera dock att man kan lösa denna uppgift även om man inte löst uppgift 3. Vi vill utveckla en klass HorseLib som innehåller funktioner och subrutiner relaterade till klassen Horse. Din uppgift är att påbörja detta genom att definiera en subrutin public static void printdescendants(horse h) som kan skriva ut namnet på en häst och alla dess ättlingar (dvs barn, barnbarn, barnbarnsbarn... ). Här är ett exempel på utskrift: Brunte Arvid Tina Svarten Karolina Sverker Blanka Lotta Rosa Detta är resultatet av anrop av printdescendants(h) där hästen h heter Brunte och har tre barn: Arvid, Blanka och Lotta. Arvid i sin tur har tre barn (Tina, Svarten och Sverker) samt ett barnbarn (Karolina, barn till Svarten). Blanka har inga barn, medan Lotta har barnet Rosa. Utskriften ska se ut som ovan, dvs en häst per rad och med varje generation indragen fyra positioner. (6 p) 6