Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Relevanta dokument
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

Laboration 4: Game of Life

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Laboration 15 Grafiskt användargränssnitt

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

Lösningsförslag tentamen FYTA11 Java

Tentamen, EDAA10 Programmering i Java

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

TENTAMEN OOP

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen i Programmeringsteknik I

Tentamen i Objektorienterad programmering E

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

Tentamen i Objektorienterad programmering

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

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

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.

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

TENTAMEN OOP

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

PROGRAMMERINGSTEKNIK TIN212

Tentamen i Grundläggande programmering STS, åk

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

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

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

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

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

Tentamen i Programmeringsteknik I, ES,

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

Monday, November 16, Senaste Labben

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

TENTAMEN OOP

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

Rita Egna Bilder, Timer

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

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

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

OOP Tentamen

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

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

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

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

Tentamen FYTA11 Javaprogrammering

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

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

DAT043 Objektorienterad Programmering

Tentamen i Grundläggande programmering STS, åk

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

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

OOP Omtenta

Tentamen OOP

OOP Omtenta

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

Händelsestyrda program

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

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

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

OOP Tentamen

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

Tentamen. Lösningsförslag

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

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 övning 2.

OOP Tentamen

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Tentamen i Objektorienterad programmering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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.

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

Malmö högskola 2008/2009 CTS

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 8: Exempel och problemlösning

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

Tentamen FYTA11 Javaprogrammering

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

ID1004 Laboration 3, 5-6 November 2012

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

Tentamen, EDAA10 Programmering i Java

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

OOP Tenta

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

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

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

Kurskod D0010E Datum Skrivtid 5tim

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

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

Tentamen i Grundläggande programmering STS, åk 1 lördag

Transkript:

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: 2:a september 200, klockan 8:30-12:30. Plats: V Ansvarig lärare: Katarina Blom, tel 772 10 0. Läraren besöker tentamen kl 9:30 och 11:30 Tillåtna hjälpmedel: En (valfri) inbunden bok om Java (mindre anteckningar i boken tillåtna). Poänggränser: G 28p, VG 48p, max 0p Lösningsförslag finns på kurshemsidan dagen efter tentamensdagen. Resultat Anslås senast 19 kalenderdagar efter tentamensdagen Granskning Granskning av tentan sker efter överenskommelse med ansvarig lärare (se ovan). Börja varje ny uppgift på nytt blad Skriv ditt personnummer på varje blad Uppgifterna är inte sorterade i svårighetsgrad Du får anta att alla paket är åtkomliga utan särskild åtgärd. Du behöver alltså inte skriva import för dem, utom ifall du använder av static import (statisk import). Lycka till! Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 1

1. Man har skrivit programmet Ruta nedan Programmet går igenom utan kompileringsfel och fungerar fint när man kör det (observera att endel av programmet finns på nästa sida). (a) (p) Vad gör programmet när det exekveras? (Beskriv kort, helst inte mer än 4- meningar). (b) (3p) På 4:e raden i programmet har man skrivit public class Ruta extends JPanel implements MouseListener Vad betyder det? Vad hade hänt om man istället skrivit public class Ruta extends MouseListener implements JPanel (c) (3p) På sista raden i programmet har man skrivit f.setdefaultcloseoperation(jframe.exit_on_close); Vad är EXIT_ON_CLOSE för något? Var finns den förmodligen deklareread? (d) (3p) Det finns fyra metoder som är tomma (mouseexited, mouseentered, mousereleased och mousepressed). Varför har man skrivit dit dem? Vad händer om man tar bort dem? import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Ruta extends JPanel implements MouseListener{ private int DIM = 20; private Color marked; public Ruta(Color m){ marked = m; addmouselistener(this); setpreferredsize(new Dimension(DIM,DIM)); public void mouseclicked(mouseevent e){ double slump = Math.random(); if(slump<.1) marked=color.red; else if(slump<.2) marked = Color.blue; else if(slump<.3) marked = Color.yellow; else if(slump<.4) marked = Color.cyan; else marked = Color.black; repaint(); public void mouseexited(mouseevent e){ public void mouseentered(mouseevent e){ public void mousereleased(mouseevent e){ Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 2

public void mousepressed(mouseevent e){ public void paintcomponent(graphics g){ g.setcolor(marked); g.fillrect(0,0,dim,dim); public static void main(string[] args){ JFrame f = new JFrame(); f.add(new Ruta(Color.yellow)); f.pack(); f.setvisible(true); f.setdefaultcloseoperation(jframe.exit_on_close); 2. Sudoku 1 går ut på att placera siffrorna 1 till 9 i 9x9 (=81) rutor. Siffrorna ska inte bilda någon speciell summa. Det enda som gäller är att ingen siffra får förekomma mer än en gång per rad och kolumn. Dessutom ska alla nio siffrorna finnas med i var och en av de nio 3x3-rutor (regioner) som krysset är indelat i. När spelet börjar finns vissa siffror redan givna på spelplanen. Ju färre givna siffror, desto svårare Sudoku. (En äkta Sudoku har bara en lösning). Man kan börja var som helst i rutsystemet med att fylla i siffrorna. I Sudoku-spelet nedan är 30 siffor ifyllda. För att lösa spelet ska man fylla i de övriga sifforna enligt reglerna ovan. 1 4 8 3 2 1 8 4 7 3 7 9 1 4 2 7 2 9 4 8 7 Tex. är det möjligt att placera 3 eller 9 i rutan högst upp till vänster (1, 4, och finns på första raden, 2,, 7 och 8 finns i första kolumnen, och 2, och 8 finns i samma region, kvar blir 3 och 9). 1. Spelet förekommer i de flesta dagstidningar och det finns mängder med websidor om spelet, se tex www.sudoku.com Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 3

Skriv en klass som heter Sudoku. (Läs igenom hela uppgiften innan du börjar lösa den). (1p) Det ska finnas en instansvariabel, ett tvådimensionellt heltalsfält (9x9 heltal) som representerar ett sudoku-spel. För att markera att en ruta är tom (oifylld) kan man tex låta motsvarande position i fältet vara 0. (1p) Det ska finnas en instansvariabel, ett tvådimensionellt heltalsfält (9x9 heltal) som representerar lösningen till sudoku-spelet. Instansvariabeln initieras i konstruktorerna (se nedan). Låt instansvariabeln heta lösning. (12p) Klassen ska innehålla en konstruktor med en parameter (lösningen till spelet). Man vill använda denna kostruktor då ett spel med alla rutor oifyllda ska skapas. Om lösningen som ges är giltig ska instansvariabeln lösning initieras med dessa värden. Om lösningen som ges inte är giltig vidtas lämplig åtgärd (Skriv gärna en kort kommentar och förklara varför denna åtgärd är lämplig). I en gilitig lösning är alla heltal på alla positioner tillåtna. Tips: Skriv en privat hjälpmetod private boolean numberok(int row,int kol,int num,int[][] spel) som returnerar true ifall heltalet num är tillåtet på positionen row, kol i spelet spel. Använd sedan metoden i konstruktorn. (4p) Fyra metoder public void put(int row, int kol, int num) public int get(int row, int kol) public int getsol(int row, int kol) public int remove(int row, int kol) put stoppar in heltalet num på position row, kol i sudokuspelet (ifall det är tillåtet). get returnerar heltalet från position row, kol i sudoku-spelet, getsol returnerar heltalet på position row, kol i lösnigen (lösning) och remove tar bort heltalet på position row, kol i sudoku-spelet och returnerar det.. (p) Det ska finnas en metod public boolean solutionok() som kontrollerar ifall sudokuspelet är löst (dvs. att spelet är lika med lösningen), isåfall returneras true Om du behöver några lokala hjälpmetoder eller fler instansvariabler går det naturligtvis bra. Men du måste implementera dem för att kunna få full poäng på de metoder som använder dem. 3. (1p) Låt klassen Sudoku ovan utgöra en modell-klass för ett Sudokuspel. Det ska också finnas en vy-kontroll-klass till spelet, som ritar upp sudoku-spelet (rutmönster med aktuella siffror). Låt klassen heta SudokyKontrollVy och vara en subklass till JPanel. Sudoku-spelet i exemplet ovan ska ge följande vy (se Bild 1). Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 4

Bild1: Om man placerar musen på fönstret ska lösningen skrivas ut. Med exemplet ovan skulle det se ut enligt Bild 2: Bild 2: Så fort musen avlägsnas från fönstret visas bara de siffror som just nu är ifyllda (dvs. enligt Bild 1 igen). Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

4. (8p)Du har fått jobb som labrättare på kursen i objektorienterad programmering. Du sitter just nu och rättar laborationer på kursen. Du har n stycken laborationer att rätta. Olika laborationer tar olika lång tid att rätta (vissa grupper har lämnat in ganska omfattande lösningar, andra grupper har lämnat in lite kortare lösningar). Men du vet på förhand hur många minuter det tar att rätta en viss laboration. Du vill nu rätta laborationerna i en sådan ordning att hon minimerar väntetiden för alla labgrupper. Exempel: Antag att du har fått in 3 laborationer och tiderna det tar att rätta dem är: lab1 = minuter, lab2 = 10 minuter, lab3 = 3 minuter. Om du väljer att rätta lab1 först, sedan lab2 och sist lab3 blir den totala väntetiden för alla grupper + (+10) + (+10+3) = 38 minuter. Om du istället väljer att rätta lab3 först, följt av lab1 och sist lab2 blir den totala väntetiden istället 29 minuter ( 3 + (3+) + (3++10) ). Man kan visa att det lönar sig bäst att rätta laborationerna i ordningen så att du börjar med den som går fortast, följt av den som går näst fortast osv. Skriv en metod int [] labrättningsoptimering(int[] di) som givet ett heltalsfält (di) med tider för hur lång tid det tar att rätta respektive laboration, beräknar (och returnerar) ett fält som innehåller den ordning som laborationerna ska rättas i. Metoden ska kunna hantera godtyckligt långa fält di. Exempel: Om di = [10,4,,2] ska metoden returnera fältet [4,2,3,1] (dvs. man ska börja med den 4:e laborationen, sedan rätta den 2:a, följt av den 3:e och rätta den första sist). Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)