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.

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.

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

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

Obligatorisk uppgift 5

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

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

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

Föreläsning 14 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.

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!

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

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 rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

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 Programmeringsteknik II Inledning. Anmälningskod:

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

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

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

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

Programmeringsteknik II

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

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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.

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

Föreläsning 9 Innehåll

Obligatorisk uppgift 5: Symbolisk kalkylator

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änkade strukturer, parametriserade typer och undantag

Tentamen i Programmeringsteknik I

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Tentamen Datastrukturer, DAT037 (DAT036)

Obligatorisk uppgift: Symbolisk kalkylator

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

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

Tentamen i Programmeringsteknik I

Föreläsning 9 Innehåll

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

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

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, Algoritmer och datastrukturer

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: Algoritmer och datastrukturer. Läs detta!

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.

Obligatorisk uppgift 5: Symbolisk kalkylator

Tentamen Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 4 Datastrukturer (DAT037)

Teoretisk del. Facit Tentamen TDDC (6)

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

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

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.

DAT043 - föreläsning 8

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

Diskutera. Hashfunktion

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

List.java. List.java. Printed by Tom Smedsaas

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

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

Tentamen i Algoritmer & Datastrukturer i Java

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 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 13. Träd

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

Grafik, grafiska användargränssnitt och rörliga bilder

Lösningar till Tentamen i Programmeringsteknik II och MN

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

Repetition av OOP- och Javabegrepp

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Datastrukturer för D2 DAT 035

Repetition av OOP- och Javabegrepp

Föreläsning Datastrukturer (DAT037)

Föreläsning 10 Innehåll

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

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

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

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

Transkript:

Tentamen Programmeringsteknik II 2017-05-29 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 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 inte rättas om inte 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 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 dels stommen till ett händelsedrivet program, dels en metod för att matcha uttryck med jokertecken mot text. Klassen Parser är ett utdrag ur en klass för att tolka aritmetiska uttryck. 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, Comparable, Map och String bifogad.

Del A (obligatorisk för alla) A1. Ringa in rätt svarsalternativ (om flera alterantiv kan vara rätt anges detta)! a) Vilket/vilka av följande behövs för att undvika oändlig rekursion? 1) Ett basfall 2) Ett induktionssteg 3) En retursats b) För att rita geometriska figurer i Java anropar man metoder i en instans av vilken klass? c) Vilken typ av objekt reagerar på händelser i ett händelsestyrt Swingprogram? d) Vilket eller vilka av följande påståenden gäller om en klass X ärver från en annan klass Y? 1) JPanel 2) JFrame 3) Graphics 4) DrawingTools 1) GUI 2) EventHandler 3) ActionListener 4) JPanel 1) Alla Y:s publika metoder kan anropas för ett objekt av typen X 2) Alla X:s publika metoder kan anropas för ett objekt av typen Y 3) Y måste implementera alla metoder i X 4) X måste implementera alla metoder i Y 5) En instans av Y kan deklareras som X 6) En instans av X kan deklareras som Y e) Vilken tidskomplexitet har en effektiv sorteringsalgoritm? n anger antalet element som ska sorteras. 1) Θ(1) 2) Θ(log n) 3) Θ(n) 4) Θ(n log n) 5) Θ(n 2 ) 6) Θ(2 n ) f) Hur beror antalet operationer för att hämta ett värde ur en sorterad lista på listans längd n? 1) Θ(1) 2) Θ(log n) 3) Θ(n) 4) Θ(n log n) 5) Θ(n 2 ) 6) Θ(2 n ) g) Hur beror antalet operationer för att hämta ett värde ur ett balanserat binärt sökträd på antalet noder n? 1) Θ(1) 2) Θ(log n) 3) Θ(n) 4) Θ(n log n) 5) Θ(n 2 ) 6) Θ(2 n )

h) Hur beror antalet operationer för att hämta ett värde ur en hashtabell på antalet element i tabellen, n? Antag en bra implemenation av hashtabell och hashfunktion. i) Vilket nyckelord användar man för att i en metod m1 rapportera ett undantag till den metod som anropar m1? j) Vad innebär det att en metod överskuggar en annan metod? 1) Θ(1) 2) Θ(log n) 3) Θ(n) 4) Θ(n log n) 5) Θ(n 2 ) 6) Θ(2 n ) 1) super 2) throw 3) return 4) new 1) Metoderna har samma namn, men olika antal parametrar 2) Metoderna har samma namn, men deras parametrar har olika namn 3) Metoden i fråga har samma namn och parametrar som metoden den överskuggar, men ligger längre upp i klasshierarkin 4) Metoden i fråga har samma namn och parametrar som metoden den överskuggar, men ligger längre ned i klasshierarkin k) Vad är ett undantag? 1) Ett objekt 2) En abstrakt klass 3) Ett interface 4) En metod

A2. 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) { A3. Det är förhållandevis normalt att ett visst element inte finns i en lista. Undantag ska normalt bara användas för undantagsfall (fel). Hur borde getstudent fungera i stället, utifrån hur exempelvis Map fungerar? A4. Javadoc-kommentaren för List.equals saknar giltiga kommentarrader för parametern och returvärdet. Skriv ett förslag på hur de kunde se ut med giltig syntax. A5. När man skriver sin egen klass, som Student, kan vissa standardmetoder behöva implementeras. Implementera tostring så att resultatet får formatet Förnamn Efternamn. public String tostring() { A6. Implementera metoden Student.equals. public boolean equals(object other) {

A7. Om ett objekt ska läggas i en TreeSet eller som nyckel i en TreeMap måste det finnas en sorteringsregel för hur objekten ska ordnas. En klass kan styra sin ordning genom att implementera interfacet Comparable. String är ett exempel på en standardklass som implementerar Comparable. Implementera metoden Student.compareTo. Studenter ska sorteras i stigande alfabetisk ordning, i första hand på efternamn och i andra hand på förnamn. public int compareto(student s) { A8. Titta på implementationen av List.add. Vilken tidskomplexitet har denna operation i relation till listans totala storlek n? Ge en kort motivering och svara i termer av Θ. A9. Titta på implementationen av List.remove. 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. Implementera BST.size, som returnerar det totala antalet noder i trädet. A11. Implementera hashcode 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() {

A12. Vi har följande klasser: public class Person { public void work() { System.out.println("Struggling..."); public class Professor extends Person { public void work() { System.out.println("Supervising students..."); public class UniStudent extends Person { public void work() { System.out.println("Studying for exam!"); public class PhDStudent extends UniStudent { public void work() { System.out.println("Reading a paper..."); public class Undergrad extends UniStudent { Ange i rutan på nästa blad vilken/vilka av följande kodrader som inte kommer att kunna kompileras och varför. Ange sedan vad den kvarvarande koden skriver ut. 01 Person p1 = new Professor(); 02 p1.work(); 03 Professor p2 = new Person(); 04 p2.work(); 05 PhDStudent p3 = new UniStudent(); 06 p3.work(); 07 UniStudent p4 = new PhDStudent(); 08 p4.work(); 09 Person p5 = new PhDStudent(); 10 p5.work(); 11 PhDStudent p6 = new Person(); 12 p6.work(); 13 Person p7 = new Undergrad(); 14 p7.work(); 15 Undergrad p8 = new UniStudent(); 16 p8.work(); 17 Object p9 = new Person(); 18 p9.work();

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. Alla Object har en standardversion av hashcode färdig som beräknar hashvärde utifrån referenslikhet ( == ). Varför måste du överskugga hashcode om du har valt att överskugga equals och vill använda klassen som nyckel i HashMap? B2. Skriv den nödvändiga koden för metoden List.getSurnameList, som ska returnera en List med alla studenter i listan som har ett visst efternamn. B3. I program som bearbetar text är det vanligt att kunna hantera så kallade jokertecken, eller wildcards. Skriv klart metoden Misc.matchWildcards. * (asterisk) ska tolkas som noll eller fler tecken,? (frågetecken) ska tolkas som exakt ett tecken. Se kommentarer i bilagan för några exempel på förväntade resultat. B4. 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? B5. Tänk dig att du har koden i Misc.main i bilagan. Syftet är att ha ett händelseorienterat system som läser nya kommandon och hanterar dem. Vissa kommandon tar lång tid. För att nya kommandon ska kunna ges under tiden sker lite bearbetning i varje anrop till process. När det inte finns fler kommandon från parsern och inga kommandon har mer arbete att göra (men endast då) ska programmet avslutas. Om bearbetningen av något kommando misslyckas ska efterföljande kommandon ändå köras. Nu har vi fått veta att Command.process kan kasta ett CommandException. a) Vad händer när det kastas, som koden ser ut nu? b) Ange vilka ändringar du skulle göra för att få programmet att fungera i enlighet med beskrivningen ovan, även när något kommando kastar undantag. Var god vänd!

B6. Så här ser klassdesignen för den symboliska kalkylatorn i den sista obligatoriska uppgiften ut: Sexpr int priority() Sexpr diff(sexpr) double getvalue() boolean isconstant() boolean isconstant(double) Atom Unary Binary String tostring() Sexpr operand Sexpr left Sexpr right String tostring() Variable String ident Sexpr diff(sexpr) Operator String tostring() int priority()? Function String tostring() Addition Subtraction Multiplication Division Constant Evaluation Sin Assignment double value Quotation Cos Differentiation Sexpr diff(sexpr) boolean isconstant() boolean isconstant(double) double getvalue() Negation Sexpr diff(sexpr) Exp Log Abs Sexpr diff(sexpr) int priority() En förkortad version av koden finns i bilagan. Du vill lägga till operatorn ˆ, som står för upphöjt till. xˆy=z ska tolkas som (xˆz)=z x+yˆz ska tolkas som x+(yˆz) x*yˆz ska tolkas som x*(yˆz) xˆy ska tolkas som ( x)ˆy xˆyˆz ska tolkas som (xˆy)ˆz xˆyˆzˆw ska tolkas som ((xˆy)ˆz)ˆw o.s.v. a) I vilken metod i parsern ska hanteringen av ˆ läggas till? Skriv den kod som behövs och ange vilka eventuella övriga ändringar som behöver göras i parsern! b) Upphöjt till ska representeras av en klass som heter Power. Var i klassdiagrammet ska den klassen ligga? Motivera! c) Vilka metoder behöver implementeras i Power? Motivera!