LINKÖPINGS UNIVERSITET Institutionen för datavetenskap Daniel Karlsson Tentamen i TDDC30 Programmering i Java, datastrukturer och algoritmer För I3, Ii3 Datum: 2007-12-21 Klockan: 14-18 Jour: Fredrik Berntsson, 013-282860 Administratör: Madeleine Häger, tel. 282360 Hjälpmedel: Anvisningar: Inga Omotiverade svar ger noll poäng! Börja varje uppgift på nytt papper och skriv namn och personnummer på varje inlämnat blad. Tentamen består av två delar: en teoretisk och en praktisk. Den teoretiska delen löses med papper och penna som en traditionell tentamen. Den praktiska delen löses på datorer, anvisade vid tentamenstillfället. Efter tentamen lämnas alla filer som ska examineras kvar på kontot. Poäng: Facit: Totalt kan 21 poäng erhållas, fördelade på 6 uppgifter. För godkänt krävs minst 10 poäng, för betyg 4 minst 14 poäng och för betyg 5 minst 17 poäng. Publiceras på kurshemsidan efter tentamens slut. Lycka till!
Tentamen TDDC30 2007-12-21 2 (12) 1. (4p) Objektorientering Teoretisk del a) Vi har i kursen gått igenom 3 olika relationer mellan klasser. Vilka är de och vad innebär de? b) När används konstruktorer och varför använder man dem? c) Förklara vad gränssnitt (interface) är och vad man använder dem till. 2. (3p) Binära sökträd a) Rita det binära sökträd som blir resultatet av insättning av följande sekvens av element: 7, 3, 5, 10, 8, 1, 11, 12, 6 b) Ta bort roten (7) i nedanstående binära sökträd. Beskriv varje steg. 7 2 11 1 3 10 12 8 9 c) Vilken värstafallskomplexitet har insättning i binärt sökträd? Motivera! 3. (2p) Utval a) Illustrera hur Quickselect fungerar genom att leta upp det 6:e minsta elementet i nedanstående array. Välj alltid det första elementet som pivot. 7 13 5 2 18 1 10 9 b) Vilken rumskomplexitet har Quickselect? Motivera! 4. (3p) Sortering a) Vilken jämförelsebaserad sorteringsalgoritm är optimal med avseende på både tidsoch rumskomplexitet? Motivera! b) Sortera följande array med Shellsort, beskriv varje steg sorteringen. Välj lucksekvens 5, 2, 1. 6 5 9 13 2 3 8 15 1 7 c) Kan det någon gång vara lämpligt ur tidssynpunkt att använda en kvadratisk sorteringsalgoritm? Ge exempel, motivera!
Tentamen TDDC30 2007-12-21 3 (12) Praktisk del Anvisningar: Uppgifterna i denna del ska lösas på dator. När alla uppgifter är lösta ska alla filer som ska examineras lämnas kvar på kontot. Uppgifterna ska alltså inte skickas in via tentamenssystemet. Försök att lösa alla uppgifter så långt som möjligt. Om du inte kan lösa en uppgift, förenkla uppgiften. Glöm i så fall inte att beskriva förenklingen. Poängavdrag följer beroende på förenklingens storlek. Tänk på läsbarhet och namngivning, och även på attributs och metoders synlighet. Skapa ett nytt projekt för varje uppgift. För att mata in givna filer i Eclipse rekommenderas att du först öppnar filen i en vanligt texteditor varifrån texten kopieras och klistras in i Eclipse. Vid oklarheter och frågor om detaljerad Java-syntax, använd tentamenssystemet för kontakt med examinator. Bilagd finns även en lista över vanliga unixkommandon. 5. (4p) Köer I denna uppgift ska du definiera en klass för att representera ADT Kö av heltal (int). Kalla denna klass RingBufferQueue. Använd ringbuffer-implementation av kön. I denna uppgift får du endast använda de standardklasser som återfinns i java.lang (t.ex. String, Integer, System.out och System.err) samt klassen Exception (API i bilaga). Filen QueueTester.java i katalogen Given_files innehåller ett litet testprogram. Du kan använda denna för att testa din kö. Denna klass kommer ej att examineras. a) Definiera klassen RingBufferQueue inklusive de variabler som behövs för din köimplementation. Lägg till en konstruktor, som tar ett heltalsargument. Detta argument anger storleken på den underliggande bufferten (max storlek på kön). Om du ej klarar av att skriva en sådan konstruktor, skriv då en standardkonstruktor (utan argument) och anta att max antal samtidiga element i stacken är 3. Detta ger ej full poäng. Om du ej klarar uppgiften överhuvudtaget kan du få svaret av en tentamensvakt, under förutsättning att du skriver under formuläret i slutet av detta häfte. På detta vis får du chans att klara uppgifterna b, c och d. Du får då givetvis inga poäng för denna deluppgift. b) Implementera operationen void enqueue(int elt) c) Implementera operationen int dequeue()
Tentamen TDDC30 2007-12-21 4 (12) d) Lägg till undantagshantering för operationerna enqueue och dequeue. Definiera och kasta undantaget QueueException då bufferten blir full respektive tom. 6. (5p) Prioritetsköer Klassen IntegerPriorityQueue i katalogen given_files innehåller ett kodskelett för en heap-implementation av en prioritetskö. Den innehåller följande attribut: buffer - arrayen som håller själva heapen nextemptypos - index till nästa lediga position i arrayen. Metoder för att bubbla ner respektive upp element finns redan implementerade. Dessa metoder tar ett index till det element som ska bubblas som argument. Metoderna använder i sin tur hjälpmetoden compare, vilken utför själva jämförandet mellan två element och därmed anger prioritetsordningen. Din uppgift är, i första ledet, att implementera metoderna leftchild, right- Child, parent, insert och removemin enligt beskrivning i deluppgifterna. Till din hjälp har du de färdigimplementerade bubblingsmetoderna. Dessa skall ej modifieras. I nästa steg ska du via en ny klass ändra prioritetsordningen. Klassen PriorityQueueTester i katalogen given_files innehåller ett litet testprogram som du kan använda för att testa din prioritetskö. Klassen implementerar i princip pqsort. Observera att du ska modifiera denna klass i uppgift 6d. Inga felkontroller för full- respektive tom kö behöver göras. I denna uppgift får du endast använda de standardklasser som återfinns i java.lang (t.ex. String, Integer, System.out och System.err). a) Implementera metoderna leftchild, rightchild och parent. Dessa metoder tar ett index till en nod som argument och returnerar indexet till nodens vänster eller höger barn respektive förälder. Golvfunktionen (avrundning nedåt) behöver ej explicit anges. Den sker automatiskt vid konvertering av flyttal till heltal. Om du ej kan implementera dessa metoder kan du få svaret av tentamensvakterna mot att du fyller i formuläret i slutet av detta häfte. På detta vis får du en chans att lösa de andra deluppgifterna. Du får då inget poäng för denna uppgift. b) Implementera metoden insert. Om du ej kan implementera denna metod kan du få svaret av tentamensvakterna mot att du fyller i formuläret i slutet av detta häfte. På detta vis får du en chans att lösa de andra deluppgifterna. Du får då inget poäng för denna uppgift.. c) Implementera metoden removemin. Om du ej kan implementera denna metod kan du få svaret av tentamensvakterna mot att du fyller i formuläret i slutet av detta häfte. På detta vis får du en chans att lösa de andra deluppgifterna. Du får då inget poäng för denna uppgift.
Tentamen TDDC30 2007-12-21 5 (12) d) Låt oss i denna deluppgift anta att klassen IntegerPriorityQueue som du implementerade ovan är given av någon utomstående och således inte kan modifieras. Vi vill ändå ändra dess funktionalitet så att högst heltalselement har högst prioritet, dvs vi vill vända prioritetsordningen. Implementera denna ändring, utan att skriva om hela prioritetskön, i en ny klass IntegerMaxPriorityQueue. Ändra även i PriorityQueueTester så att denna nya variant av prioritetskön används istället och därmed skriver ut talen i avtagande ordning. Du kan få en ledtråd till denna uppgift av tentamensvakterna mot att du fyller i formuläret i slutet av detta häfte. Du får då endast max 1 poäng för denna uppgift.
Tentamen TDDC30 2007-12-21 6 (12) Class java.lang.exception java.lang.object extended by java.lang.throwable extended by java.lang.exception All Implemented Interfaces: Serializable Utdrag ur Java API public Exception(String message) Constructs a new exception with the specified detail message. Parameters: message - the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. public String getmessage() Returns the detail message string of this throwable.
Tentamen TDDC30 2007-12-21 7 (12) Ansökan om svar till uppgift 5A Jag anhåller härmed om att få svaret till uppgift 5a på tentamen i TDDC30 den 2007-12-21. Jag är medveten om att jag ej kommer att erhålla poäng för uppgiften. Linköping den 2007-12-21 Signatur Textat namn Personnummer
Tentamen TDDC30 2007-12-21 8 (12) Ansökan om svar till uppgift 6A Jag anhåller härmed om att få svaret till uppgift 6a på tentamen i TDDC30 den 2007-12-21. Jag är medveten om att jag ej kommer att erhålla poäng för uppgiften. Linköping den 2007-12-21 Signatur Textat namn Personnummer
Tentamen TDDC30 2007-12-21 9 (12) Ansökan om svar till uppgift 6B Jag anhåller härmed om att få svaret till uppgift 6b på tentamen i TDDC30 den 2007-12-21. Jag är medveten om att jag ej kommer att erhålla poäng för uppgiften. Linköping den 2007-12-21 Signatur Textat namn Personnummer
Tentamen TDDC30 2007-12-21 10 (12) Ansökan om svar till uppgift 6C Jag anhåller härmed om att få svaret till uppgift 6c på tentamen i TDDC30 den 2007-12-21. Jag är medveten om att jag ej kommer att erhålla poäng för uppgiften. Linköping den 2007-12-21 Signatur Textat namn Personnummer
Tentamen TDDC30 2007-12-21 11 (12) Ansökan om ledtråd till uppgift 6D Jag anhåller härmed om att få en ledtråd till uppgift 6d på tentamen i TDDC30 den 2007-12-21. Jag är medveten om att jag max kommer att erhålla 1 poäng för uppgiften. Linköping den 2007-12-21 Signatur Textat namn Personnummer
Tentamen TDDC30 2007-12-21 12 (12) Vanliga unixkommandon mkdir katalognamn rmdir katalognamn cd katalognamn cp källfil målfil mv källfil målkatalog mv orgnamn nyttnamn ls cat filnamn Skapa katalog Ta bort katalog Sätt aktuell katalog Kopiera fil från källfil till målfil Flytta källfil till målkatalog Byt namn på filen orgnamn till nyttnamn Skriver ut alla filer i aktuell katalog Skriver ut innehållet i filen filnamn