Tentamen, EDAA20/EDA501 Programmering



Relevanta dokument
Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

Tentamen i Programmering

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA10 Programmering i Java

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Tentamen EDA501/EDAA20 M L TM W K V

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA20/EDA501 Programmering

Tentamen, Programmeringsteknik för BME, F och N

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA20/EDA501 Programmering

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

Tentamen, EDA501 Programmering M L TM W K V

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 I DATAVETENSKAP

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

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

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

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

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

LÖSNINGSFÖRSLAG. Tentamen. Objektorienterad modellering och design. EDA665, 4 poäng

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Föreläsning 9-10 Innehåll

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.

Bedömning av kontrollskrivning, EDA016 Programmeringsteknik

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

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

Tentamen, Algoritmer och datastrukturer

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

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

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

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

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

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

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

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

OOP Tentamen

Tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen i Objektorienterad modellering och design Helsingborg

13 Prioritetsköer, heapar

Tentamen i Objektorienterad modellering och design

Lösningsförslag till tentamen

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

DAT043 Objektorienterad Programmering

LyckaTill önskar Anna

Tentamen i Objektorienterad modellering och design Helsingborg

1 Egna klasser. 1.1 En punkt-klass

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

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

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

Lösningsförslag till tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

Föreläsning REPETITION & EXTENTA

Tentamen. Lösningsförslag

Tentamen EDAA45 Programmering, grundkurs

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

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

2D1339 Programkonstruktion för F1, ht 2003

Övningar Dag 2 En första klass

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

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

Föreläsning 13 Innehåll

PROGRAMMERINGSTEKNIK TIN212

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

Föreläsning 3-4 Innehåll

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

tentaplugg.nu av studenter för studenter

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

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

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

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

Np MaB vt Låt k = 0 och rita upp de båda linjerna. Bestäm skärningspunkten mellan linjerna.

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.

Tentamen i Programmeringsteknik I, ES,

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

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

Tentamen i Objektorienterad programmering

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.

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen i Algoritmer & Datastrukturer i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Kurskod D0010E Datum Skrivtid 5tim

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

Laboration 13, Arrayer och objekt

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 Programmeringsteknik För Ing. - Java, 5p

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(3) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2014 01 17, 8.00 13.00 Anvisningar: Denna tentamen består av tre uppgifter. Preliminärt ger uppgifterna 12 + 18 + 10 = 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(3) 1. En polygon är en geometrisk figur som består av räta linjer mellan ett antal hörnpunkter. Ordningen mellan punkterna är väsentlig. En polygon kan beskrivas av följande klass: Polygon /** Skapar en polygon utan några punkter */ Polygon(); /** Lägger till en punkt med koordinaterna (x,y) efter de punkter som redan finns */ void add(int x, int y); /** Ritar polygonen i fönstret w. Bilden ska visa en sluten polygon, dvs det ska finnas en linje från den sista punkten till den första */ void draw(window w); /** Beräknar polygonens area */ double getarea(); Implementera klassen enligt följande anvisningar: Använd den färdigskrivna klassen Point för att hålla ordning på punkterna. Klassen har en konstruktor Point(int x, int y) och metoderna int getx() och int gety(). Klassen Window har två operationer: moveto(x,y) flyttar pennan till punkten x,y utan att rita, lineto(x,y) flyttar pennan och ritar en linje. Vid beräkningen av arean förutsätts det att inga av polygonens linjer skär varandra. Då kan arean beräknas med följande formel (punkterna numreras 0.. n 1): area = 1 2 n 1 (x i y i+1 x i+1 y i ) i=0 Låt här x n vara = x 0 och y n = y 0. Exempel för en triangel: area = 1 2 (x 0 y 1 x 1 y 0 + x 1 y 2 x 2 y 1 + x 2 y 0 x 0 y 2 ) Arean kan bli positiv eller negativ beroende på punkternas orientering (motsols eller medsols), men getarea ska alltid ge ett positivt resultat (absolutvärdet av arean).

3(3) 2. Ett antal arbetsuppgifter, jobb, som tar olika lång tid ska fördelas på ett antal personer, arbetare. Man vill göra ett schema för vem som ska göra vilket jobb på så sätt att alla jobb är klara så tidigt som möjligt. Exempel på ett schema med 5 arbetare (w1 w5) och 11 jobb (j1 j11, jobbens längd står inom parentes): w5 w4 j6(3) j4(3) j3(3) j7(3) w3 j1(4) j11(2) j2(1) w2 w1 j10(4) j5(5) j9(3) j8(2) tid Ett enkelt sätt att lösa uppgifter av denna typ är att fördela jobben i avtagande ordning efter längd och att ge varje jobb till den arbetare som är först klar med sina jobb. Denna metod har använts för att skapa schemat i figuren. (Metoden ger inte alltid ett optimalt resultat, men är som sagt enkel.) Jobben, arbetarna och schemat beskrivs av följande klasser (bara de operationer som behövs i denna uppgift finns med): Job /** Tar reda på jobbets längd */ int getlength(); Worker /** Tar bort alla jobb från arbetaren */ void clearjobs(); /** Tar reda på den totala tiden för arbetarens alla jobb */ int gettotaltime(); /** Tilldelar jobbet j till arbetaren */ void assignjob(job j); /** Tar bort och returnerar nästa jobb som arbetaren ska utföra. Ger null om arbetaren är klar med alla sina jobb */ Job getnextjob(); Schedule /** Skapar ett schema (utan några jobb) för arbetarna i vektorn workers */ Schedule(Worker[] workers); /** Fördelar jobben i listan jobs på arbetarna. Listan är inte sorterad. Listan får ändras i metoden */ void makeschedule(arraylist<job> jobs); /** Tar bort och returnerar nästa jobb som arbetaren med nummer wnbr ska utföra. Arbetarna numreras med början på 1. Ger null om wnbr är felaktigt eller om arbetaren är klar med alla sina jobb */ Job getnextjob(int wnbr); Implementera klassen Schedule. Klasserna Job och Worker är färdigskrivna. 3. Implementera klassen Worker från uppgift 2. Klassen ska ha en konstruktor utan några parametrar.

LUNDS TEKNISKA HÖGSKOLA 1(3) Institutionen för datavetenskap Lösningsförslag, tentamen i EDAA20/EDA501 1. public class Polygon { private ArrayList<Point> points; public Polygon() { points = new ArrayList<Point>(); public void add(int x, int y) { points.add(new Point(x, y)); 2014 01 17 public void draw(window w) { if (points.isempty()) { return; w.moveto(points.get(0).getx(), points.get(0).gety()); for (int i = 1; i < points.size(); i++) { w.lineto(points.get(i).getx(), points.get(i).gety()); w.lineto(points.get(0).getx(), points.get(0).gety()); public double getarea() { if (points.isempty()) { return 0; double area = 0; for (int i = 0; i < points.size() - 1; i++) { area += points.get(i).getx() * points.get(i + 1).getY() - points.get(i + 1).getX() * points.get(i).gety(); Point last = points.get(points.size() - 1); area += last.getx() * points.get(0).gety() - points.get(0).getx() * last.gety(); return Math.abs(area) / 2; 2. public class Schedule { private Worker[] workers; public Schedule(Worker[] workers) { this.workers = workers; public void makeschedule(arraylist<job> jobs) { for (int i = 0; i < workers.length; i++) { workers[i].clearjobs(); while (!jobs.isempty()) { Job longest = getlongest(jobs); Worker firstready = findleastoccupiedworker(); firstready.assignjob(longest);

2(3) private Job getlongest(arraylist<job> jobs) { int maxlength = 0; int maxindex = -1; for (int i = 0; i < jobs.size(); i++) { if (jobs.get(i).getlength() > maxlength) { maxlength = jobs.get(i).getlength(); maxindex = i; return jobs.remove(maxindex); private Worker findleastoccupiedworker() { int mintotaltime = Integer.MAX_VALUE; int minindex = -1; for (int i = 0; i < workers.length; i++) { if (workers[i].gettotaltime() < mintotaltime) { mintotaltime = workers[i].gettotaltime(); minindex = i; return workers[minindex]; public Job getnextjob(int wnbr) { if (wnbr < 1 wnbr > workers.length) { return null; return workers[wnbr - 1].getNextJob(); 3. public class Worker { private ArrayList<Job> jobs; public Worker() { jobs = new ArrayList<Job>(); public void clearjobs() { jobs.clear(); public int gettotaltime() { int totaltime = 0; for (int i = 0; i < jobs.size(); i++) { totaltime += jobs.get(i).getlength(); return totaltime; public void assignjob(job j) { jobs.add(j); public Job getnextjob() { if (jobs.isempty()) { return null; else { return jobs.remove(0);

3(3) Alternativ lösning med attribut för tiden: public class Worker { private ArrayList<Job> jobs; private int totaltime; public Worker() { jobs = new ArrayList<Job>(); totaltime = 0; public void clearjobs() { jobs.clear(); totaltime = 0; public int gettotaltime() { return totaltime; public void assignjob(job j) { jobs.add(j); totaltime += j.getlength(); public Job getnextjob() { if (jobs.isempty()) { return null; else { Job j = jobs.remove(0); totaltime -= j.getlength(); return j;