Examination in. Objektorienterad programvaruutveckling IT1 TDA545 DAY: FRIDAY DATE: TIME: ROOM: M

Relevanta dokument
Examination in. Objektorienterad programvaruutveckling IT1 TDA545 DAY: THURSDAY DATE: TIME: ROOM: M

Examination in. Objektorienterad programvaruutveckling IT1 TDA545 DAY: THURSDAY DATE: TIME: ROOM: M

Examination in. Övningstenta. DAY: FRIDAY DATE: 20xx-xx-xx TIME: /13.30 ROOM: M

Examination in. PROGRAMMERINGSTEKNIK F1 TIN212 (Dugga) DAY: Monday DATE: TIME: (OBS 3 tim) ROOM: M

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

PROGRAMMERINGSTEKNIK TIN212

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

Föreläsning 2, vecka 8: Repetition

Föreläsning 1, vecka 8: Att förbereda sig för tentan

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

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

TENTAMEN OOP

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

Föreläsning 6: Metoder och fält (arrays)

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

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

Föreläsning 3-4 Innehåll

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

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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.

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

Typkonvertering. Java versus C

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, 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

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Tentamen i Programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

JAVAUTVECKLING LEKTION 8

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

TENTAMEN OOP

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

DAT043 Objektorienterad Programmering

Del A (obligatorisk för alla)

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

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

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

TDDC77 Objektorienterad Programmering

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Lösningsförslag tentamen FYTA11 Java

Objektorienterad Programmering (TDDC77)

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

Tentamen i Programmeringsteknik I

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

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

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

Föreläsning 3: Booleans, if, switch

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

JAVA Mer om klasser och objektorientering

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

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

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

Laboration 3, uppgift En klass för en räknare

Parallellism, återblick

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Instuderingsfrågor, del D

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

LÖSNINGSFÖRSLAG TENTAMEN

2D1342 Programkonstruktion för F1, ht 2006

Chapter 4: Writing Classes/ Att skriva egna klasser.

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen i Programmeringsteknik MN

kl Tentaupplägg

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

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

Tentamen i Objektorienterad programmering

Laboration 4: Digitala bilder

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

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

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

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

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

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

Tentamen i Programmeringsteknik I

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

PROGRAMMERING-Java Omtentamina

Tentamen i Objektorienterad programmering E

Tentamen i Grundläggande Programvaruutveckling, TDA548

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

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

Transkript:

Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Erland Holmström Göteborg 5 jan 2012 Examination in Objektorienterad programvaruutveckling IT1 TDA545 DAY: FRIDAY DATE: 2011-10-21 TIME: 14.00-18.00 ROOM: M Responsible teacher: Erland Holmström phone 1007, home 0708-710600 Results: Are sent by mail from Ladok. Solutions: Are eventually posted on homepage. Inspection of grading: The exam can be found in our study expedition after posting of results. Time for complaints about grading are announced on homepage after the result are published or mail me and we find a time. Grade limits: CTH: 3=28p, 4=38p, 5= 48p, max 60p Aids on the exam: utanför En sida Tentamneshjälpmedel språkkonstuktioner i Java på denna får man också skriva vad man vill på de vita ytorna textrutorna. Lappen lämnas in med tentan. Observe: Start by reading through all questions so you can ask questions when I come. I usually will come after appr. 2 hours. All answers must be motivated when applicable. Write legible! Draw figures. Solutions that are difficult to read are not evaluated! Answer concisely and to the point. The advice and directions given during course must be followed. Programs should be written in Java, indent properly, use comments and so on. Start every new problem on a new sheet of paper. Good Luck! tryckfelen rättade

2 Problem 1. Uppvärmning: a) Antag int i=2; int j=3; Vad har följande uttryck för värde? (double) (j/i) b) Antag att i och j är int's större än 0, vad är det minsta värdet på i%j? c) Antag att variabeln i innehåller ett tal i intervallet 0..99. Skriv satser som lagrar entalsiffran i variabeln ones och tiotalssiffran i variabeln tens. Ex: i=57 skall ge ones = 7 och tens = 5. d) Antag att vi har arvshierarkin enligt figur till höger och definitionerna: Movable movable; Weapon weapon; Sword sword; Potion potion; Sword klassen innehåller en metod: public void sharpen()... Potion innehåller public Potion mix(potion other)... Weapon innehåller public void break()... Vilka av de följande satserna är legala? (dvs ok att göra) a) movable = sword; b) sword = weapon; c) weapon = (Sword)potion; d) weapon.sharpen(); e) ((Sword)movable).sharpen(); f) potion.mix(movable); g) potion.mix((potion)movable); h) sword.break(); Problem 2. (8p) Testar: fält, loopar, metoder, parameteröverföring Vad är det tänkt att följande program skall skriva ut och vad skriver det ut? Förklara. public class TestPassByValue { public static void swap(int n1, int n2) { int temp = n1; n1 = n2; n2 = temp; public static void re(int[] a) { for (int i=0; i<a.length/2; i++) { swap(a[i], a[a.length-1-i]); public static void main(string[] args) { int[] a = {1,2,3,4,5,6,7,8,9; re(a); for (int i=0; i<a.length; i++) { System.out.print( (a[i]) + " " ); (3p)

3 Problem 3. Testar: förståelse av beräkningsordning och prioritet Normal beräkningsordning är ju vänster höger om inte prioritet bryter den. Men vad innebär det att programmet nedan skriver ut? (Koden i den här uppgiften är konstruerad för att testa förståelsen av beräkningsordning och prioritet men att skriva kod med sånt här användande av globala variabler och funktioner som uppdaterar dom rekommenderas verkligen inte!) public class Falsarium { static int i; public static int f() { i = i + 1; return i; public static void main (String [] args) { int[] a = new int[7]; int[][] aa = new int[7][7]; //a) ######## i = i+f(); System.out.println("a) i= " + i); //b) ######## i = f()+i; System.out.println("b) i= " + i); //c) ######## a[i] = f(); System.out.println("c) i= " + i); for (int j=0; j<a.length; j++) { System.out.print(" " + a[j]); //d) ######## aa[i][f()] = f(); System.out.println("d) i= " + i); for (int j=0; j<aa.length; j++) { for (int k=0; k<aa[j].length; k++) { System.out.print(" " + aa[j][k]); // end Falsarium (4p) Observera att lappen Exam Help skall lämnas in med tentan.

4 Problem 4. Problem 5. Testar: rekursion Antag att din dator klarar av rekursion men inte vanlig addition :-). Den kan bara addera/subtrahera ett till ett annat (valfritt) tal. Om man skall addrera 9+3 måste man alltså låta datorn addera 1 tre gånger, dvs (((9+1)+1)+1) dvs som (9+3) = (10+2) = (11+1) = (12+0) = 12. Skriv en rekursiv funktion som givet två heltal >= 0 returnerar deras summa. Om något av talen är negativt skall en IllegalArgumetException kastas. Antalet rekursiva anrop skall minimeras, alltså skall 3+9 och 9+3 beräknas på samma sätt nämligen som (((9+1)+1)+1) och inte som (((((((((3+1)+1)+1)+1)+1)+1)+1)+1)+1). Och absolut inte som (9+(1+(1+1))). (6p) Testar: loopar, interface, interface som parameter, I den här uppgiften väljer du att svara på en av deluppgifterna. Svårighetsgraden är stigande, liksom poängen. Glöm inte ange vilken av deluppgifterna du svarar på, det är just den som kommer att poängsättas. Antag att f(i) är definierad enligt double f(double i). (Den matematiska benämningen funktion motsvarar en metod som returnerar ett värde i Java.) n a) Skriv en funktion, sigma1, som givet ett positivt tal n beräknar i=0 i (2p) n b) Skriv en funktion, sigma2, som beräknar i=0 f i. f är en given (dvs deklarerad tidigare i programmet), men, just nu, okänd funktion (tex x 2 ). (Du skall alltså INTE skriva en funktion som summerar x 2 utan en som summerar funktionen f.) (3p) c) Antag nu att vi vill summera olika funktioners värde i ett intervall enligt: b i=a f i Skriv en funktion, sigma3, som tar en funktion och ett heltalsintervall (a och b) som parametrar och ger summan av f i det intervallet. Utgå från ett interface för f som du också skriver (kalla det för FunctionF). Skriv också en funktion (FunkX2) som implementerar interfacet och ett huvudprogram som adderar funktionen x 2 mellan a=1 och b=5. (7p) d) Här blir det lite svårare men klarar ni c) så borde ni klara även detta, bara generalisera lite till. Men det kan också vara strategiskt bättre att göra c om du är osäker på lösningen här. Utöka funktionen (kalla den sigma4) så att även operatorn (dvs addition i uppgifterna ovan) kan varieras så att man kan addera, subtrahera, multiplicera,... funktionsvärdena. Tips1: Du behöver ett interface till för operatorn. Skriv också klasser som implementerar interfacen och ett huvudprogram som multiplicerar funktionen x 2 mellan 1 och 5. (dvs 1 2 *2 2 *3 2 *...5 2 ) Tips2: När man adderar/subtraherar så använder man 0.0 som identitetselement dvs man kan börja med 0.0+... i loopen. När man multiplicerar/dividerar så måste man använda 1.0 som identitetselement (annars blir ju resultatet alltid 0.0). Man kan lösa det genom att lägga till en metod i det nya interfacet getidentityelement(). (12p) (totalt max 12p)

5 Problem 6. Testar: fält, booleaner, swing, händelsehantering, grafik, klasser a) Implementera följande klass: public class FiverModel { public FiverModel() public boolean status(int x, int y) public void chose(int x, int y) Klassen har en instanvariabel, ett tvådimensionellt fält med 5x5 booleaner som initieras till false. Metoden status returnerar värdet på rad x och kolumn y. Metoden chose ändrar värdet på de 5 positionerna (x,y), (x-1,y), (x+1,y), (x,y-1) och (x,y+1) om positionerna existerar i matrisen. Tips: chose måste se upp om man anger en punkt x,y på randen dvs första/sista rad respektive kolumn annars får man ArrayIndexOutOfBoundsException. Antingen måste man testa ordentligt eller också kan man låta fältet vara en kolumn större än det ser ut när man använder klassen dvs fältet är 7x7 här. Då måste man å andra sidan dölja det för omvärlden som ju skall tro att det är 5x5. b) I spelet Fiver skall man försöka konvertera alla vita fyrkanter till svarta. När man klickar på en knapp så byter den färg precis som dess grannar på sidorna och ovan och nedanför. När programmet startar får man upp en 5x5 kvadrat med vita knappar som i fig 1. fig 1 fig 2 fig 3 I fig 2 har jag klickat på knappen på rad 4 och kolumn 2 (numrerade 1..5) och i fig 3 har jag också klickat på 4,3. Implementera spelet Fiver så det fungerar på det sättet. Några krav: Använd klassen i a) utan att ändra i den. Du skall rita i en panel (FiverPanel) vars konstruktor tar en FiverModel som parameter och allt skall startas från ett huvudprogram med en JFrame. Du skall ge knapparna en storlek och en ram (ramen gör dessutom att default utseendet försvinner. I alla fall på min mac så spelar det stor roll som du ser ovan). Det är inte ok att skapa en hanterare för varje knapp. Tips: Du kan använda en knapps bakgrundsfärg om du gör den ogenomskinlig. Det är ok med en ful -lösning i actionperformed för att hitta vilken knapp som tryckts, tex att söka igenom knapparna. (20p)

6 Problem 7. Nu är det bara en uppgift kvar... Testar: exceptions, enkla kontrollstrukturer, användande av färdiga klasser En A/D omvandlare är kopplat till någon form av analog signal tex en voltmätare, och omvandlar den analoga signalen till digitala värden tex i form av en double. Antag att en A/D-omvandlare representeras med en klass med signaturen public class RealADConverter implements ADConverter{ public RealADConverter(double lower, double upper) {... public double read() throws UnderVoltage, OverVoltage {... // end RealADConverter Metoden read() läser A/D-omvandlarens värden och returnerar dem. Om värdena ligger utanför intervallet lower..upper kastas en exception, UnderVoltage eller OverVoltage. Man kan alltså bestämma mellan vilka värden man accepterar att mätvärdena skall vara vid konstruktionen av objektet. Denna klass är given. Du skall skriva en metod som skapar och använder ett sådant objekt public void runexperiment(int maxnoise, int lower, int upper)... runexperiment anropar kontinuerligt read() och skriver ut det värde som returneras. När totalt maxnoise exceptions rests från read() så skall exekveringen avbrytas och en exception, TooMuchNoise, kastas av runexperiment. Alla exceptions (UnderVoltage, OverVoltage, TooMuchNoise) finns färdiga att använda. (7p) Observera att lappen Exam Help skall lämnas in med tentan. (Jag vill se vad ni skriver så jag kan göra en bättre Exam Help, ni får tillbaka den med tentan igen.) Du har väl svarat på kursenkäten?