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

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

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:

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.

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

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

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

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

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.

Tentamen Programmeringsteknik II

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

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 och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Tentamen Programmeringsteknik 2 och MN 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

Tentamen i Programmeringsteknik I

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

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

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

Obligatorisk uppgift 5

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.

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

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

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.

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

Tentamen i Algoritmer & Datastrukturer i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Datastrukturer, DAT037 (DAT036)

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.

Del A (obligatorisk för alla)

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 Algoritmer & Datastrukturer i Java

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till exempeltenta 1

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

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

Länkade strukturer, parametriserade typer och undantag

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Föreläsning Datastrukturer (DAT036)

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.

Tentamen, Algoritmer och datastrukturer

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

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

TENTAMEN OOP

Tentamen Datastrukturer (DAT037)

TENTAMEN OOP

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

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 8: Exempel och problemlösning

Tentamen Datastrukturer (DAT036)

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

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

Klasshierarkier - repetition

Föreläsning 3. Stack

TENTAMEN OOP

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

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

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Lösningsförslag till exempeltenta 2

OOP Objekt-orienterad programmering

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Lösningar till Tentamen i Programmeringsteknik II och MN

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Föreläsning 2. Länkad lista och iterator

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 3. Stack

Tentamen i Programmeringsteknik I

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

tentaplugg.nu av studenter för studenter

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Transkript:

Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod ö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äsbarhet, 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). All given kod följer vår kodstandard men i vissa fall kan, av utrymmesskäl, en lite kompaktare ha layout använts. 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. Svaren på del B skrivs på vanligt papper med nytt papper för varje uppgift. Bedömning och betygsättning För att överhuvud taget bli godkänd krävs att minst cirka 75% av uppgifterna på A-delen är i stort sett rätt lösta. För betyg 4 krävs att minst ca hälften av uppgifterna på B-delen är korrekt lösta. För betyg 5 krävs att minst ca 80% av uppgifterna på B-delen är korrekt lösta. Vid bedömning för betyg 4 och 5 tas även hänsyn till kvalitén på lösningarna på A-delen. Observera att B-delen inte rättas om inte A-delen är godkänd. Lycka till! 1

Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Varje tal kan förekomma flera gånger. Exempel på ett List-objekt: (3, 7, 9, 5, 3, 1, 8, 9, 5, 5, 4). Klassen SortedList som ärver från klassen List. Denna klass ska hålla listorna sorterade i storleksordning med det minsta först. Exempel på ett SortedList-objekt: (1, 3, 3, 4, 5, 5, 5, 7, 8, 9, 9). Klassen ListSet som ärver från klassen SortedList men ser till att varje enskilt värde förekommer endast en gång inga dubbletter alltså. Exempel på ett ListSet-objekt: (1, 3, 4, 5, 7, 8, 9). 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 gång i trädet. Vidstående figuren visar hur trädet ser ut om nycklarna i Listexemplet ovan läggs in med add-metoden. 1 3 5 7 9 4 8 Klasserna innehåller main-metoder som demonsterar användning och utskrifterna från dessa ligger som kommentarer sist i klasserna. Bilagan calculatorclasses innehåller (en del av de) klasser som implementerar en mycket begränsad kalkylator. En del koden i bilagorna är utelämnad antingen för att den skall skrivas som någon uppgift eller för att dess exakta utformning är av mindre intresse för att kunna lösa uppgifterna. Import-satser kan också, av utrymmesskäl, vara utelämnade. 2

Del A (obligatorisk för alla) A1. Nedan finns ett antal punkter med begrepp eller Java-uttryck samt ett antal utsagor. Din uppgift är att för varje punkt (A K) välja ett och endast ett alternativ (1 17) som sant för punkten (men det behöver inte nödvändigtvis vara hela sanningen). Observera att det också kan finnas flera rätta svar! Olika punkter (A K) kan ha samma alternativ (1 17). 1. Det minsta värdet ligger i roten. 2. Det minsta värdet hittas genom att följa vänsterpekarna så långt det går. 3. En klass som inte behöver importeras. A. System B. println() C. static D. protected E. this F. Binärt sökträd G. implements H. Math I. super(17) J. extends K. abstract 4. Ett objekt som används för utskrifter. 5. Ett metodanrop. 6. Anger att en variabel inte kan ändras. 7. Innebär att det inte går att skapa objekt av klassen. 8. Referens till det egna objektet. 9. Markerar att en klass inte får vara abstrakt. 10. Anger att en instansvariabel får avläsas men inte ändras. 11. Förbjuder åtkomst från andra klasser än den egna klassen och dess subklasser. 12. Anger att klassen är en subklass. 13. Anger att en klass implementerar metoderna i ett interface. 14. Anger att det är en för alla objekt i klassen gemensam variabel (klassvariabel). 15. Anrop av basklassens konstruktor. 16. Anger att en klass implementerar basklassens abstrakta metoder. 17. En klass deklarerad så får inte innehålla implementerade metoder. För att denna uppgift ska betraktas som godkänd bör du ha mint 8 rätt. 3

A2. Skriv det som fattas i den rekursiva metoden factorial(int n) som beräknar och returnerar fakulteten av n. Fakulteten av n definieras som 1 2 3... (n 1) n om n > 0 medan fakulteten av 0 definieras som 1. Om argumentet n är negativt ska ett EvaluationException kastas. Klassen EvaluationException som är en subklass till RuntimeException förutsätts redan definierad. public static int factorial(int n) { if (n < 0) { else { A3. Metoden size() i klassen List ska returnera antalet noder i listan. Skriv den iteration (while- eller for-sats som beräknar antalet noder så att metoden fungerar. public int size() { int result = 0; Node n = first; return result; 4

A4. Metoden count(int x) i klassen List returnerar antalet gånger värdet x finns i listan. Skriv klart hjälpmetoden! public int count(int x) { return count(x, first); private int count(int x, Node f) { if (f == null) { else if (x == f.data) { else { A5. Metoden copy() ska, genom att använda hjälpmetoden copy(node n), skapa och returnera en kopia av listan. Skriv klart metoden! protected Node copy(node n) { if (n == null) { return null; else { return new Node(n.data, copy(n.next)); public List copy() { 5

A6. Antag att ovanstående copy-metod används på listan 1, 2, 3, 4, 5, 6. Vilken av noderna i den nya listan skapas först? Motivera svaret! A7. Vad är skillnaden mellan en JLabel och en JTextField i Swing-paketet? Svara med högst två meningar! A8. Klassen SortedList ska, till skillnad från sin basklass List, se till att data lagras i storleksordning med det minsta värdet först. Vilken/vilka metoder måste (om-)definieras och varför? Vilken/vilka metoder kan det vara bra att omdefiniera och varför? Du ska inte skriva metoderna! 6

A9. I klassen ListSet finns en konstruktor som skapar ett ListSet-objekt utifrån ett List-objekt. Antag att detta List-objekt består av n unika tal (dvs inga dubbletter). Hur beror konstruktorns körtid av n? Motivera! A10. Samma fråga som ovan men om ursprungslistan består av n identiska tal. 7

A11. I klassen BST finns metoden ListSet tolistset() som ska skapa och returnera en lista med data från trädet i stigande ordning: public ListSet tolistset() { ListSet list = new ListSet(); tolistset(list, root); return list; private static void tolistset(listset list, Node r) { if (r!= null) { // Något av de tre alternativen nedan a), b) eller c) Fungerar koden? Ringa in rätt svar! Ange kompexitet (värsta fall) i de fall koden fungerar. Fyll i uttrycket inom parenteserna! a) list.add(r.key); tolistset(list, r.left); tolistset(list, r.right); Ja / Nej Θ( ) b) tolistset(list, r.left); list.add(r.key); tolistset(list, r.right); Ja / Nej Θ( ) c) tolistset(list, r.right); list.add(r.key); tolistset(list, r.left); Ja / Nej Θ( ) A12. Det finns en känd algoritm kallad spaghetti sort (se //en.wikipedia.org/wiki/spaghetti_sort vid tillfälle) som kan sortera i linjär tid dvs tiden att sortera n element är Θ(n). Antag att det tar 1 sek per tal att sortera med denna algoritm. Antag att du har en implementation av mergesort som sorterar 10 element på en sekund. Vilket antal element krävs för att spagettisorteringen ska vara snabbast? Motivera! 8

Del B (för betyg 4 och 5) Svaren till dessa uppgifter skrivs på vanligt skrivningspapper. B1. Skriv en konstruktor List(int[] a) som tar en array som parameter och konstruerar en lista med elementen från arrayen a. Observera att elementen i listan ska komma i samma ordning som i arrayen. Se körexemplet! public List(int[] a) { Node node = null; for (int i = a.length-1; i>=0; i--) { node = new Node(a[i], node); first = node; B2. Skriv en metoden scn ( single child node ) i klassen BST som beräknar och returnerar antalet noder med exakt ett barn. På trädexemplet i inledningen ska metoden alltså returnera 2 eftersom noderna med nycklarna 5 och 9 har exakt ett barn. public int scn() { return scn(root); private static int scn(node n) { if (n == null (n.left == null && n.right == null)) { return 0; else { int sum = scn(n.left) + scn(n.right); if (n.left == null n.right == null) { return 1 + sum; else { return sum; B3. Skriv en klass Queue som en subklass till klassen List. Klassen ska ha en konstruktor, en metod add som lägger ett nytt tal sist i kön, en metod remove som tar ut och returnerar det som står först i kön (dvs det som stått längst) samt en metod isempty som anger om kön är tom eller ej. Se körexemplet i klassen QueueDemo! Obs: Alla metoder ska ta konstant tid oberoende av köns längd! 9

public class Queue extends List { private Node last; public class QueueException extends RuntimeException { public QueueException(String msg) { super(msg); /** * Add a new integer in the last position of the queue * @param data the value to be added to the queue */ @Override public void add(int data) { if (last == null) { first = last = new Node(data, null); else { last = last.next = new Node(data, null); /** * Removes the first element from the queue * @return The removed value * @throws QueueException if the queue is empty */ public int remove() { if (first == null) { throw new QueueException("remove from empty queue"); else { int result = first.data; first = first.next; if (first == null) { last = null; return result; /** * Checks if the queue is empty * @return true if the queue does not contain any element, else false. */ public boolean isempty() { return first == null; B4. I main-metoden till ListSet skapas ett ListSet-objekt utifrån ett SortedList-objekt trots att det inte finns en konstruktor med en parameter deklarerad som SortedList. Varför fungerar det ändå? Skriv en konstruktor ListSet(SortedList alist) som är väsentligt bättre om listan alist är lång! Vad blir komplexiteten? 10

B5. I en bilaga finns en liten kalkylator för symboliska uttryck. Stora delar av koden är utelämnade. Jämfört med den sista obligatoriska uppgiften saknar den bl a derivering och funktioner. Den är dock kompletterad med en fakultetsoperator som skrivs med!. Fakultetsberäkningen skall göras på heltalsdelen av operanden. Exempelvis är 3.5! = 3! = 3 2 1. I parsern är fakultetsoperatorn inlagd i metoden factor (dvs den som i den obligatoriska uppgiften hanterade deriveringsoperatorn). Din uppgift är att skriva det som fattas dvs klassen Factorial och metod i klassen Symbolic så att den fungerar enligt bredvidstående körexempel. import java.util.map; Input : 3! Parsed: 3! Result: 6 Input : (2+3)! Parsed: (2+3)! Result: 120 Input : 3!! Parsed: (3!)! Result: 720 Input : "(1+x)! Parsed: ("(1+x))! Result: (1+x)! Input : "x! Parsed: ("x)! Result: x! Input : 2!+3! Parsed: 2!+3! Result: 8 Input : 3.99! Parsed: 3,99000! Result: 6 Input : -2! Parsed: (-2)! *** Evaluation error:... Input : public class Factorial extends Operator { public Factorial(Sexpr oper) { super(oper); public int priority() { return 90; public String tostring() { if (priority()< operand.priority()) { return operand + getname(); else { return "(" + operand + ")" + getname(); public String getname() { return "!"; public Sexpr eval(map<string, Sexpr> map) { return Symbolic.factorial(operand.eval(map)); och i Symbolic public static Sexpr factorial(sexpr operand) { if (operand.isconstant()) { return new Constant(factorial((int)operand.getValue())); else { return new Factorial(operand); 11