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

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

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.

Obligatorisk uppgift 5

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

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

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.

Observera. Tentamen Programmeringsteknik II Skrivtid:

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.

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

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

Obligatorisk uppgift 5: Symbolisk kalkylator

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!

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

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

Lösningar till Tentamen i Programmeringsteknik II och MN

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

Obligatorisk uppgift 5: Symbolisk kalkylator

Programmering II (ID1019) :00-17:00

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

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

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

Obligatorisk uppgift: 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

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

Tentamen Programmeringsteknik II

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

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

Föreläsning 5-6 Innehåll

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

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

Tommy Färnqvist, IDA, Linköpings universitet

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.

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

Obligatorisk uppgift: Numerisk kalkylator

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

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

Del A (obligatorisk för alla)

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

PROGRAMMERING-Java Omtentamina

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

Konstruktion av klasser med klasser

OOP Objekt-orienterad programmering

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Obligatorisk uppgift: Numerisk kalkylator

Del A (obligatorisk för alla)

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

Inlämningsuppgift MiniPlotter

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

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

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

BST implementering, huvudstruktur

Tentamen Datastrukturer, DAT037 (DAT036)

TDDC77 Objektorienterad Programmering

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

TENTAMEN OOP

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Lösningsförslag till exempeltenta 1

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3-4 Innehåll

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Föreläsning 9 Innehåll

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I

Symboliska konstanter const

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 8: Exempel och problemlösning

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

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

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

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

Tentamen i Introduktion till programmering

TENTAMEN OOP

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

Föreläsning 9 Innehåll

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

TENTAMEN OOP

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 Programmering

DAT043 Objektorienterad Programmering

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad

Typkonvertering. Java versus C

Tentamen TEN1 HI

Kurskod D0010E Datum Skrivtid 5tim

Transkript:

Tentamen Programmeringsteknik II 2009-05-26 med lösningar Skrivtid: 0900-1200 Uppgifter 1. Programbilagan ListMap.java innehåller en klass som implementerar en avbildning mellan mängden strängar och mängden heltal dvs man kan till en sträng koppla ett heltalsvärde. Klassen är implementerad med en länkad lista. Vissa delar av koden är utelämnade. a) Implementera metoden boolean containskey(string key) som returnerar true om en nod med nyckeln key finns lagrad, annars false. Ledning: Använd den befintliga metoden search. public boolean containskey(string key) { return search(key, head)!= null; b) Implementera metoden void put(string key, int value). Om key redan är lagrad skall dess värde ändras till value, annars skall en ny listnod med key och value skapas och läggas först i listan. Ledning: använd den befintliga metoden search. public void put(string key, int value) { ListNode l = search(key, head); if ( l==null ) { head = new ListNode(key, value, head); else { l.value = value; c) Skriv den kod som fattas i metoden ListNode remove(string key, ListNode h). Metoden skall ta bort den nod som innehåller nyckel key ur den (del-)lista som börjar med h och returnera en referens till första noden i den modifierade listan. Om nyckeln inte finns skall listan inte förändras. l.next=remove(key,l.next); return l; 2. Klassen BST (se programbilagan BST.java) implementerar en mängd av heltal. Observera att ett givet tal bara kan finnas med en gång i mängden. a) Skriv färdigt hjälpmetoden tostring(node r) som returnerar ett String-objekt bestående av det träd som har sin rot i r. Se körutskrifterna i slutet av bilagan! Ledning: Utnyttja tostring()-metoden i Node-klassen. 1

protected static String tostring(node r) { if (r==null) return ""; else return tostring(r.left) + r + tostring(r.right); b) Skriv metoden int first() som skall returnera det första (minsta) värdet i trädet. public int first() { if (root==null) { throw new BSTException("first() on an empty tree"); else { Node r = root; while (r.left!=null) { r = r.left; return r.elem; c) Skriv färdigt hjälpmetoden Node add(int e, Node r) som ser till att en nod med värdet e lagras i det (sub-)träd som har sin rot i r. Alltså: Om e redan finns görs ingenting annars adderas en ny nod med e som värde på rätt plats i trädet. Metoden skall returnera en referens till rotnoden i det modifierade (del-)trädet. protected Node add(int e, Node r) { if (r==null) { r = new Node(e); else if (e<r.elem) { r.left = add(e, r.left); else { r.right = add(e, r.right); return r; 3. I programbilagan finns ett program som läser aritmetiska uttryck, representerar dem internt i ett träd, evaluerar trädet och skriver värdet (mycket likt projektuppgiften men utan funktioner). Programmet består av en Calculator-klass med en main-metod, en Parser-klass med metoder för inläsning och uppbyggnad av trädrepresentationen av uttrycken, en klasshierarki för representation av noderna i uttrycksträdet med klassen Sexpr som basklass samt klassen Symbolic för symbolisk/numerisk aritmetik. Vissa delar av koden är utelämnade. Dessutom finns klassen SimplifiedTokenizer som används av Parser-klassen. Förutom det som fanns i projektuppgiften kan programmet hantera operationen fakultetsberäkning genom operatorn!. Denna är, som brukligt, en postfixoperator 2

dvs den skrivs efter argumentet. Inläsningen hanteras av factor-metoden i Parserklassen. Som framgår av körexemplen skall fakultetsberäkning av negativa tal och av tal som inte är heltal betraktas som evalueringsfel. a) Skriv färdigt metoden assignment i klassen Parser. Metoden skall bygga noder som representerar tilldelningsoperationer dvs noder av typen Assignment. private Sexpr assignment() { Sexpr res = expression(); while (st.getchar()== = ) { st.nexttoken(); if (st.isword()) { res = new Assignment(res, new Variable(st.getWord())); st.nexttoken(); else { throw new SyntaxException("= måste följas av en variabel"); return res; b) Skriv färdigt metoden diff i subklassen Variable. Metoden skall returnera derivatan av variabeln med avseende på den variabel som parametern v står för. public Sexpr diff(sexpr v) { if (ident.equals(v.getname())) { return new Constant(1.); else { return new Constant(0.); c) Skriv färdigt metoden eval i subklassen Differentiation. Metoden skall returnera derivatan av sitt evaluerade vänstra argument med avseende på den variabel som finns som högra argument. public Sexpr eval(map<string, Sexpr> v) { Sexpr e = left.eval(v); return e.diff(right); d) Implementera tostring()-metoden för klassen Factorial som representerar fakultetsoperationen. Operatorn skall, som vanligt, skrivas efter operanden. Metoden skall vid (och endast vid) behov sätta ut parenteser. 3

public String tostring() { if ( argument.priority() < this.priority() ) { return "(" + argument + ")" + getname(); else { return argument + getname(); e) Implementera metoden factorial i klassen Symbolic så att den fungerar i enlighet med körexemplet. Se anropet från eval-metoden i klassen Factorial. public static Sexpr factorial(sexpr arg) { if (!arg.isconstant()) { return new Factorial(arg); else { if ( arg.getvalue()<0 ((int) arg.getvalue())!= arg.getvalue()) { throw new EvaluationException("Illegal fakultetsberäkning: " + arg + "!"); else { int res = 1; for (int i= 1; i<=arg.getvalue(); i++) { res = i*res; return new Constant(res); Nedan följer ett körexempel. jeltz$ java Calculator Välkommen till kalkylatorn! > 1+2*3 = a = b +2.0*3.0 = a = b 7.0 > a a 7.0 > 3=a 3.0 = a 3.0 > z=2 *** Syntaxfel: = måste följas av en variabel > x x x x > 1=x = x > x x x x 0.0 > "x x 4

"x x > (x*z) z (x*z) z > 10=x 10.0 = x 10.0 > (x*z) z (x*z) z 10.0 > 3! 3.0! 6.0 > 4! 4.0! 24.0 > 3!! 3.0!! 720.0 > (n-m)! (n-m)! (n-m)! > n!! n!! n!! > -3! -3.0! -6.0 > (-3)! (-3.0)! *** Evalueringsfel: Illegal fakultetsberäkning: -3.0! > 2.5! 2.5! *** Evalueringsfel: Illegal fakultetsberäkning: 2.5! > quit Tack för idag (och för fisken) jeltz$ 5