Institutionen för TENTAMEN CTH VT-13 Datavetenskap 2013-03-14 TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM DAG: 13-03-14 TID: 8:30 13:30



Relevanta dokument
Institutionen för TENTAMEN CTH HT-16 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM

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

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM DAG: TID: 8:30 13:30

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

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

Institutionen för TENTAMEN CTH VT-16 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM

Institutionen för TENTAMEN CTH VT-17 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM

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

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

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

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

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:

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM DAG: TID: 14:00 19:00

Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

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

Laboration 4: Digitala bilder

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

PROGRAMMERINGSTEKNIK TIN212

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. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

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

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

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

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

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Instuderingsfrågor, del D

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

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

Tentamen OOP

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

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

Tentamen i Programmeringsteknik I

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I, ES,

Tentamen. Lösningsförslag

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

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

Lösningsförslag tentamen FYTA11 Java

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

TENTAMEN OOP

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

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

2D1339 Programkonstruktion för F1, ht 2004

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

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.

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

Del A (obligatorisk för alla)

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 till tentamen

Iteration while-satsen

Föreläsning 5-6 Innehåll

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

Mer om klasser 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.

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

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

Tentamen i Objektorienterad programmering

Tentamen i Programmering

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

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

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

Malmö högskola 2008/2009 CTS

Objektorienterad programmering D2

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

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

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

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

Lösningsförslag till tentamen

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

Föreläsning 3. Iteration while-satsen

Lösningsförslag övning 2.

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

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

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

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

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: 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

Tentamen FYTA11 Javaprogrammering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

2D1342 Programkonstruktion för F1, ht 2006

Tentamen i Grundläggande programmering STS, åk

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Transkript:

Institutionen för TENTAMEN CTH VT-13 Datavetenskap 2013-03-14 TDA143 Tentamen för TDA143 PROGRAMMERADE SYSTEM DAG: 13-03-14 TID: 8:30 13:30 Ansvarig: Christer Carlsson, ankn 1038 Förfrågningar: Resultat: Allmän info: Christer Carlsson erhålls via Ladok tentamen är uppdelad i två delar: del 1 omfattar översikt av datateknik och del 2 omfattar programmering Betygsgränser: 3:a 10 poäng på del 1 och 26 poäng på del 2 4:a 13 poäng på del 1 och 36 poäng på del 2 5:a 16 poäng på del 1 och 48 poäng på del 2 maxpoäng 20 poäng på del 1 och 60 poäng på del 2 Siffror inom parentes: Granskning: Hjälpmedel: Var vänlig och: anger maximal poäng på uppgiften. Onsdag 10/4 kl 12-13 och onsdag 10/4 kl 15-17, rum 6128 i EDIT-huset. En valfri lärobok i Java eller de på kursen utdelade föreläsningsanteckningarna (OH-bilderna) som behandlar programmeringsdelen av kursen. Förtydligande noteringar får finnas i boken resp. föreläsningsanteckningarna. Skriv tydligt och disponera papperet på lämpligt sätt. Börja varje uppgift på nytt blad. Skriv ej på baksidan av papperet. Observera: Uppgifterna är ej ordnade efter svårighetsgrad. Titta därför igenom hela tentamen innan du börjar skriva. Alla program skall vara väl strukturerade, lätta att överskåda samt enkla att förstå. Vid rättning av uppgifter där programkod ingår bedöms principiella fel allvarligare än smärre språkfel. På de programmeringsuppgifter som ingår i tentamenstesen kan vissa poäng erhållas även om ett fullständigt program inte redovisas, detta kräver dock att en algoritm som löser problemet presenteras. LYCKA TILL!!!!

Uppgift 1. Denna uppgift består av 10 påståenden. Frågorna skall besvaras med sant eller falskt. Ett korrekt svar ger 1 poäng, ett felaktigt svar ger -0.5 poäng och ett utelämnat svar ger 0 poäng. Totalt på uppgiften kan aldrig minuspoäng erhållas. a) Om talet -124 lagras med 8 bitar på två-komplementsform får det bitmönstret 10001000. b) Moores lag säger att antalet transistorer som ryms på en kiselbricka, historiskt sett, fördubblas vart 3:e år. c) När man ser på film över internet, och måste överföra stora datamängder, är UDP (User Datagram Protocol) ett lämpligare transportprotokoll än TCP (Transmission Control Protocol). d) Den del av operativsystemet som sköter all läsning och skrivning på datorns sekundärminne kallas för memory manager. e) Den viktigaste egenskapen hos en algoritm är att den är snabb. f) I ett binärt sökträd finns det största värdet i roten. g) En process med låg prioritet exekveras aldrig då starvation uppkommer. h) Open-source development är en typ av evolutionär programutveckling. i) Oracle och MySQL är två kända databashanterare. j) Inom datorgrafik innebär rendering att omvandla en beskrivning av ett objekt till en bild på en tvådimensionell yta. Uppgift 2. Ange sanningstabell för den logiska kretsen nedan. (10 poäng) B A NAND D AND F XOR G C NOR E Uppgift 3. (2 poäng) Att ha sin dator ansluten till Internet är inte helt riskfritt. Beskriv kort vilka faror man utsätts för och hur man kan skydda sig. (2 poäng) Uppgift 4. Förklara begreppet -notation, som används för att klassificera algoritmer med avseende på tidskomplexitet. Vad innebär det att en algoritm tillhör en viss -klass? Beskriv gärna med exempel. Uppgift 5. (2 poäng) Trenden inom mjukvaruindustrin är att jobba i små team. Vad är orsaken till detta? Ge också exempel på tumregler som visat sig bra att följa vid bildandet av ett team. (2 poäng)

Uppgift 6. Antag att du har följande databastabeller: Meny: Maträtt Typ Pris Kalorier Kokt ishavstorsk med hackat ägg Fisk 139 460 Pannbiff med stekt lök Kött 109 760 Omelett Vegetarisk 89 250 Wienerschnitzel av gödkalv Kött 119 550 Luncherbjudanden: Maträtt Typ Pris Kalorier Stekt sill Fisk 79 440 Wallenbergare med ärtor och potatispuré Kött 89 760 Pasta bolognese Kött 69 650 Hur ser tabellen ut som erhålls genom nedanstående SQL-query? SELECT Maträtt, Pris FROM Meny, Luncherbjudanden WHERE Kalorier < 500 (2 poäng)

DEL 2: Programmeringsteknik Uppgift 7. a) Vad blir utskriften när nedanstående program exekveras? public class Scope { private double d; public Scope(double d) { this.d = d; //konstruktor public double foo(int i) { if (i < 0) { double d = i * i; else { d = i * i * i; return d; //foo public static void main(string[] args) { Scope s = new Scope(5.0); System.out.println(s.foo(-2)); System.out.println(s.foo(2)); //main //Scope (3 poäng) b) Betrakta nedanstående klass: public class Uppgift 7b { public static int mystery(int[] nums, int target) { int lencount = 0; int maxlen = 0; for (int i = 0; i < nums.length; i = i + 1) { if (nums[i] == target) { lencount = lencount + 1; else { if (lencount > maxlen) { maxlen = lencount; lencount = 0; if (lencount > maxlen) { maxlen = lencount; return maxlen; //mystery public static void main(string[] arg) { int[] arr = {7, 10, 10, 15, 15, 15, 15, 10, 10, 10, 15, 10, 10; System.out.println(mystery(arr, 10)); //main //Uppgift7b i) Vad blir utskriften när main-metoden exekveras? ii) Förklara med ord vad metoden mystery gör. (3 poäng)

c) Vad skrivs ut när main-metoden i klassen Main nedan exekveras? public class Tricky { private int i, j; private static int k = 0; public Tricky(int i) { this.i = i; k = k + 1; j = k; public String tostring() { return " (" + i + ", " + j + ", " + k + ")"; // Tricky public class Main { public static void confuse( Tricky t1) { t1 = new Tricky(5); //confuse public static void main(string[] args) { Tricky myt1 = new Tricky(3); confuse(myt1); Tricky myt2 = new Tricky(4); System.out.println( myt1 + ", " + myt2 ); //main //Main (3 poäng) d) Betrakta nedanstående program, vars syfte är att läsa in ett tal och skriva ut talets kvadratrot: import javax.swing.*; public class Math { public static void main (String[] arg) { String indata = JOptionPane.showInputDialog("Ange ett tal: "); double tal = Double.parseDouble(indata); double root = Math.sqrt(tal); JOptionPane.showMessageDialog(null, "Roten ur talet " + tal + " är " + root); //main //Math När programmet kompileras fås följande felmeddelande Math.java:6: cannot resolve symbol symbol : method sqrt (double) location: class Math double root = Math.sqrt(tal); ^ i) Förklara vad som är felaktigt i programmet. ii) Ge (minst ett) förslag på hur felet kan rättas till. (3 poäng)

Uppgift 8. Livsmedelsverket har gjort följande klassificering när det gäller andelen kalorier som kommer från fett i våra livsmedel: Rött: Över 40 procent av kalorierna från fett Gult: Mellan 30 och 40 procent av kalorierna från fett Grönt: Max 30 procent av kalorierna från fett Skriv ett program som läser in antalet kalorier och hur många gram fett en förpackning livsmedel innehåller. Programmet skall beräkna och skriva ut hur stor procentuell andel av kalorierna som kommer från fettet, samt livsmedelsverkets klassificering av produkten. Det gäller att 1 gram fett innehåller 7,7 kalorier. Du får själv välja om du vill göra in- och utmatning via dialogrutor eller använda System.in respektive System.out (se exemplen nedan). För att kunna erhålla full poäng på uppgiften: skall programmet utformas på så sätt att inläsningen upprepas tills användaren avbryter exekveringen (vid användning av dialogrutor genom att användaren trycker på Cancel-knappen och vid användning av System.in genom att användaren lämpligen ger ctrl z) skall antalet kalorier och antalet gram fett läsas med en inläsningssats (dvs ett Scanner-objekt skall användas) skall en felutskrift ges om antalet kalorier eller antalet gram fett som läses in är mindre än 0 skall procenttalet i utskriften anges med exakt två decimaler skall programmet innehålla en metod public static double getcalories(double gram) som tar antalet gram fett och returnerar motsvarande antal kalorier skall en felutskrift ges om andelen fett överskrider 100% Med användning av dialogrutor Med användning av System.in resp System.out Antalet kalorier och antalet gram fett: 1345 28.7 16.43 procent av kalorierna kommer från fett. Kategori: GRÖN Antalet kalorier och antalet gram fett: 699 38.4 42.30 procent av kalorierna kommer från fett. Kategori: RÖTT Antalet kalorier och antalet gram fett: -1456-23.8 Negstiva värden får ej ges! Antalet kalorier och antalet gram fett: 758 122.3 Felaktig indata! Andelen fett kan inte överskrida 100%! (12 poäng)

Uppgift 9. Instanser av icke-muterbara klasser förändrar inte sitt tillstånd, utan en instans har samma tillstånd under hela sin livstid. Skriv en icke-muterbar klass Point för att beskriva punkter i det tvådimensionella planet. I klassen skall x- respektive y-koordinaten avbildas som ett heltal. Klassen skall ha en konstruktor som tar x- och y-koordinaten som parametrar, samt instansmetoder för att avläsa tillstånden hos instansvariablerna. Vidare skall klassen innehålla följande instansmetoder: Point translate(int dx, int dy) double distance(point p) boolean hassamevalue(point p) String tostring() returnerar en punkt som är förskjuten dx i x-led och dy i y-led i förhållande till den aktuella punkten returnerar avståndet mellan aktuella punkten och punkten p (beräknas mha Pythagoras sats) returnerar värdet true om den aktuella punkten och punkten p har samma koordinater, annars returneras värdet false returnerar en strängrepresentation av den aktuella punkten på formen "(x, y)" (10 poäng) Uppgift 10. a) I ett experiment läser man in värden som sedan skall ritas upp som en kurva. När kurvan ritas upptäcker man att den blir taggig pga slumpmässiga mätfel. Man vill därför jämna ut kurvan genom att ersätta varje mätvärde, utom det första och sista, med medelvärdet av det aktuella värdet och de två intilliggande värdena. Skriv en metod public static double[] smooth(double[] vekt) som tar ett fält vekt med mätvärden och returnerar ett nytt fält i vilket mätvärdena är utjämnade enligt beskrivningen ovan. Exempel: Antag att följande deklaration har gjorts double[] f = {3.0, 5.0, 1.0, 6.0, 19.0, 20.0, 15.0, 19.0, 21.0, 20.0; Ett anrop av smooth(f) returnerar då fältet {3.0, 3.0, 4.0, 8.6666, 15.0, 18.0, 18.0, 18.3333, 20.0, 20.0. (5 poäng) b) Steganografi handlar om att skriva dolda budskap på ett sådant sätt att ingen - bortsett från avsändaren och den avsedda mottagaren - misstänker att det finns ett meddelande. I denna uppgift skall ni gömma ett meddelande i en digital färgbild. En digital färgbild lagras, som bekant, på RGB-format. Varje bildpunkt utgörs av tre heltalsvärden i intervallet [0,255], där de enskilda värdena representerar intensiteten av färgerna rött, grönt respektive blått. En färgbild kan således avbildas med ett tredimensionellt fält av typen int[][][], är den första dimensionen definierar bildens höjd, den andra dimensionen bildens bredd och den tredje dimensionen de tre färgerna. Hur ett meddelande göms i en digital färgbild beskrivs nedan: I ASCII-koden (American Standard Code for Information Interchange) representeras varje tecken som ett heltal bestående av tre siffror. För alla bokstäver, siffror och andra tecken såsom?, $ och @, kan man i Java erhålla ASCII-koden genom att typomvandla tecknet till ett heltal, t.ex. evalueras (int) 'k' till heltalet 107 och (int) 'B' till heltalet 66 (vilket blir 066 angivet som ett 3-siffrigt heltal). Ett tecken kan gömmas i en bildpunkt genom att utnyttja att tecknet i ASCII-koden utgörs av ett 3-siffrigt heltal och att en bildpunkten utgörs av de tre komponenterna rött, grön och blått. Den första siffran i ASCII-koden döljas i den minst signifikanta siffran i komponenten som representerar rött, den andra siffran i ASCII-koden döljas i den minst signifikanta siffran i komponenten som representerar grönt och den tredje siffran i ASCIIkoden döljas i den minst signifikanta siffran i komponenten som representerar blått.

Exempel: Tecknet 'B', som har ASCII-koden 066, göms i en bildpunkt vars RGB-värden är [154, 228, 163] enligt: Ursprunglig bildpunkt Bildpunkten med 'B' gömd Red Green Blue göm 'B', vars ACSII-kod är 066 Red Green Blue 154 228 163 150 226 166 Modifikationen i bildpunkten är så liten att den inte kan upptäckas med blotta ögat. För att avkoda ett meddelande i en bild utför den omvända processen. Beräkna den minst signifikanta siffran i respektive färgkomponent, bilda ASCII-koden för tecknet från dessa tre siffror och typomvandla det erhållna heltalet till ett tecken (t.ex. evalueras (char) 66 till 'B'). Avkodningen av meddelandet förändrar inte bilden, utan meddelandet kommer att finnas i bilden för alltid. Din uppgift är att skriva en metod public static int[][][] hidemessage(int[][][] sample, String msg) som gömmer meddelandet msg i bilden sample enligt ovan beskrivna tillvägagångssätt. Tecknen i meddelandet läggs in i bilden radvis, med start i första kolumnen. Du får anta att meddelandet ryms i bilden, dvs inte är längre än antalet bildpunkter i bilden. (8 poäng) Uppgift 11. Skriv ett program som visar upp ett fönster, enligt figuren bredvid, för att avbilda ett kodlås som består av 5 komponenter, där varje komponent visar en siffra i intervallet [0, 9]. Siffran i varje komponent ändras genom att trycka på komponenten och när samtliga siffror är rätt inställda öppnas låset. I ditt program skall du använda klassen NumberButton nedan, för att avbilda komponenterna i kodlåset. import javax.swing.*; import java.awt.*; public class NumberButton extends JButton { private int number; public NumberButton(int number) { if (number < 0 number > 9) throw new IllegalArgumentException(); this.number = number; //konstruktor public void paintcomponent(graphics pen) { super.paintcomponent(pen); settext("" + number); //paintcomponent public void add() { number = (number + 1) % 10; repaint(); //add public int getnumber() { return number; //getnumber // NumberButton

Klassen NumberButton utökar (extends) JButton, därför är en instans av klassen NumberButton tryckbar (och har tillgång till alla metoder som finns i klassen JButton). I klassen NumberButton finns en instansvariabel number, som håller reda på vilken siffra som skall visar på knappen. När en instans av klassen skapas ges knappen ett värde via parametern till konstruktorn. Om parametern inte är ett heltal i intervallet [0, 9] kastas ett IllegalArgumentException. För att ändra siffran finns instansmetoden add(), som ökar instansvariabeln number med 1 och ritar om komponenten. Om den aktuella siffran är 9 när metoden add() anropas kommer den nya siffran att bli 0. Klassen innehåller också instansmetoden getnumber() för att avläsa den aktuella siffran på knappen. Implementera själva fönstret i en klass med namnet CodeLock. Denna klass skall ha en konstruktor CodeLock(int thecode) som har ett heltal som parameter, vilket utgör den korrekta koden för kodlåset. Om parametern är ett negativt tal eller ett tal större än 99999 skall ett undantag av typen IllegalArgumentException kastas (eftersom detta tal inte kan vara en giltig kod för kodlåset). Vilken inställning på siffrorna som visas upp initialt när en instans av klassen CodeLock skapas bestämmer du själv. Kan exempelvis, som i figuren ovan, sättas till 00000 eller till en kombination som beräknas slumpmässigt (med en slumptalsgenerator). När den korrekta koden ställts in, och kodlåset öppnas, skall detta illustreras genom att göra sifferkomponenterna otryckbara. För full poäng på uppgiften skall programmet naturligtvis skapa och visa upp ett fönster med kodlåset. Vidare krävs att gränssnittet har lämpliga färger, teckenstorlekar och fonter, samt att programmet skall kunna avslutas genom att trycka på stängningsrutan i fönsters ram. (13 poäng)