Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Relevanta dokument
Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer 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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

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

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ägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Observera. Tentamen Programmeringsteknik II Skrivtid:

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

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

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

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 är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Länkade strukturer, parametriserade typer och undantag

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Programmeringsteknik II

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

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

F7: Rekursiv till iterativ, sammanfattning, genomgång av omtentan Carl Nettelblad

Tentamen Datastrukturer, DAT037 (DAT036)

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

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

Tentamen i Programmeringsteknik I

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

Tentamen i Programmeringsteknik I

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Teoretisk del. Facit Tentamen TDDC (6)

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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.

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 Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

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

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 9 Innehåll

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen, Algoritmer och datastrukturer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

Sökning och sortering

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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

Föreläsning 9 Innehåll

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen Datastrukturer D DAT 035/INN960

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Teoretisk del. Facit Tentamen TDDC (6)

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Facit Tentamen TDDC (7)

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

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 Datastrukturer (DAT037)

Tentamen TEN1 HI

Föreläsning 1 Datastrukturer (DAT037)

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Föreläsning 4 Datastrukturer (DAT037)

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

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Seminarium 13 Innehåll

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

Introduktionsmöte Innehåll

Tentamen Datastrukturer (DAT037)

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Algoritmer och datastrukturer 2012, fo rela sning 8

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

EDAA01 Programmeringsteknik - fördjupningskurs

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037)

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Tentamen i Grundläggande programmering STS, åk

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

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

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Transkript:

Tentamen Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan fullständigt. Såvida inget annat anges får man bygga på lösningar till föregående uppgifter även om dessa inte har lösts. Det är tillåtet att införa hjälpmetoder och hjälpklasser. Uttrycket skriv en metod som skall alltså inte tolkas så att lösningen inte får struktureras med hjälp av flera metoder. Alla uppgifter gäller programmeringsspråket Java och programkod skall skrivas i Java. Koden skall vara läslig dvs den skall vara vettigt strukturerad och indenterad. Namn på variabler, metoder, klasser etc skall vara beskrivande men kan ändå hållas ganska korta. Observera att betyget kan påverkas negativt bland annat av: icke-privata eller onödiga instansvariabler, dålig läslighet, upprepning av identisk kod, underlåtenhet att utnyttja given eller egen tidigare skriven metod, underlåtenhet att utnyttja arv och lösningar som har väsentligt sämre komplexitet än nödvändigt t ex Θ(n 2 ) i stället för Θ(n log n). Observera Skrivningen består av två delar. Lösningarna till uppgifterna på del A ska skrivas direkt på skrivningsformuläret och lämnas in. Rutorna är tilltagna i storlek så att de ska rymma svaren. Om du ändå inte får plats får du fortsätta på vanligt skrivblad. Markera gärna detta både på försättsbladet och i rutan. Skriv inte på baksidan. Svaren på del B skrivs på vanligt papper med nytt papper för varje uppgift. Var god vänd!

Bedömning och betygsättning För att bli godkänd (betyg 3) krävs att A-delen i huvudsak är rätt löst. Det betyder inte att varje uppgift behöver vara exakt rätt, men att du ska visa att du i huvudsak uppfyller kursens mål, som säger att studenten efter godkänd kurs ska kunna: använda programspråket Java, både skriva egen kod och förklara vad en given kod utför; redogöra för begreppen arv och polymorfi i ett objektorienterat språk och använda dessa begrepp i egen programutveckling; implementera rekursiva lösningar till olika problem; beskriva principen för analys av algoritmers effektivitet och utföra sådan analys av enklare algoritmer; beskriva, implementera och använda de grundläggande datastrukturerna array, länkad lista, hashtabell och binärt träd samt abstrakta datatyper som stackar, köer och avbildningar; beskriva hur felhantering med hjälp av undantag fungerar och kunna använda detta i egna program. För betyget 4 krävs dessutom att minst hälften, och för betyg 5 alla, uppgifterna på B-delen är i stort sett rätt lösta. Vid bedömning för dessa betyg tas även hänsyn till kvaliteten på lösningarna på A-delen. Observera att B-delen normalt sett endast rättas om A-delen är godkänd. Lycka till! Inledning I bilagorna finns ett antal mer eller mindre ofullständiga klasser. Klassen BST innehåller en variant av binära sökträd med tal som nycklar. Klassen ExamException är en liten undantagsklass. Klassen Item lagrar information om element i en bibliotekskatalog. Till den hör ett interface Duplicable för att kopiera sådana objekt. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av Student-objekt. Varje student kan förekomma flera gånger. Klassen Misc innehåller ett antal separata metoder. Klassen SmallGame utgör ett litet händelsestyrt spel med händelseloopen i main. Klassen Student representerar en student med för- och efternamn. Den är oföränderlig, det går inte att byta namn efter att en student har skapats. Notera att även de metoder som inte är implementerade oftast har giltig Javadoc-dokumentation, som kan ge värdefull information. Utöver detta finns delar av den officiella Java-dokumentationen för ArrayList, Map, Scanner och Set bifogad, liksom klasshierarkierna för några undantagsklasser.

Del A (obligatorisk för alla) A1. Ringa in rätt alternativ. På näst sista frågan kan flera alternativ vara rätt. På sista frågan kan du dra streck eller skriva bokstäver från högerkolumnen vid varje funktion i vänsterkolumnen. a) Du har skrivit ett användargränssnitt genom att ärva från JPanel. Du märker att det oftast inte syns när något har ändrats, men om användaren växlar fönster dyker det ibland upp. Du har kommit på att du måste anropa en metod för att säkert se till att världen ritas upp. Vilken metod ska du anropa? 1) drawcomponent 2) paintcomponent 3) performrendering 4) repaint b) Vilken typ av traversering ska du göra om du vill besöka noderna i ett binärt sökträd i storleksordning? 1) pre-order 2) post-order 3) next-order 4) in-order 5) up-order c) I vilken av följande datastrukturer går det snabbast att hitta det största elementet? Sorterad innebär i det här fallet att elementen kommer i stigande ordning. 1) En sorterad enkellänkad lista 2) En sorterad dubbellänkad lista 3) En sorterad cirkulär lista 4) Ett balanserat binärt sökträd d) Vad händer om man inte fångar ett kastat Java-undantag i ett enkelt program? 1) Programmet avslutas utan att indikera vad som gick fel 2) Programmet avslutas med en felutskrift 3) Programmet fortsätter köra utan att indikera att något gick fel 4) Programmet ger en felutskrift och fortsätter att köra e) Vilken typ av undantag behöver inte fångas eller deklareras med throws i metodhuvudet? 1) Throwable 2) Error 3) RuntimeException 4) IOException f) Vilket av följande nyckelord används (i klassdeklarationen) för att ange att en Java-klass ärver från en annan? 1) extends 2) implements 3) inherits 4) super

g) Vilket eller vilka av följande påståenden gäller för en rekursiv men inte en iterativ metod? 1) Metoden måste returnera ett värde 2) Metoden anropar sig själv 3) Metoden måste innehålla både if och else 4) Tidsåtgången för metoden växer linjärt med storleken på dess argument h) Vilken tidskomplexitet har följande funktioner i genomsnitt? Para ihop varje funktion i vänsterkolumnen med ett uttryck i högerkolumnen. Observera att flera funktioner kan ha samma tidskomplexitet! a) Sökning i ett binärt sökträd b) Sortering med samsortering ( merge sort ) c) Sortering med instickssortering ( insertion sort ) d) Beräkning av medelvärdet av alla element i en array e) Sökning i en sorterad länkad lista f) Sökning i en sorterad array A) Θ(1) B) Θ(n) C) Θ(log(n)) D) Θ(n log(n)) E) Θ(n 2 ) F) Θ(n 3 ) G) Θ(2 n )

A2. I klasen List finns en metod getallsurnames som ska returnera en Set med alla efternamn som förekommer på minst en student i listan. Skriv nödvändig kod för att denna metod ska fungera. A3. Direkt efter getallsurnames finns Javadoc-dokumentationen för en liknande metod. Läs dokumentationen och föreslå ett lämpligt metodhuvud för metoden. Huvudet ska återspegla den information som finns i dokumentationen, till exempel vad gäller argument och returvärde. Obs! Du behöver alltså inte implementera själva metoden. A4. Metoden Misc.printAllKeys ska skriva ut alla nycklar i en Map som skickas in. Se till att den gör detta genom att fylla i luckorna nedan. Det är möjligt att en eller flera luckor bör lämnas tomma. public static void printallkeys(map<string, String> m) { for ( ) { } } System.out.println(k); A5. Implementera en överskuggande version av hashcode, som är en standardmetod i Object, för Student. Se till att de hypotetiska personerna Sten Björn och Björn Sten inte får samma hashvärde. Du får utnyttja befintliga hashcode-metoder i andra klasser. public int hashcode() { }

A6. I filen Misc.java finns en metod ishello. Beskriv vilka likheter och skillnader som finns i vad som händer när metoden anropas beroende på värdet på de två argumenten s och mode. Fokusera på de skillnader som märks för den som anropar metoden. A7. Implementera BST.depthFor, som returnerar djupet för noden med ett visst värde i trädet, det vill säga väglängden från roten till den noden. Varje nod ska räknas in. Returnera -1 om noden inte finns. A8. Implementera List.smallest, som returnerar det Student-objekt som kommer först vid jämförelse med compareto. A9. Titta på implementationen av List.contains. Vilken tidskomplexitet har denna operation i relation till listans totala storlek n, i fallet då studenten inte visar sig finnas i listan? Ge en kort motivering och svara i termer av Θ.

A10. Titta på implementationen av BST.contains. Vilken tidskomplexitet har denna operation om frågan gäller ett slumptvist valt tal av de som finns i trädet? Ge en kort motivering och svara i termer av Θ, i relation till trädets totala storlek n och inre väglängden (ipl), I = j d j, där d j är djupet för nod j. A11. List.getStudent letar efter en student med ett visst namn. Den kastar undantaget ExamException om studenten inte finns. Implementera metoden ensurestudent. Den ska använda getstudent och lägga till och returnera ett nytt studentobjekt med detta namn om det inte redan finns. public Student ensurestudent(string firstname, String surname) { } A12. a) Vad innebär det att en metod binds dynamiskt? b) Ge ett konkret, verkligt exempel på användning av dynamisk bindning, till exempel från kursens obligatoriska uppgifter.

Del B (för betyg 4 och 5) Svaren till dessa uppgifter skrivs på vanligt skrivningspapper. Se till att skriva varje uppgift på ett eget blad. B1. Metoden List.getRandom ska returnera en slumpmässigt utvald student ur listan, alla med samma sannolikhet. a) Gör den (alltid) det? Vilka problem eller fel ser du med metoden? Beskriv en möjlig lösning för att undvika problemen. b) Uppskatta den ursprungliga metodens genomsnittliga körtidskomplexitet i termer av listans storlek n och Θ. Motivera ditt svar. B2. Skriv den nödvändiga koden för metoden BST.listFromIndex, som ska skapa en ArrayList enbart bestående av det tal som finns lagrat på index i i trädet. Indexen räknas ordnade in-order. Körtidskomplexiteten ska vara Θ(i+log n) för balanserade träd, den får exempelvis inte vara Θ(n) oberoende av i. Om index i inte finns ska ett undantag kastas i enlighet med dokumentation. B3. Klassen BST har stöd för att skapa en ArrayList med talen in-order. a) Skriv koden för den konstruktor som tar en ArrayList för att skapa ett träd från en sådan sorterad ArrayList. Skriv ytterligare hjälpmetoder vid behov. Det resulterande trädet får maximalt ha höjden log 2 n, där n är antalet element. Tänk efter hur du kan göra processen så tidseffektiv som möjligt. b) Motivera vilken tidskomplexitet konstruktorn har. Hur förhåller den sig till tidskomplexiteten för att lägga till samma element i trädet ett i taget i slumpmässig ordning? Var god vänd!

B4. Metoden Misc.findHighestNumber ska gå igenom filerna 1.txt till 100.txt, öppna var och en och se vilken som har det största heltalet. Tyvärr har implementationen inte tillräcklig felhantering. Två fel som får den nuvarande koden att avbrytas på grund av undantag är att någon av filerna inte finns, och att en fil finns, men är tom. Detta ska tillåtas och metoden ska fortsätta läsa talen från övriga filer. Andra typer av fel vid läsning av filerna, som att innehållet inte är ett heltal, ska däremot resultera i att metoden kastar undantag. Föreslå lämpliga tillägg till metoden, med så konkret och korrekt kod som möjligt. Du kan hänvisa till radnummer i den befintliga metoden, eller skriva av hela metoden och göra relevanta tillägg. Ingen del av den nuvarande logiken ska förändras. B5. Klassen SmallGame implementerar ett hypotetiskt interface KeypressListener. Det är ett händelsestyrt spel där användaren ska tänka på ett tal från 1 till 100. Du ska göra klart spelet genom att implementera metoden keypress, utan att ändra något i händelseloopen. Datorn ska i varje steg presentera en ny gissning. Om talet är större ska användaren trycka på +, om talet är mindre ska användaren trycka på -. Om gissningen är rätt ska användaren skriva =. Då avslutas programmet. Om användaren trycker på något annat ska ingenting hända. I exemplet i bilagan avslutas programmet så fort användaren trycker på någon tangent alls. Förutom själva metoden keypress och konstruktorn SmallGame kan du vilja skapa hjälpmetoder och instansvariabler i SmallGame. Du ska däremot inte ändra i SmallGame.main. B6. I bilagan finns delar av ett annat program med klassen Item och interfacet Duplicable. Programmet ska hantera en bibliotekskatalog. Item är tänkt att representera objekt (böcker, tidningar, CD-skivor, o.s.v.) som finns i katalogen. Skriv en icke-abstrakt klass som representerar böcker och som: a) ärver från Item b) överskuggar tostring c) kan skapas med samma parametrar som Item d) implementerar Duplicable Tänk på att inte skriva någon överflödig kod. Se till att namnge olika element i din kod på lämpligt sätt! Du behöver inte skriva Javadoc i koden.