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

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

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

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

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

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

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

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

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

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Omentamen FYTA11 Javaprogrammering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface)

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Tentamen FYTA11 Javaprogrammering

Föreläsning 13: Swing (GUI), händelser, timer

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

Tentamen FYTA11 Javaprogrammering

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

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

Rita Egna Bilder, Timer

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

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

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

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Laboration 15 Grafiskt användargränssnitt

Laboration 4: Game of Life

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Mer om grafiska komponenter. Händelsestyrda program

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

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

Föreläsning 3: Händelsestyrda program och användargränssnitt

Exempel på användning av arv: Geometriska figurer

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

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

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Händelsestyrda program

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

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

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

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

Tentamen i Objektorienterad programmering E

Lösningsförslag tentamen FYTA11 Java

Föreläsning 2, vecka 8: Repetition

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

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

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

Java-concept och Swing. Swing low, sweet chariot

Lösningsförslag till tentamen

Projekt 2 XL. Observer-mönstret

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Tentamen FYTA11 Javaprogrammering

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

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

PROGRAMMERING-Java TENTAMINA

PROGRAMMERINGSTEKNIK TIN212

Monday, November 16, Senaste Labben

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

TENTAMEN OOP

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

PROGRAMMERING-Java Omtentamina

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

Tentamen i Objektorienterad programmering

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar

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

Föreläsning 1, vecka 7: Rekursion

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

PROGRAMMERING-JAVA TENTAMINA

Lab5 för prgmedcl04 Grafik

Föreläsning 11: Rekursion

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

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

LYCKA TILL!!! TENTAMEN I Programmeringsteknik F1. Var vänlig och läs detta: CTH TIN 211. DATAVETENSKAP Göteborg ( ) TENTAMEN

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

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 )

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

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

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

Tentamen i Grundläggande Programvaruutveckling, TDA548

Lösningsförslag till tentamen

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

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

Lektion Händelsehanterare

Grafiska komponenter.

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

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

TENTAMEN OOP

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen.

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

Tentamen i Objektorienterad programmering E

Lösningsförslag till tentamen

ID1004 Laboration 3, 5-6 November 2012

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

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Transkript:

Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Onsdag, 2016-08- 24, 08:30-12:30, byggnad M Ansvarig lärare: Magnus Myréen besöker tentan två gånger Vitsordsgränser: 3=28p, 4=38p, 5=48p, max 60p. Hjälpmedel: på sista sidan av dokument finns ett utdrag ur Javas API Resultat: skickas per epost från Ladok Lösningar: kommer att finnas på kurshemsidan Granskning av rättning: tider för detta kommer att finnas på kurshemsidan Kom ihåg att inte fastna på en uppgift. Bestäm i förväg din egen tidsgräns per uppgift. Lycka till! Uppgift 1: [10 poäng totalt] rekursion, arv, referensvärden a) Förklara kort vad rekursion innebär i Java. [2 poäng] Rekursion innebär att man anropar metoden från sig själv. Vissa sorterings algoritmer är lättast implementerade med hjälp av rekursion. b) Vad skrivs ut när följande Test program körs? [8 poäng] class T1 { public boolean odd (int n) { if (n == 0) { return false; { return even(n- 1); public boolean even (int n) { if (n == 0) { return true; { return odd(n- 1); class T2 extends T1 { public boolean odd (int n) { return false; public class Test { public static void print_it(int i, int[] a, int[] b) { if (i == 0) { return; i = i - 1; System.out.println(a[i]); print_it(i,b,a); public static void main(string[] args) { System.out.println("Test A:"); int[] a = {1,2,3,4; int[] b = {6,7,8,9; print_it(a.length,a,b); System.out.println("Test B:"); T1 t1 = new T1(); T2 t2 = new T2(); System.out.println(t1.even(4)); System.out.println(t1.odd(4)); System.out.println(t2.even(4)); System.out.println(t2.odd(4));

Tips: Var noggrann! Bra att rita minnesplatser och pilar som vi gjorde på föreläsningarna. Test A: 4 8 2 6 Test B: true false false false Uppgift 2: [5 poäng totalt] loopar, arrays Implementera en metod som summerar värdena i en två dimensionell matris av heltal. Metoden bör ha följande signatur: public int sum(int[][] input); Obs. Se till att metoden aldrig kastar en exception eller på annat sätt kraschar. public int sum(int[][] input) { if (input == null) { return 0; int res = 0; for (int i = 0; i < input.length; i++) { if (input[i]!= null) { for (int j = 0; j < input[i].length; j++) { res = res + input[i][j]; return res; Uppgift 3: [10 poäng totalt] loopar, stringar, arrays Denna uppgift ber dig skriva en metod som hittar namn på personer som har födelsedagar som faller på samma dag. Metoden bör heta printmatchingbirthdays. Följande testprogram illustrerar vad denna metod ska skriva ut. String[] data = { "1963-02- 05 Lille Skutt", "1979-06- 19 Vargen", "1942-02- 15 Skalman", "1997-05- 12 Nalle- Maja", "1989-05- 17 Krösus Sork", "1959-09- 25 Kapten Buster", "1994-02- 15 Brum", "1963-04- 23 Bamse", "1992-02- 15 Teddy", "1938-09- 25 Reinard" ; printmatchingbirthdays(data); Testprogrammet ovan ska skriva ut följande: Skalman has the same birthday as Brum. Skalman has the same birthday as Teddy. Kapten Buster has the same birthday as Reinard.

Brum has the same birthday as Teddy. Implementera metoden printmatchingbirthdays. [10 poäng] Obs. Du kan anta att data alltid kommer i precis samma format som i exemplet ovan. Obs. Ordningen av raderna i utskriften behöver inte vara precis som ovan. public String getname(string str) { return str.substring(11); public boolean ismatch(string line1, String line2) { String s1 = line1.substring(5,10); String s2 = line2.substring(5,10); return s1.equals(s2); public void printmatchingbirthdays (String[] a) { if (a == null) { return; for (int i=0; i<a.length; i++) { for (int j=i+1; j<a.length; j++) { if (ismatch(a[i],a[j])) { System.out.println(getName(a[i]) + " has the same birthday as " + getname(a[j]) + "."); Uppgift 4: [20 poäng totalt] grafik, händelsehantering, att skriva klass Din uppgift är att skriva kod för ett mycket enkelt ritprogram. Ritprogrammet bör: Starta med en tom yta i ett fönster. [3 poäng] Varje gång man klickar i fönstret bör en liten prick ritas där det klickades. [7 poäng] Tidigare ritade prickar får aldrig försvinna. [10 poäng] Obs. Se till att prickarna blir kvar fast man förstorar fönstret. import java.awt.*; // denna rad inte vikitigt i tentan import java.awt.event.*; // denna rad inte vikitigt i tentan import javax.swing.*; // denna rad inte vikitigt i tentan

public class Dots extends JFrame { private class Dot { private int x, y; private Dot next; public Dot (Dot next, int x, int y) { this.x = x; this.y = y; this.next = next; public void draw(graphics g) { g.filloval(x- 3,y- 3,6,6); if (next!= null) { next.draw(g); private class Surface extends JPanel implements MouseListener { Dot d = null; public void paintcomponent(graphics g) { super.paintcomponent(g); if (d!= null) { d.draw(g); ; public void mouseclicked(mouseevent e) { d = new Dot(d,e.getX(),e.getY()); this.repaint(); public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { public Dots() { Surface panel = new Surface(); panel.addmouselistener(panel); add(panel); setvisible(true); public static void main(string[] args) { new Dots(); Uppgift 5: [15 poäng totalt] swing, att skriva klass, händelsehantering, Timer Denna uppgift ber dig skriva kod för ett program som simulerar ett trafikljus, som består av en röd, en gul och en grön lampa. Så här bör detta program bete sig: A. När programmet startar bör endast den röda lampan vara tänd. B. 28 sekunder senare bör den gula lampan tändas. Den röda är ännu tänd.

C. Två sekunder senare slocknar den röda och gula lampan; samtidigt kommer den gröna på. D. Efter att den gröna lampan varit på i 30 sekunder ska den slockna och den gula ska tändas. E. Den gula ska lysa i 3 sekunder sedan slocknar den. Den röda tänds. Stegen repeteras från A. Deluppgifter: a) Skriv en klass för lampor. Kalla den Light och se till att den ärver JLabel så att den ser ut ungefär som i exemplen ovan. Klassen bör ha en konstruktör som tar en string som beskriver färgen på lampan när den lyser. När lampan är släkt ska det stå svart i JLabelens textområde. Lampan ska börja i släckt tillstånd. Man ska kunna släcka och tända lampan med instansmetoder. [5 poäng] public class Light extends JLabel { String colour; public Light (String colour) { super("svart",swingconstants.center); this.colour = colour; public void turnon() { this.settext(colour); public void turnoff() { this.settext("svart");

b) Skriv klassen för trafikljuset. Kalla klassen TrafficLight. TrafficLight- klassen bör visa ett fönster på rutan och placera tre lampor (instanser av Light) som i illustrationerna ovan. [3 poäng] Skapa en Timer- instans och se till att trafikljusen beter sig exakt som beskrivet ovan. Förklara din lösning. [7 poäng] public class TrafficLight extends JFrame { public TrafficLight() { JPanel main = new JPanel(new GridLayout(3,1)); final Light red = new Light(" röd "); final Light amber = new Light(" gul "); final Light green = new Light(" grön "); main.add(red); main.add(amber); main.add(green); add(main); red.turnon(); pack(); setvisible(true); Timer t = new Timer(1000, new ActionListener() { private int time = 0; public void actionperformed(actionevent e) { if (time == 28) { amber.turnon(); else if (time == 30) { red.turnoff(); amber.turnoff(); green.turnon(); else if (time == 60) { amber.turnon(); green.turnoff(); else if (time == 65){ red.turnon(); amber.turnoff(); time = 0; time = time + 1; ); t.start(); public static void main(string[] args) { new TrafficLight();

Utdrag ur Javas API. Obs. Man behöver inte använda alla dessa klasser. Man får också använda annat från Javas API. Interface ActionListener void actionperformed(actionevent e) Invoked when an action occurs. Class ActionEvent extends AWTEvent extends EventObject extends Object String getactioncommand() Returns the command string associated with this action. Class Component extends Object int getheight() Returns the current height of this component. int getwidth() Returns the current width of this component. void repaint() Repaints this component. Class Container extends Component extends Object Component add(component comp) Appends the specified component to the end of this container. Class Graphics extends Object void drawline(int x1, int y1, int x2, int y2) Draws a line, using the current color, between the points (x1, y1) and (x2, y2) in this graphics context's coordinate system. abstract void fillpolygon(int[] xpoints, int[] ypoints, int npoints) Fills a closed polygon defined by arrays of x and y coordinates. abstract void filloval(int x, int y, int width, int height) Fills the specified oval. abstract void setcolor(color c) Sets this graphics context's current color to the specified color. Class JComponent extends Container extends Component extends Object protected void paintcomponent(graphics g) Calls the UI delegate's paint method, if the UI delegate is non- null. public void setbackground(color bg) Sets the background color of this component. Class JFrame extends Frame extends Window extends Container extends Component extends Object Container getcontentpane() Returns the contentpane object for this frame. Class JLabel extends JComponent extends Container extends Component extends Object JLabel(String text) Creates a JLabel instance with the specified text. void settext(string text) Defines the single line of text this component will display. Class JPanel extends JComponent extends Container extends Component extends Object JPanel() Creates a new JPanel with a double buffer and a flow layout. Class MouseEvent extends InputEvent extends ComponentEvent extends Object int getx() Returns the vertical x position of the event relative to the source component. int gety() Returns the vertical y position of the event relative to the source component. Interface MouseListener void mouseclicked(mouseevent e) Invoked when the mouse button has been clicked (pressed and released) on a component. Class String extends Object int length() Returns the length of this string. String substring(int beginindex, int endindex) Returns a new string that is a substring of this string. static String valueof(int i) Returns the string representation of the int argument. Class Timer extends Object Timer(int delay, ActionListener listener) Creates a Timer and initializes both the initial delay and between- event delay to delay milliseconds. void start() Starts the Timer, causing it to start sending action events to its listeners. Class Window extends Container extends Component extends Object public void setlocation(int x, int y) Moves this component to a new location. The top- left corner of the new location is specified by the x and y parameters in the coordinate space of this component's parent. void setvisible(boolean b) Shows or hides this Window depending on the value of parameter b.