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

Relevanta dokument
DAT043 Objektorienterad Programmering

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TENTAMEN OOP

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

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

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

Tentamen OOP

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

Instuderingsfrågor, del D

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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TDDD78 Viktiga begrepp, del 2

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.

TENTAMEN OOP

DAT043 - föreläsning 8

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

Objektsamlingar i Java

Lösningar för tenta 3 DAT043,

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

Föreläsning 9-10 Innehåll

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

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

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

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

TENTAMEN OOP

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

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

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

Tentamen, EDAA10 Programmering i Java

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

Exempel på användning av arv: Geometriska figurer

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

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

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 13 Innehåll

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Föreläsning 5-6 Innehåll

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Lösningar för tenta 2 DAT043,

Algoritmer. Två gränssnitt

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

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

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

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

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

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

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

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 vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Repetition av OOP- och Javabegrepp

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

OOP Objekt-orienterad programmering

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

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

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.

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

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

Att skriva till och läsa från terminalfönstret

Repetition av OOP- och Javabegrepp

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

Del A (obligatorisk för alla)

Del A (obligatorisk för alla)

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Algoritmer & Datastrukturer i Java

Malmö högskola 2008/2009 CTS

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

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.

Laboration A Objektsamlingar

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

Polymorfi. Objektorienterad och komponentbaserad programmering

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

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

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

Transkript:

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad, tel.nr. 031-772 2038. Besöker tentamenssalarna cirka 9:30 och cirka 11:00. Maxpoäng: 60. Betygsgränser Chalmers: 24 för 3:a, 36 för 4:a, 48 för 5:a. Betygsgränser GU: 24 för G, 48 för VG. Tentamen består av 6 uppgifter. Tillåtna hjälpmedel: Den dubbelsidiga lathund som finns tillgänglig på kurssidan och upptryckt vid tentamen. Inga egna anteckningar på detta blad. 1

1. (a) Vad skrivs ut om man exekverar metoden g i programkoden nedan? public static void f(int[] a, int[] b) { if (a.length!= b.length) throw new IllegalArgumentException(); int[] t = new int[a.length]; for (int i = 0; i < a.length - 1; i++) { t[i] = a[i]; a[i] = b[i]; b = t; public static void g() { int[] x = {2,5,8; int[] y = {6,3,7; f(x, y); System.out.println(Arrays.toString(x) + " " + Arrays.toString(y)); Tips: Om z är arrayen {1,2,3,4 så returnerar Arrays.toString(z) strängen "[1, 2, 3, 4]". (b) Givet är följande gränssnitt, klasser och metoder: interface A {... class B implements A {... class C implements A {... public static A f(b x) {... public static C g(a x) {... Definitionerna är irrelevanta och därför utelämnade. Vilka rader i följande kodutsnitt innehåller fel? A x1 = new B(); B x2 = new A(); B x3 = new B(); C x4 = new B(); B x5 = f(x1); A x6 = g(x1); B x7 = (B)x1; C x8 = (C)x1; Ange vilken eller vilka rader som innehåller fel och för varje felaktig rad om felet uppstår vid kompilering eller exekvering av programmet. Använd numret på variabeln som deklareras när du anger rader, d.v.s. ett tal mellan 1 och 8. Du ska utgå från att A, B, C, f och g alla är tillgängliga. Uppgiften handlar alltså inte om huruvida dessa är private, public, static etc. (4p) (4p) (a) Det var ett fel i frågan men rättelse angavs vid tentamenstillfället. I detta dokument har felet rättats till i frågan och svaret utgår från den rättade versionen. [6, 3, 8] [6, 3, 7] (b) Kompileringsfel på raderna 2,4,5. Exekveringsfel på rad 8. 2

2. Skriv en klass som implementerar ett program Count som läser in en textfil innehållande heltal separerade med mellanslag. När man startar programmet skall man på kommandoraden ange ett argument; filnamnet för textfilen. Man kan t.ex. ge kommandot java Count numbers.txt Programmet ska räkna ut hur många gånger varje heltal förekommer. Programmet ska, till standard output, skriva ut varje heltal som förekommer i filen tillsammans med antalet förekomster. Om filen numbers.txt t.ex. har innehållet 43 85 62 36 62 12 85 324 85 så ska kommandot ovan ge utskriften 36 -> 1 324 -> 1 85 -> 3 43 -> 1 12 -> 1 62 -> 2 Ordningen som de förekommande heltal skrivs ut i spelar ingen roll. Det viktiga är att alla tal som förekommer (och inga andra) skrivs ut och att antalet som anges är korrekt. Programmet skall kontrollera att antalet argument är korrekt och att filerna går att öppna. Om något skulle vara fel skall en felutskrift ges och programmet avslutas. (10p) public class Count { public static void main(string[] args) { if (args.length!= 1) { System.out.println("Wrong number of arguments"); return; Scanner s = null; try { s = new Scanner(new File(args[0])); catch (IOException e) { System.out.println("Exception when opening the file: " + e.tostring()); System.exit(1); Map<Integer, Integer> count = new HashMap<>(); while (s.hasnextint()) { int x = s.nextint(); Integer oldcount = count.get(x); int newcount = oldcount == null? 1 : (oldcount + 1); count.put(x, newcount); s.close(); for (Integer x : count.keyset()) { System.out.println(x + " -> " + count.get(x)); 3

3. Implementera den statiska, generiska metoden public static <E extends Comparable<E>> E minimum(e[] arr) Det framgår av signaturen att metoden kan tillämpas på arrayer för vars element en ordning finns definierad. Metoden ska returnera det minsta elementet i arrayen. Om arr är null eller en tom array ska metoden returnera null. Du ska inte använda metoder och klasser i Java:s standard-api, förutom gränssnittet Comparable. (8p) public static <E extends Comparable<E>> E minimum(e[] arr) { if (arr == null arr.length == 0) return null; E minx = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i].compareto(minx) < 0) minx = arr[i]; return minx; 4

4. Skriv tre java-klasser som implementerar följande gränssnitt: interface GrObj { abstract public void draw(graphics g, int x, int y); Detta är tänkt att vara ett gränssnitt för grafisk objekt som kan ritas i en 2D-kontext (ett Graphics-objekt). Objekt av typen GrObj har en form, men ingen position. Positionen, eller närmare bestämt objektets övre vänstra hörn på ritytan, anges istället när man anropar draw. Denna metod ska rita rätt form på angiven position. Den första klass som ska implementera GrObj är Rectangle. Den ska motsvara en rektangel med en bredd och en höjd (mätt i antal pixlar). Den ska ha en konstruktor public Rectangle(int w, int h) som skapar ett rektangel-objekt med bredden w och höjden h. Koden som ritar ut en rektangel kan använda instansmetoden drawrect i Graphics. Argumenten x och y (se lathund) i denna metod motsvarar övre vänstra hörnet. Den andra klassen är Circle som motsvara en cirkel. Den ska ha en konstruktor public Circle(int diam) som skapar ett cirkel-objekt med diametern diam. Koden som ritar ut en cirkel kan använda instansmetoden drawoval i Graphics. Argumenten x och y (se lathund) i denna metod motsvarar övre vänstra hörnet. Den tredje och sista klassen är Group och denna ska motsvara en grupp av godtyckligt antal objekt med tillhörande position. Den ska ha en konstruktor public Group() som skapar ett tomt grupp-objekt. Den ska också ha en metod public void add(grobj o, int x, int y) som lägger till ett GrObj-objekt o med positionen angiven av x och y. När ett objekt av typen Group ritas ut ska alla objekten som tillhör gruppen ritas ut, relativt den, vid anropet till draw, angivna positionen. Ett exempel: Rectangle rect = new Rectangle(20, 10); Circle circ = new Circle(30); Group group = new Group(); group.add(rect, 50, 100); group.add(circ, 120, 80); group.draw(g, 35, 65); Givet ett giltigt objekt g av typen Graphics så skulle denna kod rita ut en rektangel med bredd 20 och höjd 10 på position (85, 165) och en cirkel med diameter 30 på position (155, 145). (12p) 5

public class Rectangle implements GrObj { private int w, h; public Rectangle(int w, int h) { this.w = w; this.h = h; public void draw(graphics g, int x, int y) { g.fillrect(x, y, w, h); public class Circle implements GrObj { private int diam; public Circle(int diam) { this.diam = diam; public void draw(graphics g, int x, int y) { g.filloval(x, y, diam, diam); public class Group implements GrObj { private class Member { GrObj o; int x, y; Member(GrObj o, int x, int y) { this.o = o; this.x = x; this.y = y; ArrayList<Member> members; public Group() { members = new ArrayList<>(); public void add(grobj o, int x, int y) { members.add(new Member(o, x, y)); public void draw(graphics g, int x, int y) { for (Member m : members) { m.o.draw(g, x + m.x, y + m.y); 6

5. Skriv en java-klass Interval som representerar slutna intervall på den reella (approximerat med flyttal) talaxeln. Ett intervall [x, y] där x y motsvarar mängden av alla tal z sådana att x z y. Ett intervall [x, y] där x > y motsvarar den (unika) tomma mängden. Klassen ska ha en konstruktor public Interval(double x1, double x2) som skapar ett objekt som motsvarar intervallet [x1, x2]. Vidare ska klassen ha metoderna public void intersectwith(interval i) som beräknar snittet av mängden som aktuellt objekt representerar och mängden som representeras av i. Aktuellt objekt ska efteråt innehålla snittet, medan i ska vara oförändrad. Snittet av två mängder innehåller alla element som finns i båda mängderna, alltså den delmängd som motsvarar överlappet mellan mängderna. public boolean equals(object obj) från Object som avgör om aktuellt objekt (intervall) och (intervallet) obj representerar samma mängd av tal. Om obj är null eller inte är en instans av typen Interval så ska metoden returnera false. public String tostring() från Object som för icke tomma interval [x, y] (där x y) returnerar strängen "[x, y]". För den tomma mängden ska metoden returnera strängen "empty". (12p) public class Interval { private double x1, x2; public Interval(double x1, double x2) { this.x1 = x1; this.x2 = x2; public void intersectwith(interval i) { if (x1 > x2) return; // this is empty if (i.x1 > i.x2 x2 < i.x1 i.x2 < x1) { x1 = x2 + 1; return; x1 = Math.max(x1, i.x1); x2 = Math.min(x2, i.x2); public boolean equals(object obj) { if (obj == null) return false; if (!(obj instanceof Interval)) return false; Interval i = (Interval)obj; // i is empty or this and i don t overlap if (x1 > x2 && i.x1 > i.x2) return true; // this and i are both empty if (x1 > x2 i.x1 > i.x2) return false; // one of them is empty and the other non-empty if (x1 == i.x1 && x2 == i.x2) return true; // this and i are non-empty and equal return false; // non-empty and not equal public String tostring() { if (x1 > x2) { return "empty"; else { return "[" + x1 + ", " + x2 + "]"; 7

6. Implementera metoden public static int[] merge(int[] a, int[] b) som, givet att a och b är sorterade i stigande ordning, returnerar en (i stigande ordning) sorterad array med alla element i både a och b. Om t.ex. a är {1,4,8,10 och b är {2,6,8,9 så ska metoden returnera arrayen {1,2,4,6,8,8,9,10. Innehållet i a och b ska inte ändras av metoden. (10p) public static int[] merge(int[] a, int[] b) { int[] c = new int[a.length + b.length]; int i = 0, j = 0, k = 0; while (i < a.length && j < b.length) { if (a[i] <= b[j]) { c[k++] = a[i++]; else { c[k++] = b[j++]; while (i < a.length) { c[k++] = a[i++]; while (j < b.length) { c[k++] = b[j++]; return c; 8