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

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

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

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

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

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

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.

Det finns en referensbok (Java) hos vakten 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

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

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

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen i Programmeringsteknik I, ES,

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

Tentamen i Programmeringsteknik I

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

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

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

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 i Programmeringsteknik I

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

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

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

Del A (obligatorisk för alla)

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

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

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

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.

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 2 och MN Skrivtid: Inga hjälpmedel.

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

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

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

PROGRAMMERING-Java TENTAMINA

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

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

Tentamen i Objektorienterad programmering

Föreläsning 5-6 Innehåll

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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 för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Lösningsförslag tentamen FYTA11 Java

trafiksimulering Intro OU5 trafiksimulering

Del A (obligatorisk för alla)

TENTAMEN OOP

Exempel på användning av arv: Geometriska figurer

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen, EDAA20/EDA501 Programmering

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen i Programmeringsteknik I,, KandMa/Fy,

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen i Programmeringsteknik I

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

Tentamen. Lösningsförslag

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

Lösningsförslag till tentamen

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

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

Tentamen i Objektorienterad programmering E

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

Lösningar för tenta 3 DAT043,

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]

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

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

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

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

Tentamen FYTA11 Javaprogrammering

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

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Tentamen FYTA11 Javaprogrammering

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

Presentation av trafiksimuleringsprojektet

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Malmö högskola 2008/2009 CTS

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 för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

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

TDDD78 Viktiga begrepp, del 2

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:

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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

PROGRAMMERING-Java Omtentamina

ID1004 Laboration 3, 5-6 November 2012

Presentation av obligatoriska uppgiften trafiksimulering. Ett större program med flera klasser

Transkript:

Tentamen Programmeringsteknik I 2011-12-13 Skrivtid: 1400-1700 Hjälpmedel: Java-bok 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. Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer och pin-kod (eller namn om du saknar sådan) på alla papper. Skriv inte längst upp i vänstra hörnet - det går inte att läsa där efter sammanhäftning. Fyll i försättssidan fullständigt. 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. Programkod skall vara läslig dvs den skall vara vettigt strukturerad och indenterad. Namn på variabler, metoder, klasser etc skall vara beskrivande men kan ändå hållas ganska korta. Betygsgränser: 15 ger säkert 3, 18 ger säkert 4, 21 ger säkert 5. Lycka till! Tom 1

Uppgifter 1. Klassen Measurements representerar en följd av mätvärden public class Measurements { private double[] m; // Mätvärden private int n; // Aktuellt antal värden public Measurements() { this(10); public Measurements(int size) { public String tostring() { public void add(double v) { m[n] = v; n++; public double mean() { public double max() { public Measurements smooth() { // Testprogram public static void main(string[] args) { Measurements ms = new Measurements(); for (int i=0; i<10; i++) { ms.add(math.random()); System.out.println("Original : " + ms); System.out.println("Mean value : " + ms.mean()); System.out.println("Maximal value: " + String.format("%4.2f", ms.max())); System.out.println("Smooth : " + ms.smooth()); ms.add(42.); // Ger fel Resultat vid körning: > run Measurements Original : [ 0,11 0,76 0,45 0,13 0,64 0,90 0,60 0,68 0,89 0,73 ] Mean value : 0.589112126781489 Maximal value: 0,90 Smooth : [ 0,11 0,44 0,45 0,41 0,56 0,72 0,73 0,72 0,77 0,73 ] java.lang.arrayindexoutofboundsexception: 10 at Measurements.add(Measurements.java:23) at Measurements.main(Measurements.java:86) a) Skriv klar konstruktorn public Measurements(int n) som skapar ett objekt med plats för n mätvärden. b) Skriv klar metoden public double mean() som beräknar och returnerar medelvärdet av de lagrade värden. 2

c) Skriv klar metoden public double max() som beräknar och returnerar det största av de lagrade värdena. d) Skriv klar tostring-metoden. Se main-metoden och körexemplet för specifikation av användning och resultat. Ledning: Studera main-metoden för att se hur man kan åstadkomma exakt två decimaler när man konverterar en double till en sträng. e) Skriv klar metoden public Measurements smooth(). Metoden skall skapa och returnera ett nytt Measurements-objekt med lika många värden som i originalobjektet. Värdena på första och sista plats skall vara lika. För övriga värden gäller att värdet på plats i skall vara medelvärdet av värdena på plats i 1, i, i + 1 i originalobjektet. f) Med den givna koden kommer programmet avbrytas om man försöker lagra fler värden än det antal man givit i konstruktorn (se körexemplet). Modifiera programmet så att det går att lagra fler värden än man angivit i konstruktorn. Vad, var och hur skall man ändra? Anmärkning: uppgiften går att lösa på mer än ett sätt. 2. I en simulering av ett trafiksystem behöver man en klass TrafficLight för att representera trafikljus. Andra klasser i systemet kommer att vara filer, fordon, rondeller mm. Simuleringen skall göras med en tidsstegning. Designa och implementera klassen TrafficLight! Anm: Det räcker med att skriva koden men om du känner dig osäker på detaljer kan du presentera designen med hjälp av klassdiagram. 3. Nedan finns ett program som simulerar partiklar som rör sig i en kvadratisk 2- dimensionell låda. Lådan har sina hörn i punkten (0,0) och (1,1). Partiklarna studsar mot väggarna men, för enkelhets skull, inte mot varandra. Mitt i lådan finns ett svart hål som alltså har centrum i punkten (0.5, 0.5). När en partikel nuddar det svarta hålet förintas partikeln och hålet area växer med partikelns area. Allteftersom tiden går minskar således antal partiklar och det svarta hålet växer. Bilden nedan till vänster visar hur det ser ut när programmet startar och bilden till höger hur det ser ut efter 400 tidssteg. 3

Programmet består av 4 klasser: Vector, Particle, Box och Gui. Klassen Vector används för att representera partiklarnas position och hastighet. Klassen Gui sätter upp systemet, driver simuleringen och ritar ögonblicksbilder. Av utrymmesskäl är vissa delar av koden (t ex alla import-satser) utelämnade a) Skriv färdigt metoden copy i klassen Vector! Varför vill man ha en sådan metod? b) I klassen Particle finns en metod move som flyttar partikeln ett steg med hastighetsvektorn och hanterar studs mot väggarna. Om partikeln nuddar det svarta hålet skall den dödförklaras och överlåta sin yta till det svarta hålet. Skriv klart metoden! c) Klassen Box har en metod sweep som tar bort alla dödförklarade objekt ur partikelsamlingen. Skriv klart metoden! Varför kan metoden move i ovanstående deluppgift ombesörja detta? Anm: I koden finns konstruktioner och begrepp som inte ingått i kursen (bl a grafikhanteringen) men man behöver inte kunna eller förstå dessa för att lösa uppgifterna. 4

public class Vector { private double x; private double y; public Vector(double x, double y) { this.x = x; this.y = y; public String tostring() { return "<" + x + ", " + y + ">"; /** Modify this vector by adding v */ public void add(vector v) { x += v.x; y += v.y; /** Returns the distance from this vector (point) to vector (point) v */ public double distance(vector v) { return Math.sqrt((x-v.x)*(x-v.x) + (y-v.y)*(y-v.y)); public double getx() { return x; public double gety() { return y; public void setx(double x) { this.x = x; public void sety(double y) { this.y = y; /** Creates and returns a copy of this vector */ public Vector copy() { /** Creates a vector of specified length pointing in a random direction */ public static Vector randomvector(double len) { double angle = Math.random()*2.*Math.PI; return new Vector(Math.cos(angle)*len, Math.sin(angle)*len); 5

public class Particle { private Vector c; // Center private Vector v; // Velocity private double r; // Radius private boolean dead; public Particle(Vector c, Vector v, double r) { this.c = c.copy(); this.v = v.copy(); this.r = r; dead = false; public String tostring() { return "P(" + c + ", " + v + ", " + r + ")"; public double getradius() { return r; public boolean isdead() { return dead; public void move() { c.add(v); // Add the velocity vector to the position // Handle collision with the black hole Uppgift! // Handle boundary bouncing if (c.getx() < r && v.getx() < 0) { // left boundary v.setx(-v.getx()); if (c.getx() > 1.-r && v.getx() > 0) { // right boundary v.setx(-v.getx()); if (c.gety() < r && v.gety() < 0) { // upper boundary v.sety(-v.gety()); if (c.gety() > 1.-r && v.gety()>0) { // lower boundary v.sety(-v.gety()); public void paintcomponent(graphics g) { int ix = (int)(c.getx()*box.getsize()); int iy = (int)(c.gety()*box.getsize()); int ir = (int)(r*box.getsize()); g.drawoval(ix- ir, iy-ir, 2*ir, 2*ir); 6

public class Box extends JPanel { public static double deathradius; // Black hole radius public static int size; // Drawing size of the box ArrayList<Particle> a; // The collection of particles public Box(int sz, double dr) { setpreferredsize(new Dimension(sz+5, sz+5)); deathradius = dr; size = sz; a = new ArrayList<Particle>(); public static double getdeathradius() { return deathradius; public static int getsize() { return size; /** Feeds the black hole with one particle */ public static void feed(particle p) { double a = (deathradius*deathradius + p.getradius()*p.getradius())*math.pi; deathradius = Math.sqrt(a/Math.PI); public void add(particle p) { a.add(p); /** Advance all particles one time step */ public void step() { for (Particle p : a) p.move(); sweep(); // Remove all dead particles /** Removes all dead particles from the arraylist */ private void sweep() { Uppgift! /** Fills the box with random particles */ public void fill(int n, double r) { for (int i=0; i<n; i++) { Vector p = new Vector(Math.random(), Math.random()); Vector v = Vector.randomVector(0.05*Math.random()); add(new Particle(p, v, r)); public void paintcomponent(graphics g) { super.paintcomponent(g); g.setcolor(color.red); g.drawrect(0,0,size,size); g.setcolor(color.black); int dr = (int)(deathradius*size); g.filloval(size/2-dr, size/2-dr, 2*dr, 2*dr); // Black hole for(particle p : a) { p.paintcomponent(g); // Individual particles 7

public class Gui extends JFrame { public static void main(string[] args) { JFrame frame = new JFrame("TheWorld"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setsize(600, 600); frame.setbackground(color.white); frame.setlayout(new FlowLayout()); Box b = new Box(500,0.05); b.fill(100, 0.015); frame.add(b); frame.pack(); frame.setvisible(true); JOptionPane.showMessageDialog(null, "Start simulation?"); for (int i=0; i<500; i++) { try { b.step(); b.repaint(); Thread.sleep(50); catch(interruptedexception e) { JOptionPane.showMessageDialog(null, "Simulation ended"); frame.dispose(); 8