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

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

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

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

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

Observera. Tentamen Programmeringsteknik II Skrivtid:

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

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.

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

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.

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

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

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.

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

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

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

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.

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 anmälningskod överst i högra hörnet på alla papper.

Tentamen i Programmeringsteknik I

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Lösningsförslag till exempeltenta 1

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

Tentamen i Programmeringsteknik I

Tentamen i Algoritmer & Datastrukturer i Java

Obligatorisk uppgift 5

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Tentamen i Programmeringsteknik I,, KandMa/Fy,

DAT043 Objektorienterad Programmering

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

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

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

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Programmering fortsättningskurs DIT950

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

TENTAMEN OOP

Del A (obligatorisk för alla)

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Tentamen OOP

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Tentamen i Programmeringsteknik I, ES,

Tentamen, Algoritmer och datastrukturer

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

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

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Föreläsning 9 Innehåll

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

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer (DAT036)

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Konstruktion av klasser med klasser

Föreläsning 3-4 Innehåll

Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift: Numerisk kalkylator

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

Objektorienterad Programmering (TDDC77)

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

Tentamen i Algoritmer & Datastrukturer i Java

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Transkript:

Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) 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 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. Uppgifterna kommer inte i svårighetsordning. Betygsgränser: 15 ger säkert 3, 21 ger säkert 4, 26 ger säkert 5. Lycka till! 1

Uppgifter 1. Nedanstående figur visar noderna i ett binärt sökträd med heltal som nycklar. 12 3 23 1 7 17 31 5 20 42 a) Rita hur trädet ser ut efter inlägg av nycklarna 22, 19, 24, 18 och 15 (i den givna ordningen). (2p) b) Skriv en klass Node som skall representera noderna i trädet samt en klass BST som representerar trädet. Klasserna skall innehålla nödvändiga instansvariabler och lämpliga konstruktorer. Eftersom Node och BST är olika klasser uppstår ett problem med åtkomst av instansvariabler. Visa hur man löser detta med den design du presenterat ovan. c) Skriv en metod public int complete() i klassen BST som returnerar antalet kompletta noder i trädet. En komplett nod är en nod med två barn. (2p) d) Skriv en metod void postordertraverse() i klassen BST som traverserar trädet i postorderordning och skriver ut värdet i varje nod som besöks. Ange också det resultat man får om man gör en sådan traversering av trädet ovan. 2

2. Betrakta följande klasshierarki och testmetod: public abstract class Animal { public String name; public final String s = "Animal"; public Animal(String name){ this.name = name; public String getname() { return name; public abstract String speak(); public class Dog extends Animal { public final String s = "Dog"; public String speak() { return getname() + ": " + s + " Woof "; public class Labrador extends Dog { public final String s = "Labrador "; public class Cat extends Animal { public final String s = "Cat"; public String speak() { return getname() + ": " + s + " Miaow "; public class Test { public static void main(string[] args) { Animal a1 = new Animal("Nisse"); System.out.println(a1.speak() + a1.s); Animal a2 = new Dog("Fido"); System.out.println(a2.speak() + a2.s); Dog a3 = new Labrador("Labbe"); System.out.println(a3.speak() + a3.s); Animal a4 = new Labrador("Lubbe"); System.out.println(a4.speak() + a4.s); Cat a5 = new Animal("Muppet"); System.out.println(a5.speak() + a5.s); Dog a6 = new Labrador("Ludde"); System.out.println(a6.speak() + a6.s); a) Det går inte att kompilera klassen Animal med dess underklasser som de är defininerade ovan, beroende på det sätt konstruktorerna är deklarerade. Förklara problemet och visa hur man ska rätta till det så att det fungerar på avsett sätt, dvs så att alla djur får ett namn när de skapas. b) Efter att du löst problemet ovan försöker du kompilera klassen Test med sin main-metod. Den går inte heller att kompilera. Stryk satser i main-metoden som är illegala och ange sedan vad metoden skriver ut. Förklara också varför du tar bort de satser du strukit. 3

3. Vi har följande klass som representerar en sorterad länkad lista: public class List { private Node first; private static class Node { private int value; private Node next; private Node(int value, Node next) { this.value = value; this.next = next; public List() { first = null; private List(Node n) { first = n; public String tostring() { String res = ""; for (Node n = first; n!= null; n = n.next) { res = res + n.value; if (n.next!= null) { res = res + ", "; return "{" + res + ""; private static Node insert(int k, Node n) { if (n==null k<n.value) { return new Node(k, n); else if (k>n.value) { n.next = insert(k, n.next); return n; public void insert(int k) { first = insert(k, first); a) Man skulle kunna tänka sig att implementera en sökmetod search på detta sätt: public boolean search(int k) { return search(first, k); private boolean search(node r, int k) { if (r == null) return false; else if (r.value == k) return true; else return search(r.next, k); Vilken komplexitet har denna algoritm utrryckt med Ordo-notation? Det går att med givna förutsättningar förbättra denna algoritm så att man utnyttjar listans egenskaper optimalt. Visa hur detta kan göras. Vilken komplexitet har din förbättrade algoritm? b) Skriv en metod boolean equals(list l) som testar om aktuell lista och listan l är lika. Med lika menas med samma antal noder och med samma innehåll. Om det är så ska metoden returnera true, annars false. Metoden ska vara O(n), dvs linjärt beroende av listornas längd. (5p) 4

4. I bilagan finns kod som delvis implementerar en kalkylator. (Det är väsentligen samma kod som gavs till obligatorisk uppgift 5. ) Av utrymmesskäl är vissa delar som saknar betydelse för uppgiften utelämnade. a) Vi vill utöka kalkylatorn med en funktion power(x,n) som returnerar värdet av x upphöjt till n. Denna funktion har alltså två parametrar till skillnad från de övriga funktioner vi använt. Förklara hur arvshierarkin ska förändras för att införa sådana funktioner. Förklara vilka klasser som behövs och vilka ändringar i övrigt som behövs för att göra detta. Det hela ska göras på ett generellt sätt så att vi enkelt kan införa flera funktioner som har två parametrar. Du behöver inte skriva någon kod för de klasser du inför, beskriv mer abstrakt hur du tänker. b) De trigonometriska funktionerna (sin, cos... ) förutsätter att argumentet är givet i radianer. Ibland kan man ju vilja uttrycka sig i grader. För att kunna ange att man vill använda grader har kommandot set lagts in i metoden statement. Kommandot skall följas antingen av ordet degrees eller ordet radians. Exempel: Input : sin(0.5*pi) Parsed: sin(0.5*pi) Result: 0.8939966636005579 Input : set degrees Input : sin(30) Parsed: sin(30.0) Result: 0.49999999999999994 Input : set radians Result: 0.8939966636005579 Input : set nygrader *** Syntax error: Expected radians or degrees *** The error occurred at token nygrader just after token set Input : sin(0.5*pi) Parsed: sin(0.5*pi) Input : Skriv klart metoden performset() i klassen Calculator som skall se till att grader respektive radianer används enligt exemplet ovan. Skriv också de övriga kompletteringarna av koden som krävs! Tips: Grader (g) kan räknas om till radianer (r) med formeln r = g=180 5