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.

Relevanta dokument
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 II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

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.

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 finns en referensbok (Java) hos tentavakten 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 finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

Tentamen i Programmeringsteknik I

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

Teoretisk del. Facit Tentamen TDDC (6)

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I

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

Observera. Tentamen Programmeringsteknik II Skrivtid:

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

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Seminarium 13 Innehåll

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

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

13 Prioritetsköer, heapar

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

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

Tentamen i Algoritmer & Datastrukturer i Java

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Del A (obligatorisk för alla)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen TEN1 HI

TDDC30 Programmering i Java, datastrukturer och algoritmer

Facit Tentamen TDDC kl (6)

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

Föreläsning 13. Träd

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

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

public boolean containskey(string key) { return search(key, head)!= null; }

Exempel på användning av arv: Geometriska figurer

Länkade strukturer, parametriserade typer och undantag

Tentamen i Algoritmer & Datastrukturer i Java

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

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

Tentamen, Algoritmer och datastrukturer

Arv och polymorfism i Java

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Objektorienterad programmering D2

Repetition av OOP- och Javabegrepp

Sammansatta datatyper Generics: Parametrisk polymorfism

Teoretisk del. Facit Tentamen TDDC (6)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Repetition av OOP- och Javabegrepp

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen i Grundläggande programmering STS, åk 1 lördag

Föreläsning 9 Innehåll

Föreläsning 13 Innehåll

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

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

Träd Hierarkiska strukturer

Transkript:

Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod på alla papper. Skriv inte längst upp i vänstra hörnet - det går inte att läsa där efter sammanhäftning. Fyll i försättssidan fullständigt. 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. Programkod skall vara läslig, d.v.s. den skall vara vettigt strukturerad och indenterad. Namn på variabler, metoder, funktioner, klasser etc. skall vara beskrivande men kan ändå hållas ganska korta. 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. Uppgifterna kommer inte i svårighetsordning. Lycka till! 1

Uppgifter 1. Den mycket användbara klassen ArrayList har åtminstone en nackdel jämfört med arrayer: Komponenterna måste vara objekt. Om man vill lagra primitiva datatyper i en ArrayList, måste dessa packas in i objekt av en passande omslagsklass. Exempel: Nedanstående kod ger en datastruktur enligt vidstående figur. ArrayList<Integer> a = new ArrayList<Integer>(); a.add(); a.add(); a.add(9); a.add(12); a.add(42); 0 2 1 4 9 12 42 Om man i stället lagrar samma data i en array får man följande utseende: int[] a = new int[]; a[0] = ; a[1] = ; a[2] = 9; a[] = 12; a[4] = 42; 9 12 42 Array-versionen kräver således väsentligt mindre minne och koden blir effektivare. Uppgiften består i att skriva delar av en klass som har samma flexibilitet som en ArrayList men som behåller arrayens kompaktare representation. Priset som man får betala är att datatypen måste fixeras. Bilagan ArrList innehåller ett skal till denna klass. a) Skriv en klass ArrListException som en underklass till RuntimeException. Denna klass skall användas vid felaktig användning (felaktiga parametrar) av metoderna i klassen ArrList. b) Skriv en parameterlös konstruktor som skapar en tom ArrList med plats för 10 element. c) Skriv en konstruktor som skapar en tom ArrList med plats för n element, där n ges som argument till konstruktor se bilagan! d) Skriv metoden size() som returnerar antalet lagrade element d.v.s. det antal som är lagrade inte storleken på den array som används. e) Modifiera metoderna get och set i klassen ArrList så att de kastar undantag om parametern index anger ett värde utanför de lagrade elementen. f) Skriv en metod remove(int index) som tar bort och returnerar elementet på det givna indexet. Kontrollera värdet på parametern! g) Skriv de två add-metoderna enligt kommentarerna i bilagan. Metoderna skall kontrollera att index-parametern är korrekt. (Om det t ex finns lagrade värden på plats 0, 1 och 2 så får man lagra ett element på plats 0, 1, 2 och men inte på 4 eller högre) Tips! Den befintliga koden i bilagan kan ge ledtrådar till hur metoderna ovan ska implementeras! 2

2. En prioritetskö är en kö där uttagen styrs av elementens prioritet och inte av hur länge de har stått i kön. Om elementen lagras i en länkad lista, kan man lagra elementen antingen sorterat på prioritet eller osorterat. Med en sorterad lista blir uttagen ur kön effektiva (O(1) - högst prioritet ligger först) men inläggen arbetsamma (O(n) man måste leta upp platsen för ett nytt element). Om elementen lagras osorterat blir inläggen enkla (O(1) nya element läggs sist) men uttagen ineffektiva (O(n) listan måste sökas efter element med högst prioritet). Ett alternativ till en länkad lista är ett binärt träd sorterat på prioritet. Det blir ungefär som ett binärt sökträd med prioriteter som nycklar. En skillnad är dock att samma nyckel (prioritet) kan förekomma på flera ställen i trädet. Om prioriteterna som ankommer är slumpmässigt fördelade kommer trädet att hållas någorlunda balanserat. a) Hur många operationer krävs i värsta respektive bästa fall för att göra ett inlägg i och ett urtag ur ett sådant träd med n lagrade noder? Antag att prioriteterna ankommer slumpmässigt och inkludera tiden det tar att hitta platsen där ett element ska läggas in / att hitta det element som ska tas bort. Ange svaret på formen O(f(n))! Svaren skall motiveras! b) Skriv en klass som implementerar en prioritetskö med ett binärt träd. För denna uppgifts skull räcker det att elementen endast (förutom referens till höger och vänsterbarn) innehåller ett heltal som anger prioriteten. Klassen skall ha följande: en konstruktor public (). en metod void enqueue(int priority) för att lägga in ett ny prioritet i kön. en metod int dequeue() som tar ut elementet med högst prioritet och returnerar dess prioritet. en tostring-metod som returnerar en sträng med noderna i prioritetsordning. en metod int size() som returnerar antalet element i kön. Obs: Element med samma prioritet skall komma ut i ankomstordning. På nästa sida finns ett exempel på kod och resulterande struktur. (En låg siffra anger en hög prioritet):

Kod Resulterande struktur pq = new (); pq.enqueue(); pq.enqueue(); pq.enqueue(); pq.enqueue(2); 2 4

. I bilagan allshapeclasses finns en basklass Shape för att representera geometriska figurer med underklasser för rektanglar och cirklar. Figurerna kan läsas in, ritas, skrivas och deras yta kan beräknas. Se den givna koden för möjliga operationer. a) Skriv en klass Line för att representera linjer. Klassen skall skrivas som en underklass till klassen Shape. En linje representeras av sina två ändpunkter. Tips: En linje mellan punkterna (x 1, y 1 ) och (x 2, y 2 ) ritas av metoden drawline(x1, y1, x2, y2) i klassen Graphics. Se också paint-metoderna i de givna klasserna! b) Skriv en klass Square som en underklass till klassen Rectangle. Obs: För att få poäng skall arv utnyttjas! Du skall alltså bara skriva de delar som behövs för de nya strukturerna och inte upprepa befintlig kod. Du ska dock skriva konstruktorer till vilka man kan skicka in värden på samtliga instansvariabler i dina klasser. Exempel på indata, utskrifter och ritad figur (de estetiskt tilltalande färgerna syns tyvärr inte i de kopierade tentorna). Indata: 00 00 rectangle 20 40 0 200 0 200 200 0 square 0 0 200 100 200 100 200 square 20 200 20 20 20 100 200 circle 40 20 100 100 100 100 0 circle 100 00 20 200 0 200 80 line 100 100 0 0 0 2 00 400 exit Utskrifter: > run DrawTest Stored shapes: Rectangle(20, 40) Square(0, 0) Square(20, 200) Circle(40, 20) Circle(100, 00) Line(100, 100) Total area: 1089 >