Tentamen i Objektorienterad programmering E

Relevanta dokument
Tentamen i Objektorienterad programmering E

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering

Laboration 4: Game of Life

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

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

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

Lösningsförslag till tentamen

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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

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

Tentamen FYTA11 Javaprogrammering

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

Lösningsförslag tentamen FYTA11 Java

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

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

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

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

Föreläsning 5-6 Innehåll

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

Tentamen, EDAA20/EDA501 Programmering

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

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Lösningsförslag till tentamen

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

ID1004 Laboration 3, 5-6 November 2012

Rita Egna Bilder, Timer

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

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

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

DAT043 - Föreläsning 7

Laboration 3 GUI-programmering

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

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

Lösningsförslag till tentamen

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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

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

Laboration 4: Digitala bilder

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

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

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

Properties. Användbara metoder som kan anropas i propertychanged:

Mer om grafiska komponenter. Händelsestyrda program

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

Lösningsförslag till tentamen

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

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

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

DAT043 Objektorienterad Programmering

Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

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

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

Laboration 24 Databasen MySQL och java

Exempel på användning av arv: Geometriska figurer

Lektion Händelsehanterare

TENTAMEN OOP

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

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

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

Tentamen Programmering fortsättningskurs DIT950

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Typkonvertering. Java versus C

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

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

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

TENTAMEN OOP

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

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

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

PROGRAMMERINGSTEKNIK TIN212

Monday, November 16, Senaste Labben

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

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

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

Tentamen, EDAA10 Programmering i Java

Transkript:

CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA546 Tentamen i Objektorienterad programmering E Tisdagen 11 januari 2011, 8.30 12.30. Jourhavande lärare: Pelle Evensen, tel 0708 482879. 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. (a) Definiera en funktion public static int count(int n, int[] a) som returnerar antalet gånger heltalet n förekommer som element i fältet a. (4 p) (b) Skriv en klass Uppgift1 som inkluderar funktionen count från (a) samt en main-rutin som testar count. Testet ska göras genom att n följt av ett antal tal som ska utgöra elementen i a läses från kommandoraden och resultatet av att anropa count skrivs ut. (4 p) Exempel på körningar: > java Uppgift1 1 2 9 1 1 7 1 förekommer 2 gånger > java Uppgift1 3 3 4 5 3 förekommer 1 gånger > 2. Betrakta följande två klasser: public class Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; public int getx() {return x; public int gety() {return y; public class Uppgift2 { public static void proc(point p, Point q) { p = q; 1

public static void main(string[] args) { Point p1 = new Point(1,2); Point p2 = new Point(3,4); Point p3 = p1; proc(p1,p2); System.out.println(p1.getX()); System.out.println(p2.getX()); System.out.println(p3.getX()); Vilken utskrift fås när programmet Uppgift2 körs? Illustrera med en principskiss med minnesceller och pekare just innan programmet avslutas. (4 p) 3. Ett program behöver hantera vägar i planet som i nedanstående exempel: (x0,y0) (x2,y2) (x3,y3) (x4,y4) (x1,y1) (x5,y5) (x6,y6) (x7,y7) Vägen bestäms i exemplet av punkterna (x0,y0),(x1,y1),... (x7,y7); antalet punkter i en väg är förstås inte alltid åtta. Definiera en klass Path vars instanser representerar en sådan väg. Som hjälpklass får du använda klassen Point från uppgift 2. Konstrueraren i Path ska ta en punkt (startpunkten) som argument. Vidare ska det finnas en metod addpoint, som också tar en punkt som argument och lägger till denna punkt som ny slutpunkt. Slutligen ska det finnas en metod getpoints som returnerar hela vägen, dvs alla punkterna, i någon form. Du får själv välja resultattyp; det kan vara en lista eller ett fält eller kanske något annat. (10 p) 4. Följande interface beskriver vad ett ImageFilter är: public interface ImageFilter { public String getmenuname(); public void apply(int[][][] src, int[][][] dest); Interfacet används i ett bildbehandlingsprogram; de två fälten src och dest representerar bägge en bild. Elementet src[x][y][c] betecknar intensiteten av färgen c i bildpunkten med koordinater (x,y). Här står c=0 för rött, c=1 för grönt och c=2 för blått. Ett filter filtrerar bilden i src på något sätt och lämnar resultatet i dest. Ett filter som ger den ungefärliga effekten att se bilden genom en frostad glasskiva får man genom att låta intensiteterna i punkten (x,y) i dest tas från en annan, närliggande punkt i src; denna punkt väljs slumpmässigt så att dess x- och y-koordinater ligger högst fem bildpunkter från x resp y. Implementera detta filter. (8 p) 2

5. Vi betraktar ett program som simulerar kristallbildning i en joniserad lösning. Inga kunskaper om jonisering eller kristallbildning behövs för att förstå och lösa problemet. Två skärmdumpar av programmets gränssnitt under exekvering är följande: Den växande kristallen är svart och består av ett stort antal partiklar, var och en endast en pixel stor. Kristallen växer genom en simulerad process där en partikel släpps i en slumpmässigt vald punkt på en cirkelperiferi, som man kan ana i den högra bilden. Partikeln startar då en slumpvandring, där den om och om igen flyttar sig ett steg åt vänster, höger, uppåt eller nedåt tills endera av två saker inträffar: Partikeln hamnar i en punkt (x,y) som är granne till kristallen, dvs någon av punkterna till höger, vänster, ovanför eller nedanför ingår redan i kristallen. Partikeln fastnar då på kristallen, som därmed växer genom att punkten (x,y) också kommer att ingå. Partikeln hamnar vid kanten på bilden; den anses då försvinna och bidrar inte till kristallens tillväxt. Från början består kristallen av en enda partikel, i fönstrets mitt. När man trycker på Runknappen startar simuleringen och man kan se kristallen växa. I bilden till vänster har simuleringen inte hunnit så långt, medan man i den högra bilden är nära dess slut; när hela startcirkeln ingår i kristallen växer kristallen inte mer. Slutligen noterar vi att Stop-knappen stoppar simuleringen, medan Reset-knappen stoppar simuleringen och återställer programmet till utgångsläget, där kristallen består av en enda partikel mitt i bilden. Programmet består av fyra klasser: En modellklass CrystalModel, vars instanser lagrar information om kristallen. Klassen har metoder för att uppdatera klassen genom att släppa en ny partikel och låta den vandra, för att återställa till ursprungsläget samt för att avläsa tillståndet. En vyklass CrystalWorld, en subklass till JPanel, som används för att visualisera kristallen. Här omdefinieras paintcomponent. En vyklass CrystalView, också en subklass till JPanel, som placerar kristallvyn och de tre knapparna lämpligt i förhållande till varandra samt definierar lyssnare till knapparna och den Timer som sköter animeringen. En huvudklass Main, som innehåller en main-rutin. Denna skapar ett modellobjekt, en vy och ett fönster samt placerar vyn i fönstret och gör detta synligt på skärmen. De tre förstnämnda klasserna ges på följande sidor. Dina uppgifter är nu följande: 3

(a) Koden i metoden actionperformed i klassen ResetListener (i CrystalView) har tagits bort. Lägg till den igen. (3 p) (b) Skriv klassen Main. (3 p) (c) Modifiera programmet så att längst ner till vänster i panelen med kristallen skrivs ett heltal, antalet partiklar i kristallen. Detta antal är från början 1 och växer med ett varje gång en ny partikel fastnar, så att man kan hela tiden kan se antalet partiklar i kristallen. Du behöver bara beskriva de ändringar som görs i de olika klasserna. (4 p) import javax.swing.*; import java.awt.*; public class CrystalWorld extends JPanel { private CrystalModel model; private final int size; public CrystalWorld(CrystalModel model) { this.model = model; size = model.getwidth(); setpreferredsize(new Dimension(size,size)); setbackground(new Color(225,225,225)); public void paintcomponent(graphics g) { super.paintcomponent(g); g.setcolor(color.black); for(int i=0; i<size; i++) { for (int j=0; j<size; j++) { if (model.getcell(i,j)) { g.fillrect(i,j,1,1); 4

public class CrystalModel { private int width, mid; private boolean[][] crystal; private double rad; public CrystalModel(int r) { width = 2*r + 1; mid = r; rad = 0.8 * r; reset(); public int getwidth() {return width; public boolean getcell (int x, int y) {return crystal[x][y]; public void reset() { crystal = new boolean[width][width]; crystal[mid][mid] = true; public void step() { double angle = Math.random() * 2 * Math.PI; int x = mid + (int)(rad * Math.cos(angle)); int y = mid + (int)(rad * Math.sin(angle)); while (true) { if (x == 0 y == 0 x == width-1 y == width-1) return; if (crystalneighbor(x,y)) { if (!crystal[x][y]) { crystal[x][y] = true; return; switch ((int)(math.random() * 4)) { case 0: x--; break; case 1: x++; break; case 2: y--; break; case 3: y++; break; public void step(int k) { for (int i=0; i<k; i++) step(); private boolean crystalneighbor(int x, int y) { return crystal[x-1][y] crystal[x+1][y] crystal[x][y-1] crystal[x][y+1]; 5

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class CrystalView extends JPanel { private CrystalModel model; private CrystalWorld world; private Timer timer; public CrystalView(CrystalModel model) { this.model = model; world = new CrystalWorld(model); JButton resetbutton = new JButton("Reset"); JButton runbutton = new JButton("Run"); JButton stopbutton = new JButton("Stop"); setlayout(new BorderLayout()); add(world,borderlayout.north); add(resetbutton,borderlayout.west); add(runbutton,borderlayout.center); add(stopbutton,borderlayout.east); timer = new Timer(20,new StepListener()); resetbutton.addactionlistener(new ResetListener()); runbutton.addactionlistener(new RunListener()); stopbutton.addactionlistener(new StopListener()); private class StepListener implements ActionListener { model.step(200); world.repaint(); private class ResetListener implements ActionListener { // To be completed by you. private class RunListener implements ActionListener { timer.start(); private class StopListener implements ActionListener { timer.stop(); 6