Tentamen i Objektorienterad programmering E

Relevanta dokument
Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering E

Laboration 4: Game of Life

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Instuderingsfrågor, del E

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

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

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

Lösningsförslag tentamen FYTA11 Java

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

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

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

Tentamen FYTA11 Javaprogrammering

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

Tentamen, EDAA20/EDA501 Programmering

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Tentamen FYTA11 Javaprogrammering

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Tentamen. Lösningsförslag

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

Föreläsning 2, vecka 8: Repetition

2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar

JAVAUTVECKLING LEKTION 8

Föreläsning 1, vecka 8: Att förbereda sig för tentan

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

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Tentamen i Grundläggande programmering STS, åk 1 fredag

DAT043 Objektorienterad Programmering

Laboration 24 Databasen MySQL och java

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

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

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

ID1004 Laboration 3, 5-6 November 2012

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

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

Instuderingsfrågor, del D

Lösningsförslag till tentamen

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Rita Egna Bilder, Timer

Föreläsning 14: Grafik & mera händelsehantering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Malmö högskola 2008/2009 CTS

2D1339 Programkonstruktion för F1, ht 2004

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA10 Programmering i Java

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Lösningsförslag till tentamen

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

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

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Lösningsförslag till tentamen

Föreläsning 3-4 Innehåll

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Laboration A Objektsamlingar

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

TENTAMEN OOP

Exempel på användning av arv: Geometriska figurer

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

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

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

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Tentamen i Programmering

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Tentamen FYTA11 Javaprogrammering

Lösningsförslag övning 2.

Tentamen OOP

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

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

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

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

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

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

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Föreläsning 6: Metoder och fält (arrays)

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

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Algoritmer. Två gränssnitt

Lösningsförslag till tentamen

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Lösningsförslag till tentamen

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TENTAMEN OOP

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

Transkript:

CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA546 Tentamen i Objektorienterad programmering E Måndagen 8 mars 2010, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 1040. 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 swap(int i, int j, int[] a) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; public static void main(string[] args) { int[] a = {3, 7, 9; swap(0,2,a); for (int i=0; i<a.length; i++) System.out.print(a[i] + " "); System.out.println(); Vilken utskrift fås när programmet körs? Förklara kortfattat, gärna med hjälp av en figur. (4 p) 2. I Game of Life studeras utvecklingen för en population av celler i en rektangulär värld. En modellklass LifeModel i ett program som kan simulera denna utveckling lagrar den aktuella generationen i en tillståndsvariabel med deklarationen private boolean[][] isalive; Fältet skapas i konstrueraren: public LifeModel (int width, int height) { isalive = new boolean[width][height]; 1

Cellen i position (i,j) är levande om isalive[i][j] är true. Förutom de metoder som vi tidigare sett att modellklassen behöver vill vi lägga till ytterligare en metod: public int alivecells() som returnerar antalet levande celler i den aktuella generationen. Definiera denna metod. Du behöver inte definiera klassen i övrigt. (4 p) 3. En enkel transform av en talföljd x 0,x 1,x 2,...x n 1 är löpande medelvärdesbildning: den transformerade följden är y 0,y 1,y 2,...y n 1, där y i är medelvärdet av x i 1, x i och x i+1, för i = 1,2,...n 2. Det första och sista elementet i resultatet kan inte beräknas med medelvärdesbildning och är desamma som motsvarande element i argumentet. Ett program som läser en följd tal på kommandoraden samt beräknar och skriver ut transformen kan som exempel ge följande resultat vid körning: > java Uppgift2 1.5 1.7 2.2 2.1 2.3 1.9 1.5 1.8 2.0 2.2 2.1 1.9 > Det andra talet i utskriften, 1.8, är beräknat som medelvärdet av 1.5, 1.7 och 2.2, och så vidare. (a) Definiera en statisk funktion public static double[] average3(double[] a) som beräknar denna transform. (4 p) (b) Skriv ett program Uppgift2 som testar funktionen average3 och kan köras på ovanstående sätt. (4 p) 4. I ett Java-program för en webbutik finns bland annat en klass Product som lagrar information om produkter. Denna klass innehåller de publika metoderna String getname() och int getprice(). Dessutom behöver programmet en klass ShoppingCart. En instans av denna klass lagrar kundens inköpslista (eller kundvagn, som den ofta kallas i svenska webbutiker) under en pågående session. Klassen erbjuder följande metoder: public void add(product product, int quantity). Lägger till quantity enheter av produkten product till inköpslistan. public int totalamount(). Returnerar det totala belopp kunden ska betala för valda varor. public void print(printstream out). Skriver ut inköpslistan på out, med en vara per rad. Formatteringen av raden är inte viktig, men produktnamn, pris och antal valda ska finnas med. Definiera klassen ShoppingCart. (8 p) 2

5. Fyra i rad är ett spel med två deltagare som har brickor i varsin färg. Man turas om att placera brickor på spelplanen, som är vertikal så att brickorna som placeras i en kolumn ramlar neråt och hamnar så lågt som möjligt. Nedanstående bilder visar två möjliga spellägen (vita cirklar är tomma; grått och svart är här färgerna för de två spelarnas brickor): Den spelare som står på tur väljer en kolumn; om denne i den vänstra bilden väljer mittkolumnen kommer den nya brickan att hamna omedelbart ovanför de tre gråa brickorna. Målet är att få fyra brickor i rad, horisontellt, vertikalt eller diagonalt. I bilden till höger har spelaren med grå brickor just vunnit med en diagonal rad som börjar nertill i andra kolumnen och växer uppåt åt höger. I denna uppgift betraktar vi ett program där programmet spelar mot en mänsklig användare. Programmet är ofullständigt i flera avseenden: Datorns strategi är inget vidare: kolumnen för nästa bricka väljs på måfå. Programmet upptäcker inte när någon spelare har vunnit. Programmet består av tre klasser; en modellklass, en vyklass och en huvudklass med en main-rutin. Dessutom används en uppräkningstyp för att representera tillståndet i en viss position: public enum State {USER, PROGRAM, FREE Vyklassen är följande: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FIARView extends JPanel { private static final int SIZE = 40; private static final int DIAMETER = SIZE-4; private FIARModel model; public FIARView(FIARModel model) { this.model = model; setpreferredsize(new Dimension(SIZE*model.getWidth(), SIZE*model.getHeight())); setbackground(color.gray); setopaque(true); 3

addmouselistener(new MyListener()); public void paintcomponent(graphics g) { super.paintcomponent(g); for (int x = 0; x < model.getwidth(); x++) { for(int y = 0; y<model.getheight(); y++) { State s = model.getstate(x,y); g.setcolor(color(s)); g.filloval(size*x+2, SIZE*(model.getHeight()-1-y)+2, DIAMETER, DIAMETER); g.setcolor(color.black); g.drawoval(size*x+2, SIZE*(model.getHeight()-1-y)+2, DIAMETER, DIAMETER); private class MyListener extends MouseAdapter { public void mouseclicked (MouseEvent e) { // återstår att definiera private static Color color (State s) { if (s==state.user) return Color.YELLOW; if (s==state.program) return Color.BLUE; return Color.WHITE; Huvudklassen är import javax.swing.*; public class FIARMain { public static void main(string[] args) { FIARModel model = new FIARModel(7, 6); FIARView view = new FIARView (model); JFrame frm = new JFrame("Four in a Row"); frm.getcontentpane().add(view); frm.pack(); frm.setvisible(true); (a) Definiera modellklassen FIARModel. Den ska lagra spelets tillstånd och tillhandahålla följande publika metoder: void drop(int x). Ett anrop av denna metod placerar spelarens bricka i kolumn x och gör därefter ett slumpmässigt drag för programmets räkning. Om 4

kolumnen x redan är full görs ingenting (inte heller programmets drag). State getstate(int x, int y). Returnerar tillståndet i kolumn x, rad y. Kolumner numreras från vänster och rader med början längst ner. int getwidth(). Returnerar antalet kolumner i spelplanen. getheight(). Returnerar antalet rader i spelplanen. (8 p) (b) Komplettera metoden mouseclicked i FIARView. Meningen är att användaren ska kunna klicka med musen var som helst i den kolumn han väljer. (2 p) 6. Följande interface kan användas för att hantera funktioner av en reell variabel i Java: public interface Function { public double apply(double x); Som exempel betraktar vi uppgiften att bestämma ett nollställe till en funktion: Antag att f är kontinuerlig och strikt växande på intervallet a x b, samt att f (a) < 0 och f (b) > 0. Då finns precis en mellanliggande punkt x 0 sådan att f (x 0 ) = 0. Definiera en statisk funktion public static double findzero(function f, double a, double b, double eps) som tar som argument en funktion f och ändpunkterna a och b på ett intervall så att ovanstående villkor är uppfyllda, samt en tolerans ε > 0. Funktionen findzero ska returnera en approximation y av nollstället x 0, sådan att y x 0 < ε. Skriv sedan ett program som finner det positiva nollstället till f (x) = x cosx med ett fel som är högst 10 6. (6 p) Ledning: findzero kan beräkna f :s värde i intervallets mittpunkt och därmed avgöra i vilken halva nollstället ligger. 5