Tentamen, EDAA20/EDA501 Programmering



Relevanta dokument
Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501 Programmering M L TM W K V

Tentamen EDA501/EDAA20 M L TM W K V

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen i Programmering

Tentamen, EDAA10 Programmering i Java

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA017, Programmeringsteknik för C, E, I och Pi

Tentamen, EDAA10 Programmering i Java

Tentamen i Programmeringsteknik I, ES,

Tentamen, EDAA20/EDA501 Programmering

Tentamen, Programmeringsteknik för BME, F och N

Tentamen, EDAA10 Programmering i Java

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

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

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

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Föreläsning 5-6 Innehåll

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

Tentamen, EDAA20/EDA501 Programmering

Exempel på användning av arv: Geometriska figurer

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

Föreläsning 3-4 Innehåll

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Del A (obligatorisk för alla)

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

2. Betrakta följande program, där fyra heltal läses från tangentbordet och några (ointressanta) beräkningar görs:

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

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Föreläsning 1 & 2 INTRODUKTION

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Lösningsförslag till tentamen

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Tentamen EDAA45 Programmering, grundkurs

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

Del A (obligatorisk för alla)

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

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Redovisning av inlämningsuppgifter

Tentamen Programmeringsteknik för BME, C, D, E, F, I, N & Pi

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

DAT043 Objektorienterad Programmering

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen. Lösningsförslag

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.

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.

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

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

TENTAMEN OOP

Tentamen i Objektorienterad programmering E

Lösningsförslag till tentamen

public class BoundedCounter {

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:

Tentamen i Objektorienterad programmering

Tentamen, Algoritmer och datastrukturer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

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

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

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

OOP Tentamen

Tentamen ID1004 Objektorienterad programmering April 7, 2015

OOP Tentamen

Saker du ska kunna Föreläsning 13 & 14

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

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

Föreläsning REPETITION & EXTENTA

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen OOP

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

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

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

Föreläsning 14. Filhantering

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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 1 & 2 INTRODUKTION

Lösningsförslag tentamen FYTA11 Java

TDDD78 Viktiga begrepp, del 2

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

OOP Objekt-orienterad programmering

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

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

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

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.

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

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

"if"-satsen. Inledande programmering med C# (1DV402)

OOP Tenta

Lösningsförslag till tentamen

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

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2013 08 22, 8.00 13.00 Anvisningar: Denna tentamen består av fyra uppgifter. Preliminärt ger uppgifterna 6 + 14 + 14 + 6 = 40 poäng. För godkänt betyg krävs 20 poäng. Tillåtet hjälpmedel: Java-snabbreferens. Lösningsförslag kommer att finnas på kursens hemsida senast dagen efter tentamen. När rättningen är klar meddelas detta på kursens hemsida. Tentamensvillkor för EDA501: Om du tenterar utan att vara tentamensberättigad annulleras din skrivning. För att undvika att någon skrivning annulleras av misstag kommer alla som, enligt institutionens noteringar, tenterat utan att vara tentamensberättigade att kontaktas via epost. Felaktigheter i institutionens noteringar kan därefter påtalas fram till nästa tentamenstillfälle då resterande skrivningar annulleras.

2(4) 1. Ett antal träd ska planteras i en rektangulär park. För att det ska bli snyggt vill man plantera träden på slumpmässiga platser. Man får dock inte plantera träden så att trädkronorna går in i varandra eller kommer utanför parkgränserna. Träden är av olika arter som har olika stora kronor. Det kan se ut så här (sett ovanifrån): höjd bredd Ett träd beskrivs av klassen Tree. Alla koordinater är i meter och mäts relativt parkens origo (övre vänstra hörnet). Trädens storlekar är också i meter. /** Skapar ett träd av arten species */ Tree(String species); /** Placerar trädet med mittpunkten (trädstammen) på koordinaterna x, y */ void placeat(double x, double y); /** Tar reda på arten */ String getspecies(); /** Tar reda på x-koordinaten */ double getx(); /** Tar reda på y-koordinaten */ double gety(); /** Tar reda på trädkronans radie */ double getradius(); /** Returnerar true om detta träds krona går in i trädet t:s krona */ boolean overlaps(tree t); Implementera klassen. Anvisningar: Trädkronornas storlekar definieras av följande klass: TreeSizes /** Tar reda på trädkronans storlek för ett träd av arten species */ static double getradius(string species); För att undersöka om två trädkronor överlappar är det enklast att jämföra avståndet mellan trädstammarna med summan av de båda kronornas radier.

3(4) 2. Parken med träd beskrivs av följande klass: /** Skapar en park med namnet name, bredden width och höjden height */ Park(String name, double width, double height); /** Tar reda på parkens namn */ String getname(); /** Tar reda på bredden */ double getwidth(); /** Tar reda på höjden */ double getheight(); /** Placerar trädet t på en slumpmässig plats i parken så att 1) trädets krona inte går utanför parkens gränser och 2) trädets krona inte överlappar kronan på något annat träd i parken. Du får förutsätta att det är möjligt att placera trädet. */ void placetree(tree t); /** Returnerar en vektor med de utplacerade träden */ Tree[] gettrees(); Implementera klassen. Det är lämpligt att lagra träden i en ArrayList. 3. Klassen ParkPlanner är ansvarig för att placera ut träd i en park. /** Skapar en planerare för en park */ ParkPlanner(Park park); /** Placerar ut träden i listan treelist på slumpmässiga platser i parken. Listan är inte sorterad */ void placetrees(arraylist<tree> treelist); /** Skriver ut en "planteringslista" för de utplacerade träden: en rad för varje träd med art, x-koordinat och y-koordinat */ void print(); /** Ritar ut träden (se bilden i uppgift 1) i ett ritfönster (se nedan) */ void draw(double scale); Implementera klassen. Anvisningar: Träden ska placeras ut i ordning efter avtagande storlek. (Om man placerar ut i annan ordning kan det hända att man i slutet inte får plats med ett stort träd.) Ritfönstret har följande specifikation: Window /** Skapar ett fönster med titeln title, bredden width pixlar och höjden height pixlar */ Window(String title, int width, int height); /** Ritar en cirkel med radien r och medelpunkten i x,y (pixlar) */ void drawcircle(int x, int y, int r); Parametern scale anger hur många pixlar på skärmen som varje meter motsvarar. Om till exempel parken har storleken 100 60 meter och skalan är 5 så ska ritfönstret ha storleken 500 300 pixlar och ett träd med radien 5 meter ritas som en cirkel med radien 25 pixlar.

4(4) 4. Skriv en klass med en main-metod som skapar en park och placerar ut träd i den. Anvisningar: Parkens namn, bredd och höjd ska läsas från tangentbordet. Sedan läses (från tangentbordet på valfritt sätt) alla träd som skall placeras ut. För varje träd läses artens namn. Exempel: Björk Ek Alm Alm Björk Lind Planteringslistan ska skrivas ut och parken ska ritas i ett ritfönster.

LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAA20/EDA501 2013 08 22 1. public class Tree { private String species; private double radius; private double x; private double y; /** Skapar ett träd av arten species */ public Tree(String species) { this.species = species; radius = TreeSizes.getRadius(species); x = Double.MIN_VALUE; y = Double.MIN_VALUE; /** Placerar trädet med mittpunkten (trädstammen) på koordinaterna x, y */ public void placeat(double x, double y) { this.x = x; this.y = y; /** Tar reda på arten */ public String getspecies() { return species; /** Tar reda på x-koordinaten */ public double getx() { return x; /** Tar reda på y-koordinaten */ public double gety() { return y; /** Tar reda på trädkronans radie */ public double getradius() { return radius; /** Returnerar true om detta träds krona går in i trädet t:s krona */ public boolean overlaps(tree t) { double dist = Math.hypot(x - t.x, y - t.y); return dist < radius + t.radius;

2(4) 2. public class Park { private String name; private double width; private double height; private ArrayList<Tree> trees; private static Random rand = new Random(); /** Skapar en park med namnet name, bredden width och höjden height */ public Park(String name, double width, double height) { this.name = name; this.width = width; this.height = height; trees = new ArrayList<Tree>(); /** Tar reda på parkens namn */ public String getname() { return name; /** Tar reda på bredden */ public double getwidth() { return width; /** Tar reda på höjden */ public double getheight() { return height; /** Placerar trädet t på en slumpmässig plats i parken så att 1) trädets krona inte går utanför parkens gränser och 2) trädets krona inte överlappar kronan på något annat träd i parken. Du får förutsätta att det är möjligt att placera trädet. */ public void placetree(tree t) { boolean placeok = false; do { double rad = t.getradius(); double x = rad + rand.nextdouble() * (width - 2*rad); double y = rad + rand.nextdouble() * (height - 2*rad); t.placeat(x, y); int i = 0; while (i < trees.size() &&!trees.get(i).overlaps(t)) { i++; if (i == trees.size()) { placeok = true; while (!placeok); trees.add(t); /** Returnerar en vektor med de utplacerade träden */ public Tree[] gettrees() { Tree[] tarray = new Tree[trees.size()]; for (int i = 0; i < tarray.length; i++) { tarray[i] = trees.get(i); return tarray;

3(4) 3. public class ParkPlanner { private Park park; /** Skapar en planerare för en park */ public ParkPlanner(Park park) { this.park = park; /** Placerar ut träden i listan treelist på slumpmässiga platser i parken. Listan är inte sorterad */ public void placetrees(arraylist<tree> treelist) { while (!treelist.isempty()) { Tree largest = treelist.get(0); for (int i = 1; i < treelist.size(); i++) { if (treelist.get(i).getradius() > largest.getradius()) { largest = treelist.get(i); treelist.remove(largest); park.placetree(largest); /** Skriver ut en "planteringslista" för de utplacerade träden: en rad för varje träd med art, x-koordinat och y-koordinat */ public void print() { Tree[] trees = park.gettrees(); for (int i = 0; i < trees.length; i++) { Tree t = trees[i]; System.out.println(t.getSpecies() + " " + t.getx() + " " + t.gety()); /** Ritar ut träden (se bilden i uppgift 1) i ett ritfönster */ public void draw(double scale) { int width = (int) (scale * park.getwidth()); int height = (int) (scale * park.getheight()); Window w = new Window(park.getName(), width, height); Tree[] trees = park.gettrees(); for (int i = 0; i < trees.length; i++) { Tree t = trees[i]; int x = (int) (t.getx() * scale); int y = (int) (t.gety() * scale); int radius = (int) (t.getradius() * scale); w.drawcircle(x, y, radius);

4(4) 4. public class ParkMain { public static void main(string[] args) { System.out.println("Skriv parkens namn och storlek"); Scanner scan = new Scanner(System.in); String name = scan.next(); int width = scan.nextint(); int height = scan.nextint(); Park park = new Park(name, width, height); ArrayList<Tree> treelist = new ArrayList<Tree>(); while (scan.hasnext()) { String species = scan.next(); treelist.add(new Tree(species)); ParkPlanner planner = new ParkPlanner(park); planner.placetrees(treelist); planner.print(); planner.draw(5);