Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)



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

Tentamen i Objektorienterad programmering

Tentamen OOP

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

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

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

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

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

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

Föreläsning 1 & 2 INTRODUKTION

Objektorienterad programmering D2

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

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.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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

Tentamen, EDAA20/EDA501 Programmering

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

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

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

OOP Omtenta

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

Föreläsning 10. ADT:er och datastrukturer

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Editering, Kompilering och Exekvering av Javaprogram

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

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

DAT043 Objektorienterad Programmering

Lagadministration Linda Emterby

Programmering för språkteknologer II, HT2014. Rum

Tentamen, EDA501 Programmering M L TM W K V

trafiksimulering Intro OU5 trafiksimulering

Tentaupplägg denna gång

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

Redovisning av inlämningsuppgifter

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

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

Objektsamlingar i Java

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

Föreläsning 6: Introduktion av listor

Försättsblad till skriftlig tentamen vid Linköpings Universitet

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

Laboration A Objektsamlingar

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

Tentamen, EDAA10 Programmering i Java

JAVAUTVECKLING LEKTION 4

TENTAMEN OOP

Tentaupplägg denna gång

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

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

Föreläsning 7. Grafiska användargränssnitt

DELPROV 1 I DATAVETENSKAP

Lathund, till Photo Story, för skräckslagna lärare

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

Tentamen i Objektorienterad programmering E

OOP Tentamen

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Tentamen, EDA501 Programmering M L TM W K V

PROGRAMMERINGSTEKNIK TIN212

Instuderingsfrågor, del D

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Lösningsförslag tentamen FYTA11 Java

Objektorienterad programmering i Java

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

Instuderingsfrågor, del B

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Uppgift 1 (Oläsliga krypterade meddelanden)

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

Rita Egna Bilder, Timer

Föreläsning 7. Träd och binära sökträd

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

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

OOP Objekt-orienterad programmering

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

9-1 Koordinatsystem och funktioner. Namn:

Föreläsning 11. Giriga algoritmer

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.

OOP Tentamen

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

OOP Tentamen

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false.

Chapter 3: Using Classes and Objects

SMD 134 Objektorienterad programmering

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Handbok Fyrkanter. Matt Williams Granskare: Eugene Trounev Översättare: Stefan Asserhäll

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Digitalt lärande och programmering i klassrummet. Introduktionsworkshop - Bygg ett akvarium i Scratch

Tentamen i Programmeringsteknik I, ES,

Introduktion till arv

Manual för att registrera i Kvalitetsregister PsykosR

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Tentamen i Programmering

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Transkript:

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl 9:30 och kl 12:30 Tillåtna hjälpmedel: Poänggränser: Lösningsförslag Resultat Granskning Kursboken. G 28p, VG 48p, max 60p (För att få VG på hela kursen krävs dessutom att kraven på VG för lab3 har uppfyllts) finns på kurshemsidan torsdag 16 december.. Anslås senast 19 kalenderdagar efter tentamensdagen 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. Lycka till! Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 1

1. (9p) (a) Nedastående programsekvens ger ett kompileringsfel. Varför (förklara kort)? String in = JOptionPane.showInputDialog("Ange talet: "); int x = Integer.parseInt(in); boolean okey = true; if (x!= 0) { okey = false; int y = x+2; System.out.println(y); (b) Vilken/vilka av nedastående while-satser resulterar i en evighetsloop? Ge en kort förklaring till varje loop varför den terminerar eller inte. int i = 1; while (i!= 25) i = i + 2; int x = 0; while (x!= 55) x = x + 2; int i = 1, sum = 0;; while(i < 10 sum!=15) { sum = sum + i; i = i + 1; (c)betrakta nedanstående programsekvens: int i = 11; double sum = 0; while (i > 0) { i = i-1; sum = sum + 1.0 / i; Avsikten är att beräkna serien 1/10 + 1/9 +... + 1/2 + 1/1. Något är dock galet och det uppkommer ett exekveringsfel (ett java.lang.arithmeticexception genereas). Förklara kort vad som är fel och rätta felet Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 2

2. (10p) Skriv ett program som kontrollerar parentesmatchningar i strängar (dvs om varje vänsterparentes har en tillhörande högerparentes). Programmet läser in en sträng från kommandoraden och ger utskriften Parenteserna matchar ifall höger och vänster parenteser i strängen matchar. Om parenteserna i strängen inte matchar fås utskriften Varning!! Parenteserna matchar inte. Låt programmet (klassen) heta Parenteser och bestå av två metoder: public static boolean match(string str); public static void main(string[] args); Metoden match returnerar true ifall parenteserna i str matchar varandra, false annars. main-metoden anropar metoden match och skriver ut resultatet av beräkningen. Exempel på användning (.. i exemplen nedan betyder en följd av godtyckliga tecken som inte är vänster- eller höger- parenteser): >java Parenteser..(..(..)..).. Parenteserna matchar >java Parenteser..(..(..).. Varning!! Parenteserna matchar inte >java Parenteser..(..)..(..).. Parenteserna matchar >java Parenteser..)..)..(..(.. Varning!! Parenteserna matchar inte Ledning. Räkna antalet förekomster av vänster- respektive högerparenteser. Vad ska gälla för att parenteserna inte matchar (förutom att antal högerparenteser är lika många som antalet vänsterparenteser? 3. (26p) Spelet Fiver ska implementeras: Fiver går till på följande sätt: En spelplan på t.ex. 5x5 rutor finns. Från början är alla rutor gula och användaren ska försöka få alla rutorna att bli blå genom att klicka med musen. Om användaren klickar med musen på en ruta kommer rutan att byta färg (om den var gul så blir den blå, om den var blå så blir den gul), dessutom kommer rutorna till höger, till vänster, ovanför och nedanför att byta färg (från blått till gult eller gult till blått beroende på vilken färg de hade innan). Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 3

Den vänstra bilden visar hur programmet ser ut från början (alla rutorna är gula och antal drag är 0). Mittenbilden visar hur det ser ut när användaren har klickat en gång med musen på rutan i 4:e raden och 3:e kolumnen. Bilden till höger visar hur det ser ut när användaren klickat ytterligare en gång med musen. Denna gång på rutan i 4:e raden och 5:e kolumnen. Under själva spelplanen finns två räknare (Antal drag och Antal gula). Antal drag talar om hur många gånger användaren har klickat på spelplanen med musen och Antal gula talar om hur många av spelplanens rutor som förnärvarande är gula. Längst ner finns två knappar. Ett musklick på den högra (Sluta) avslutar programmet. Om man klickar på den vänstra knappen (Börja om) nollställs spelplanen och spelet börjar om. Spelplanens storlek ska läsas in från kommandoraden. (Du kan anta att användaren alltid startar programmet på rätt sätt, dvs med två heltal på kommandoraden) Programmet består av fyra klasser. En huvudklass Main. I klassen Main finns bara main-metoden som startar upp själva programmet. (Dvs här skapas objekt av FiverModel, FiverVy och FiverKnapp (se nedan). Fivervy och FiverKnapp stoppas ner i en JFrame). Spelplanens storlek läses in från kommandoraden till main. Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 4

En modellklass FiverModel, som ansvarar för att hålla ordning på hur vilka rutor som är blå och vilka som är gula. Information om hur många gånger användaren har klickat med musen måste också finnas här. Här finns förutom en konstruktor (minst) tre publika instans-metoder: public int antalgula() som returnerar antalet gula rutor i spelplanen. public void utfördrag(int x, int y) som givet två heltal x och y byter färg på rutan i position (x,y) på spelplanen och som byter färg på rutan till höger, till vänster ovanför och nedanför rutan i position (x,y). public void nollställ() som nollställer spelplanen (dvs sätter alla rutor till at bli gula samt nollställer räknaren Antal drag). I modellklassen behövs också en metod för att avläsa (returnera) status (gul eller blå) för en ruta i en given position i spelplanen. Metoder för att avläsa spelplanens rader och kolumner är också bra att definera här.. En Vy-Kontroll klass FiverVy, som ritar själva spelplanen och texterna Antal drag och Antal gula. Låt FiverVy vara en subklass till JPanel. Rita spelplanen i paintcomponent (Jag har bilagt API utskrif för klassen Graphics.). Låt lyssnarklassen (muslyssnaren) vara lokal i denna klass. (Den exakta layouten är inte viktig. Försök få utseendet att någorlunda likna bilderna ovan. Endast de layouts som är default för respektive komponent har använts för att generera figuren ovan). En Vy-Kontroll klass FiverKnapp där knapparna (JButton) och deras lyssnare finns (lyssnarna är inre klasser till klassen FiverKnapp). Klassen FiverKnapp är en subklass till JPanel. Skriv programmet enligt anvisningarna ovan. 4. (10p) Jultomten i Göteborg delar ut julklappar till ca 20.000 barn på julafton. Det är viktigt att ett barn inte får samma julklappar två år i rad, därför måste tomten hålla ordning på vilken julklapp respektive barn fick av honom förra året. Det är många barn och snart jul, därför behövs ett program där man snabbt och enkelt kan slå upp vilken julklapp ett barn fick förra året. (a) Skriv en klass som tomten kan använda för att översätta från barnets personnummer till julklapp. Det ska finnas tre metoder i klassen. En metod läggtill som man använder för att lägga in ett <personnummer,julklapp> par, en metod harfått som givet ett personnummer returnerar julklapp och en metod tabort som givet ett personnummer tar bort <personnummer,julklapp> paret. Dvs. låt klassen implementera följande interface: Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 5

public interface OrdningPåKlapparna{ public void läggtill(int personnummer,string julklapp); public String harfått(int personnummer); public void tabort(int personnummer); Använd en hashtabell för att lagra <personnummer, julklappar> par. (Jag har bilagt API-utskriften för HashMap). (b) Vi utökar interfacet med en metod till public Iterator klappiterator(); som returnerar ett Iterator-objekt som tomten kan använda för att iterera igenom <personnummer,julklapp> paren. Tomten vill iterera över nyckelmängden (dvs personnumren). Implementera metoden klappiterator(). (c) Tomten har använt din lösning från uppgift (a) och (b) (även om du inte gjort dem) och skapat ett objekt klappar (av typen OrdningPåKlapparna) där han har stoppat in alla 20.000 <personnummer,julklapp>-paren. Nu vill han veta vilken julklapp som flest barn fick förra året (och hur många barn som fick julklappen). Skriv ett program som använder informationen som finns i klappar och beräknar (och skriver ut) den vanligaste julklappen (samt hur många barn som fick den). 5. (5p) I många länder går julklappsutdelandet till på följande sätt: På natten när alla sover kryper tomten ner genom skorstenen och lämnar julklapparna (ofta i en strumpa) så att barnen hittar dem morgononen därpå. Det finns många hus och tiden är knapp (alla klappar ska ju delas ut på en natt). Alla hus måste hinnas med. Det har visat sig att en stor del av tiden åtgår för tomten att flytta sig från ett hus till ett annat. Tomten vill därför minimera längden av förflyttningen genom att besöka husen i lämplig ordning. Det visar sig att det är praktiskt ogenomförbart att finna den optimala lösningen till detta problem (även för ett relativt litet antal hus) 1, så vi får nöja oss med att hitta en approximativ lösning. En metod tomten kan använda för att hitta en tillräckligt bra lösning är att varje gång tomten är klar med ett hus alltid gå till det hus som ligger närmast (som han ännu inte har besökt). Husens placering kan ges som punkter i ett tvådimensionellt koordinatsystem (t.ex som koordinater på en karta) och kan lagras i två fält (ett för x-koordinaterna och ett för y- koordinaterna). 1. Problemet som beskrivs är en variant av TSP-probemet. TSP tillhör en klass av problem som kallas NPkompletta. Utmärkande för denna klass av problem är att man i praktiken kan lösa endast små instanser av problemen. Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 6

Skriv en metod ordning som givet koordinaterna för de hus som ska besökas beräknar och returnerar i vilken ordning husen ska besökas. public static int[] ordning(double[] x, double[] y); Metoden ska alltså börja i en godtycklig punkt och sedan välja som nästa punkt den punkt som ligger närmast (av dem man inte redan besökt). Metoden returnerar ordningen på hur husen ska besökas. Ledning: Avståndet mellan två punkter (x1, y1) och (x2, y2) ges av formeln: s = ( x1 x2) 2 + ( y1 y2) 2 Du får anta att husens koordinater är av rimlig storleksordning (tex alltid mindre än 100). Ett tips för att udvika att man förflyttar sig till ett hus som redan har besökts är att byta ut x och y koordinaterna för varje hus man besökt till ett stort tal (tex. 10 10 ) så att denna punkt kommer så långt bort att den aldrig väljs igen. Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) 7