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

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

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

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

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

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

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

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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.

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

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.

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

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

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

Del A (obligatorisk för alla)

Tentamen Programmeringsteknik II

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

Tentamen Datastrukturer, DAT037 (DAT036)

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.

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

Del A (obligatorisk för alla)

Obligatorisk uppgift 5

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.

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

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

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

Lösningsförslag till exempeltenta 1

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Tentamen, Algoritmer och datastrukturer

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen OOP

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.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

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

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

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

TENTAMEN OOP

Tentamen i Algoritmer & Datastrukturer i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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.

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen i Objektorienterad programmering

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Länkade strukturer, parametriserade typer och undantag

Tentamen TEN1 HI

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

Föreläsning 3-4 Innehåll

Tentamen Datastrukturer (DAT037)

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Föreläsning 9 Innehåll

Obligatorisk uppgift: Numerisk kalkylator

Föreläsning 9 Innehåll

Tentamen, EDAA20/EDA501 Programmering

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

Laboration A Objektsamlingar

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 9 Datastrukturer (DAT037)

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

TENTAMEN OOP

OOP Objekt-orienterad programmering

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

Transkript:

Tentamen Programmeringsteknik II 2016-05-30 Skrivtid: 1400 1900 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 ö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 in i de tomma rutorna och lämnas in. Svaren på del B skrivs på vanligt papper. Bedömning och betygsättning För att bli godkänd (betyg 3) krävs att minst 80% av uppgifterna på A-delen är i stort sett rätt löst. För betyget 4 krävs dessutom att minst hälften av uppgifterna på B-delen och betyg 5 att 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 kvalitén på lösningarna på A-delen. Observera att B-delen inte rättas om inte A-delen är godkänd. Lycka till!

Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna är sorterade i storleksordning. Samma tal kan kan förekomma flera gånger i listan. Exempel: [1, 2, 2, 2, 5, 6, 8, 8]. Klassen BST innehåller binära sökträd med heltal som nycklar. En nyckel kan förekomma högst en gång i trädet. Klasserna Calculator och Parser definierar en lite förenklad numerisk kalkylator. Klassen City utgör ett embryo till ett navigeringssystem. Varje City-objekt har en arraylist med referenser till angränsande orter dvs till City-objekt. Varje objekt innehåller information om avståndet till föräldraorten. Det går bara att resa åt ett håll och det går bara att komma till en ort på ett sätt. Strukturen är med andra ord uppbyggd som ett träd med orter i noderna. Vidstående figur visar hur det skulle kunna se ut utgående från Uppsala. Uppsala 0 Knivsta Alunda Storvreta 20 30 12 Arlanda Rosersberg Vattholma 25 10 8 Vendel 18 Solna 25 Sigtuna 20 Alla klasser utom kalkylatorn innehåller main-metoder med utskrifter som demonstrerar metoderna.

Anmälningskod: Del A (obligatorisk för alla) Svaren ska skrivas i rutorna och denna del av skrivningen ska lämnas in. A1. Metoden add i klassen List ska lägga till ett ett nytt tal i listan så att listan förblir sorterad. Skriv de satser som fattas i denna hjälpmetod: private static Node add(int x, Node f) { if (f == null x <= f.data) { else if (x > f.data) { return f; A2. Metoden toarraylist() i klassen List ska returnera ett objekt av typen ArrayList<Integer> som innehåller alla talen från listan i samma ordning som i listan. Skriv det som fattas i den iterativa metoden! public ArrayList<Integer> toarraylist() { ArrayList<Integer> result = new ArrayList<Integer>(); return result; A3. Metoden String tostring() i klassen List ska returnera en sträng innehållande värdena i listan. Se utskriften för det exakta utseendet! Skriv den enda sats som behövs i rutan nedan! public String tostring() { A4. Metoden int count(int x) i klassen List ska returnera antalet förekomster av värdet x i listan. Skriv de satser som saknas i rutorna nedan (en sats i varje)! public int count(int x) { return count(x, first); private static int count(int x, Node f) { if (f==null x<f.data) { else if (x==f.data) { else {

Anmälningskod: A5. Den iterativa metoden int removeleast() i klassen BST ska ta bort noden med det minsta värdet ur trädet samt returnerar själva värdet. Skriv de rader som fattas i nedanstående kod. public int removeleast() { int result; if (root == null) { throw new TreeException("removeLeast from empty tree"); else if (root.left==null) { result = root.key; root = root.right; else { Node n = root; while ( ) n = n.left; size--; return result; A6. Skriv klassen TreeException som används i metoden removeleast! A7. Den medföljande main-metoden i klassen BST skall avsluta genom att skriva Bye! men eftersom metoden ovanför anropas på ett tomt träd avbryts programmet innan den avslutande utskriften görs. Du skall modifiera slutet på main-metoden så att den själv hanterar undantaget, ger felutskriften och sedan fortsätter med den avslutande hälsningen dvs slutar på följande sätt: Error: removeleast from empty tree Bye! Vilken kod skall skrivas? Ange vilket radnummer din kod skall stå på!

Anmälningskod: A8. Medeldjupet i ett binärt träd definieras som summan av alla noders djup dividerat med antalet noder. Rotens djup är 1, rotens barn har djup 2, rotens barnbarn har djup 3 osv. Ett träd med 1 nod har alltid medeldjupet 1/1 = 1, en träd med två noder har alltid medeldjupet (1 + 2)/2 = 1.5 medan ett träd med 3 noder har antingen medeldjupet (1 + 2 + 3)/3 = 2 eller (1 + 2 + 2)/3 = 1.667 beroende på form. Skriv klart metoden som beräknar trädets medeldjup. Ledning: Se vad som finns med i den bifogade koden! public double meandepth() { A9. I bilagan finns en kalkylator som räknar numeriskt med de fyra räknesätten. Dessutom kan de spara värden i variabler. När man provkör den upptäcker man att det visserligen går att skriva tilldelningsuttryck som 2 + 3 = x men att variabeln x inte får något värde utan fortfarande betraktas som odefinierad. Ange den rad som saknas: som skall läggas in i klassen efter rad nummer A10. Kalkylator skall använda tecknet ^ som upphöjt till. Uttrycket 2^3 skall bli 8 liksom även rycket (1+1)^(1+2). Uttrycket a^b^c ska tolkas som (a^b)^c. Metoden factor ska hantera denna operator. Skriv det som fattas! public double factor() { double result = primary(); return result; A11. Givet följande tre klasser och skapandet av variablerna a, aa och aaa. Skriv i de tomma rutorna vad motsvarande print-sats skriver. class A { String getname() { return "A"; int getvalue() {return 1; A a = new A(); A aa = new Aa(); A aaa = new Aaa(); public String tostring() { return getname() + getvalue(); class Aa extends A { int getvalue() { return 2; System.out.println(" a : "+ a); System.out.println(" aa : "+ aa); System.out.println(" aaa: "+ aaa); class Aaa extends Aa { String getname() { return "Aaa";

Del B (för betyg 4 och 5) Svaren till dessa uppgifter skrivs på vanligt skrivningspapper. B1. Antag att det finns tre algoritmer A, B och C för att lösa ett problem. Problemets storlek kan beskrivas med parametern n. Algoritm A löser ett problem av storleken n på Θ(n) sekunder, algoritm B tar Θ(n log n) sekunder och algoritm C tar Θ(n 2 ) sekunder. Mätningar med n = 10 ger att A tar 100 sekunder, B tar 10 sekunder och C tar 1 sekund. a) För vilket värde på n kan man vänta sig att algoritm A blir snabbare än algoritm B? b) För vilket värde på n kan man vänta sig att algoritm A blir snabbare än algoritm C? Motivera! Vad kan man dra för allmänna slutsatser av resultatet? B2. Skriv metoden toset() i klassen List. Metoden ska skapa en ny lista med samma tal men där varje ta l bara förekommer en gång. Tiden ska vara O(n) där n är längden på ursprungslistan. B3. Skriv metoden public boolean subset(list another) i klassen List som avgör om alla element i den egna listan ingår i en annan lista. Om samma element förekommer flera gånger i den egna ska det förekomma minst lika många gånger i den andra listan. Tiden ska vara O(m + n) där m är längden på den ena och n längden på den andra listan. B4. I klassen BST finns metoder för att spara trädet (save(string filename)) på en fil och en metod för att läsa in och bygga upp trädet (load(string filename)) från en fil. Betrakta två möjliga implementationer av hjälpmetoden save(printwriter pw, Node r): Metod 1 Metod 2 public static void save(...) { if (r!=null) { save(pw, r.left); pw.println(r.key); save(pw, r.right); public static void save(...) { if (r!=null) { pw.println(r.key); save(pw, r.left); save(pw, r.right); Antag att du har ett välbalanserat träd med n noder. Hur beror tiden av n för respektive metod för att a) att spara trädet med save och b) att återskapa trädet med load? Svara med ett uttryck av typ Θ(f(n)) och motivera svaren! B5. I klassen BST är hjälpmetoden printinorder(node r) deklarerad static men det är inte hjälpmetoden add(int key, Node r). Vad betyder deklarationen static? Varför är den en ena av dessa hjälpmetoder static men inte den andra? Kan man deklarera add som static? Kan man utelämna static i deklarationen av printinorder? B6. Metoden ArrayList<City> findroute(string cityname) i klassen City letar efter en ort och returnerar en arraylist med orter på vägen till målet. Om orten inte hittas retuneras en arraylist med 0 element. Skriv metoden (inklusive eventuella hjälpmetoder).

B7. Metoden save med hjälpmetod sparar den uppbyggda strukturen på en fil. Läs metoderna så att du förstår formatet. (Anropens av metoden blanks har bara som uppgift att göra filen lättare att läsa för det mänskliga ögat.) Så här skulle filen som beskriver figuren på första sidan se ut: Uppsala 0 3 Knivsta 20 3 Arlanda 25 0 Rosersberg 10 1 Solna 25 0 Sigtuna 20 0 Alunda 30 0 Storvreta 12 2 Vattholma 8 0 Vendel 18 0 Skriv sedan färdigt hjälpmetoden load(scanner scanner) som läser in filer som skapats med load och bygger upp strukturen.