Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

Relevanta dokument
Lösningar till Tentamen i Programmeringsteknik II och MN

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

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

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

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

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.

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

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

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

Observera. Tentamen Programmeringsteknik II Skrivtid:

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

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.

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

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

Lägg uppgifterna i ordning. Skriv uppgiftsnummer 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 tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

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

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

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

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

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

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 i Programmeringsteknik I

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Lösningsförslag till exempeltenta 1

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Algoritmer och datastrukturer 2012, fo rela sning 8

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

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen i Programmeringsteknik I

Obligatorisk uppgift 5

Föreläsning 9 Innehåll

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

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.

Föreläsning 9 Innehåll

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

F4: Mer om OU1, OU2, listor och träd. Carl Nettelblad

Symboliska konstanter const

Konstruktion av klasser med klasser

Del A (obligatorisk för alla)

Tentamen, Algoritmer och datastrukturer

Lösningsförslag till tentamen Datastrukturer, DAT037,

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Tentamen i Algoritmer & Datastrukturer i Java

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

Tentamen Programmeringsteknik II

DAI2 (TIDAL) + I2 (TKIEK)

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

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

Länkade strukturer, parametriserade typer och undantag

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

TENTAMEN OOP

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 9 Datastrukturer (DAT037)

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Tentamen TEN1 HI

Del A (obligatorisk för alla)

Algoritmer och datastrukturer

Objektorienterad programmering D2

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

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen FYTA11 Javaprogrammering

Tentamen Datastrukturer (DAT036)

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Obligatorisk uppgift: Numerisk kalkylator

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

Inlämningsuppgift MiniPlotter

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

BST implementering, huvudstruktur

Föreläsning 5-6 Innehåll

TDDD78 Viktiga begrepp, del 2

Transkript:

Tentamen Programmeringsteknik 2 och MN2 2006-03-10 Skrivtid: 0900-1400 Inga hjälpmedel. Tänk på följande OBS: För betygen 4, 5 och VG kommer något högre gränser än normalt användas. 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 namn 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 att du har förstått dessa även om detaljer kan vara felaktiga. Programkod skall vara läslig dvs 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 så 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. Lycka till! 1

Uppgifter 1. Följande nycklar är givna: 17, 12, 14, 29, 17, 31, 11, 3, 14, 21 a) Använd nycklarna (i given ordning) för att bygga upp ett binärt sökträd. Hur många jämförelser krävs i genomsnitt för att återfinna en lagrad nyckel i just detta träd? b) Använd nycklarna (i given ordning) för att konstruera en hashtabell med länkad kollisionshantering. Tabellstorleken skall vara 7. Hur många jämförelser krävs krävs i genomsnitt för att upptäcka att en given nyckel inte finns lagrad i just denna tabell? (Du får göra rimliga antaganden om hashfunktionen) 2. Du har fått i uppdrag att skriva ett program som ska användas för att framställa kartor. En karta ska kunna innehålla ett antal olika slags objekt såsom vägar, stigar, järnvägar, kraftledningar, sjöar, skogar, stenar, hus osv. Vid ett projektmöte med din uppdragsgivare kommer ni fram till att man kan dela upp objekten i olika kategorier med gemensamma egenskaper. Vägar, stigar, järnvägar och kraftledningar kan beskrivas som en följd av punkter som binds samman av räta linjer. Sjöar och skogar kan beskrivas som polygoner. Stenar och hus (åtminstone i de kartskalor som är aktuella) kan beskrivas som punkter. Något som är unikt för varje typ av objekt är dock färgen. Vägar ska t.ex. ritas med röd färg, järnvägar med svart, sjöar ska vara blåa och skogar gröna. a) Analysera problemet och räkna upp ett antal förslag på möjliga klasser och metoder. (1p) b) Välj ut vilka av förslagen som ska bli klasser och rita ett klassdiagram där olika relationer (framför allt arv) mellan klasserna framgår. c) Vilka attribut (instansvariabler) och metoder ska finnas i de olika klasserna? Beskriv kortfattat i klartext (inte programkod) vad de olika metoderna ska göra eller om de ska vara abstrakta. 3. Följande klass innehåller två fel. 1 public class Trubbel{ 2 3 private int anumber; 4 5 public Trubel(int n){ 6 anumber=n; 7 8 9 public int getnumber(){ 10 return n; 11 12 a) Vid första kompileringsförsöket fås följande felmeddelande 2

Trubbel.java:5: invalid method declaration; return type required public Trubel(int n){ ^ 1 error Förklara vad det beror på och hur man ska lösa problemet. (1p) b) Efter att ha rättat till det första felet görs ett nytt kompileringsförsök, vilket resulterar i ett annat felmeddelande. Trubbel.java:10: cannot find symbol symbol : variable n location: class Trubbel return n; ^ 1 error Förklara vad det beror på och hur man ska lösa problemet. 4. Nedanstående klass används för att implementera en avbildning från strängar till heltal (dvs en map ). Avbildningen representeras som en lista där varje element innehåller en nyckel (String) och ett värde (int). Listorna skall hållas sorterade med den minsta nyckeln först. Det skall inte finnas två olika noder med samma nyckel. class ListMap { protected static class ListNode { String key; int value; ListNode next; ListNode(String k, int v, ListNode n) { key = k; value = v; next = n; public String tostring() { return "(" + key + "=" + value +")"; protected ListNode head; protected static class NoSuchKeyException extends RuntimeException { public NoSuchKeyException(String id) { super(id); public int size() { /* Returnerar antalet element i listan public String tostring() { /* Returnerar en sträng i enlighet med körexemplet public boolean containskey(string k) { return containskey(k, head); (1p) 3

protected static boolean containskey(string k, ListNode h) { if (h==null k.compareto(h.key) <0 ) return false; else if (k.compareto(h.key)==0) return true; else return containskey(k, h.next); public int get(string k) throws NoSuchKeyException { /* Letar efter nyckeln k och returnerar dess värde. Om nyckeln inte hittas skall ett undantag av typen NoSuchKeyException kastas med den sökta nyckeln som parameter. public void add(string k, int v) { head = add(k, v, head); protected static ListNode add(string k, int v, ListNode h) { /* Om nyckeln k finns i den lista som börjar med h så ändras värdet till v, i annat fall skapas en ny nod med nyckel k och värdet v som läggs in på rätt plats i listan som börjar med h. I båda fallen returneras en referens till första elementet i den modifierade listan. public static void main(string[] args) { ListMap l = new ListMap(); l.add("x", 1); l.add("a", 2); l.add("z", 3); l.add("y", 4); System.out.println(l); System.out.println( "x: " + l.containskey("x")); System.out.println( "a: " + l.containskey("a")); System.out.println( "b: " + l.containskey("b")); System.out.println( "a="+ l.get("a")); System.out.println( "b="+ l.get("b")); /* Output: [(a=2)(x=1)(y=4)(z=3)] x: true a: true b: false a=2 Exception in thread "main" ListMap-NoSuchKeyException: b at ListMap.get(ListMap.java:60) at ListMap.main(ListMap.java:82) a) Implementera tostring()-metoden som skall returnera en sträng i enlighet med körexemplet. 4

b) Implementera get-metoden som skall returnera värdet som hör ihop med en given nyckel eller kasta ett undantag om nyckeln inte finns. Se kommentarer i koden. c) Implementera hjälpmetoden protected static ListNode add enligt kommentarerna i koden. 5. Följande klass används för att representera en mängd med heltal. Mängden är organiserad som ett binärt sökträd. public class TreeSet { protected static class Node { int data; Node left, right; protected Node(int d) { data = d; left = null; right = null; Node root = null; public void add(int k) { root = add(k, root); protected static Node add(int k, Node r) { if (r==null) return new Node(k); else if (k<r.data) r.left = add(k, r.left); else if (k>r.data) r.right = add(k, r.right); return r; public String tostring() { return tostring(root); protected static String tostring(node r) { String res = ""; if ( r!=null ) { res = tostring(r.left) + " " + r.data + " " + tostring(r.right); return res; public int height() { /* Returnerar höjden på trädet public boolean isomorph(treeset t) { return isomorph(root, t.root); 5

protected static boolean isomorph(node u, Node v) { /* Returnerar true om träden med rot i u och v är isomorfa, annars false. public boolean equals(treeset t) { /* Returnerar true om trädet t innehåller exakt samma nycklar som det egna trädet. public static void main(string[] args) { TreeSet t = new TreeSet(); t.add(7); t.add(1); t.add(4); t.add(12); t.add(9); t.add(15); System.out.println("t : " + t); System.out.println("Height: " + t.height()); System.out.println("t.isOmorph(t)) : " + t.isomorph(t)); TreeSet u = new TreeSet(); u.add(12); u.add(7); u.add(1); u.add(4); u.add(9); u.add(15); System.out.println("u : " + u); System.out.println("u.isOmorph(t)) : " + u.isomorph(t)); System.out.println("u.equals(t)) : " + u.equals(t)); /* Output: kursa$ java TreeSet t : 1 4 7 9 12 15 Height: 3 t.isomorph(t)) : true u : 1 4 7 9 12 15 u.isomorph(t)) : false u.equals(t)) : true kursa$ a) Implementera height-metoden som returnerar höjden på trädet dvs det största antalet noder på en väg från roten till ett löv. b) Implementera hjälpmetoden isomorph som skall returnera true om de träd som den får som parametrar är isomorfa, annars false. Två träd är isomorfa om de har exakt samma förgreningsstruktur ( ser lika ut om man ritar dem ) oavsett datainnehåll i noderna. c) Implementera equals-metoden som returnerar true om två träd innehåller exakt samma nycklar, annars false. 6. I programbilagan Parser.java m.fl. finns ett program som läser aritmetiska uttryck, representerar dem internt i ett träd, evaluerar trädet och skriver värdet (mycket likt del 2 av inlämningsuppgiften men lite färre funktioner bl.a.) Vissa delar av koden är utelämnade. (Observera att metoden som hette prim i inlämningsuppgiften heter factor här.) 6

a) Implementera eval-funktionen i klassen Variable. b) Varje försök att anropa funktionerna exp och log ger syntaxfel med diagnosen Unknown function. Vad beror det på? Rätta felet (felen)! c) Implementera restoperatorn % definierad på exakt samma sätt som i Java. Exempel: (Observera hur utskrifterna görs i main) Welcome! End with "q"? (1+2)%3; (1.0+2.0)%3.0 : 0.0? 3.5*2%6; 3.5*2.0%6.0 : 1.0? 4%2*5; 4.0%2.0*5.0 : 0.0? 5%2*7; 5.0%2.0*7.0 : 7.0? 3.5%1.6; 3.5%1.6 : 0.2999999999999998? 1/0; 1.0/0.0 : Infinity? log(1-2); log(1.0-2.0) : NaN? q Bye! Restoperatorn skall ha samma prioritet som multiplikation och division och ge felutskrift om argumentet är negativt. Du skall således skriva en klass Modulo som subklass till Binop med de metoder som behövs för evaluering, utskrift etc. Du skall också modifiera Parser-klassen så att operatorn känns igen och att uttrycksträdet kan byggas med Moduloojekt. d) Som bl a framgår av körningsexemplet ovan hanteras inte evalueringsfel av typ division med noll och felaktigt argument till log Skapa en undantagsklass för evalueringsfel och se till att undantag av denna typ kastas när sådana fel uppstår. Komplettera också main-metoden så att sådana fel hanteras på ett vettigt sätt. 7. a) Beskriv hur man kan göra för att implementera det binära sökträdet från uppgift 5 i C. Skriv de deklarationer som behövs. b) Skiv en C-funktion för att beräkna höjden på trädet. 7