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

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

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

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

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

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

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

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!

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

Länkade strukturer, parametriserade typer och undantag

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

Föreläsning 9 Innehåll

Lösningsförslag till exempeltenta 1

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

Obligatorisk uppgift 5

Föreläsning Datastrukturer (DAT036)

Tentamen Programmeringsteknik II

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

Konstruktion av klasser med klasser

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

F3: OU2, undantag, avbildningar, listor och träd. Carl Nettelblad

Klasshierarkier - repetition

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

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

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Lösningar till Tentamen i Programmeringsteknik II och MN

Föreläsning 3. Stack

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

Tentamen, Algoritmer och datastrukturer

Inlämningsuppgift MiniPlotter

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Föreläsning 10 Innehåll

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

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

F7: Rekursiv till iterativ, sammanfattning, genomgång av omtentan Carl Nettelblad

Föreläsning 10 Datastrukturer (DAT037)

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen Datastrukturer, DAT037 (DAT036)

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

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

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

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 4 Datastrukturer (DAT037)

Obligatorisk uppgift 5: Symbolisk kalkylator

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

TDDC Terminologi Uppdaterad Fö #1

13 Prioritetsköer, heapar

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

Föreläsning 3. Stack

Tentamen Datastrukturer (DAT036)

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Sökning och sortering

Lösningsförslag till exempeltenta 2

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

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Seminarium 13 Innehåll

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 2 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

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

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

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Lösningar till tentamen i EDAF25

Lösningar för tenta 2 DAT043,

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Föreläsning 9 Innehåll

Algoritmer och datastrukturer 2012, fo rela sning 8

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Transkript:

(22 maj 2015 F14.1 ) Grafik, grafiska användargränssnitt och rörliga bilder Viktigt: Grafiska komponenter: Fönster, etiketter, knappar, textfält,... Tekniken med att med genom arv definiera t ex sitt eget fönster (class MyWindow extends JFrame) Grafiska användargränssnitt ( GUI ) Händelsestyrda program callback-metoder ( lyssnare ) Händelser: mustryck, tangenttryck, timer-händelse,... Tekniken att göra rörliga bilder med hjälp av en timer.

(22 maj 2015 F14.2 ) Vad behöver ni kunna och inte kunna på tentan Bör kunna: Begreppen Läsa och förstå kod som definierar ett GUI Göra små modifieringar i given kod Behöver inte kunna några detaljer utantill! Kommer inte behöva skriva någon kod från scratch.

(22 maj 2015 F14.3 ) Rekursiv problemlösning 1. Dela upp problemet i ett eller flera delproblem av samma typ som ursprungsproblemet 2. Lös delproblemen på samma sätt 3. Kombinera lösningarna till delproblemen till en lösning på ursprungsproblemet Det måste finnas minst ett basfall

(22 maj 2015 F14.4 ) Rekursion Hemligheten är att tänka lokalt! Exempel: Jag ska beräkna x n. Kan jag direkt lösa problemet jag fått? (basfall) Ja, om t ex n = 0. Svara 1. Om ej, ge Johan problemet att beräkna x n 1 Jag bryr mig inte alls om hur Johan löser problemet men han kan naturligtvis resonera på samma sätt dvs han kan sitta med exakt samma algoritm som jag men med andra indata. När jag fått svaret från Johan multiplicerar jag det med och returnerar resultatet.

(22 maj 2015 F14.5 ) Rekursion Det måste finnas sätt att ange delproblemen och avgöra vad som är basfall. I ovanstående fall var det enkelt inparametern n. I andra fall behövs det någon hjälpmetod som tar emot en extra parameter (typiskt för problem med länkade strukturer). I andra fall kan rekursionen styras av indata från fil eller tangentbord. Ni har sett åtminstone två exempel på detta: reversenumbers och Parser-metoderna Ytterligare varianter finns i kalkylatorns eval- och diff-metoder.

(22 maj 2015 F14.6 ) Komplexitet Med en algoritms komplexitet menas hur tiden (antalet operationer) växer med problemstorleken. Uttrycks ofta med ordonotation O(f (n)). Några vanliga uttryck: O(1) Bäst! O(log n) Mycket bra Binär sökning O(n log n) Bra Snabba sorteringsmetoder O(n 2 ) OK Simpla sorteringsmetoder O(n 3 ) Tja multiplikation av nxn-matiser O(2 n ) Hopplöst! Brickleken

(22 maj 2015 F14.7 ) Komplexitet Ordo-uttrycken säger bara hur det bär sig åt för stora värden på n ibland för ointressant stora. Ordo är egentligen bara en övre begränsning. Sålunda är alla användbara algoritmer O(2 n ). Mer matematiskt korrekt att använda Omega (för undre begränsningar) och Theta som anger både övre och undre begränsning.

(22 maj 2015 F14.8 ) Numeriska kalkylatorn Tillämpning av rekursion med recursive descent. Rekursionen styrs av aktuell tok Användning av TreeMap<String, Double> med metoderna: Undantag put(string name, Double value) boolean containskey(string name) Double get(string name)

(22 maj 2015 F14.9 ) Undantag Undantag ( exceptions ) är objekt som skapas och kastas när något oväntat inträffar. Överför kontrollen till något ställe som kan hantera fortsättningen. Bör veta: Skapas med new Kastas med throw Fångas med try {... catch(...) Metoder kan behöva deklareras med throws Skrivs som subklass till existerande undantagsklass

(22 maj 2015 F14.10 ) Undantag Undantagsklasser är mycket enkla: eller public class MyException extends Exception { public MyException(String msg) { super(msg); public class MyException extends RuntimeException { public MyException(String msg) { super(msg);

(22 maj 2015 F14.11 ) Länkade listor List Node 3 5 17..... 42 first last Tänk på referenser som linor som håller fast objekten. Om man ändrar en referens så tappar man bort objektet om det inte finns något annat som håller i det! public int removefirst { if (first==null) throw new ListException("Empty list in removefirst"); int ret = first.data; first = first.next; // better than remove(ret) return ret;

(22 maj 2015 F14.12 ) Länkade listor Varför är följande metod dålig: public boolean contains(int data) { Node n = first; for (int i= 0; i<length(); i++) { if (data == n.data) { return true; n = n.next;

(22 maj 2015 F14.13 ) Bättre public boolean contains(int data) { Node n = first; while (n!=null && data>n.data) { n = n.next; return n!=null && data==n.data eller public boolean contains(int data) { Node n; for (n = first; n!=null && data<n.data; n=n.next) { return n!=null && data==n.data;

(22 maj 2015 F14.14 ) Binära träd root e b n Storlek (size), höjd, intern och extern väglängd. a d g p Traverseringsorningar: prein- och postorder. c f k y

(22 maj 2015 F14.15 ) Binära sökträd Det måste finnas en ordningsrelation mellan noderna För varje nod gäller att mindre noder ligger till vänster och större noder till höger. Binära sökträd är bra för inlägg, sökning och urtag: O(?) Alla binära träd är inte binära sökträd! Är uttrycksträden i uppgift 5 binära sökträd, binära träd eller något annat?

(22 maj 2015 F14.16 ) Vad är det för fel på följande public boolean contains(string key) { return contains(key, root); private static contains(string key, Node r) { if (r == null) { return false; else if (key.compareto(r.key)==0) { return true; else { return contains(key, r.left) contains(key, r.right);

(22 maj 2015 F14.17 ) Uppgift 2 på tentan 2014-05-27 En prioritetskö implementerad med hjälp av ett binärt sökträd (egentligen inte ett riktigt sökträd). I en prioritetskö styrs uttagen av elementens prioritet - inte av hur länge de stått i kön. Hur ska kön representeras? Länkad lista eller array? Osorterat uttag O(n), inlägg O(1). Sorterat på prioritet uttag O(1), inlägg O(n)

(22 maj 2015 F14.18 ) Uppgift 2 på tentan 2014-05-27 Idé: Använd ett binärt sökträd sorterat på prioritet men där man tillåter samma prioritet på flera ställen i trädet. Inlägg blir vanligt BST-inlägg. Om man vid ett inlägg stöter på en nod med samma prioritet så fortsätter man inlägget åt höger. Fråga: Hur många operationer krävs för inlägg och urtag i bästa respektive värsta fall.

(22 maj 2015 F14.19 ) Klassen PriorityQueue: Översikt public class PriorityQueue { private static class Node { private Node root; public String tostring() { public void enqueue(int pri) { public int dequeue() { public int removerecursive() { public static void main(string[] args) {

(22 maj 2015 F14.20 ) Klassen PriorityQueue: Nodklassen Inga konstigheter: private static class Node { int priority; Node left; Node right; Node(int pri) { priority = pri;

(22 maj 2015 F14.21 ) Klassen PriorityQueue: Metoden tostring Klassisk inordertraversering med en rekursiv hjälpmetod: public String tostring() { return tostring(root); public static String tostring(node r) { if (r==null) { return ""; else { return tostring(r.left) + " " + r.priority + " " + tostring(r.right); Fråga: Är det svårt att skriva tostring utan rekursion?

(22 maj 2015 F14.22 ) Klassen PriorityQueue: Metoden enqueue public void enqueue(int pri) { root = enqueue(pri, root); private static Node enqueue(int pri, Node r) { if (r==null) { r = new Node(pri); else if (pri < r.priority) { r.left = enqueue(pri, r.left); else { r.right = enqueue(pri, r.right); return r;

(22 maj 2015 F14.23 ) Klassen PriorityQueue: Metoden dequeue public int dequeue() { int res; if (root==null) throw new RuntimeException("Empty tree"); else if (root.left==null) { res = root.priority; root = root.right; else { Node n = root; while (n.left.left!=null) n = n.left; res = n.left.priority; n.left = n.left.right; return res;

(22 maj 2015 F14.24 ) Klassen PriorityQueue: Metoden dequeue rekursivt public int dequeuerecursive() { if (root==null) throw new RuntimeException("Empty tree"); if (root.left==null) { int res = root.priority; root = root.right; return res; else { return dequeuerecursive(root);

(22 maj 2015 F14.25 ) Klassen PriorityQueue: Metoden dequeue rekursivt private static int dequeuerecursive(node r) { if (r.left.left==null) { int ret = r.left.priority; r.left = r.left.right; return ret; else { return dequeuerecursive(r.left);

(22 maj 2015 F14.26 ) Arvshierarkier Antag att B är en klass och S är en subklass till B dvs S extends A S har alla Bs attribut och metoder När en S konstrueras måste B också konstrueras - super B b = new S() är OK när S är en subklass till B, annars ej B.f() är OK om f är deklarerad (abstrakt eller konkret) i B eller någon basklass till B Om f också finns i S så är det den som anropas av b.f() dynamisk eller sen bindning.

(22 maj 2015 F14.27 ) Klasshierarkier forts Abstrakta metoder: Tjänar som platshållare i en basklass. Exempel: public abstract String getname(); i klassen Sexpr. En klass som har en eller flera abstrakta metoder måste också deklareras som abstract. Man behöver inte deklarera om en abstrakt metod i underklass om man inte har tänkt att implementera den där. En underklass som ärver från en abstrakt klass och inte implementerar alla abstrakta metoder måst deklareras abstrakt, Det går inte att instansiera en abstrakt klass

(22 maj 2015 F14.28 ) Interface Ett interface är ungefär som en abstrakt klass där alla metoder är abstrakta. Man ärver dock inte från interface man implementerar (implements) dem. Exempel: public class MyWindow extends JFrame implements ActionListener { Man kan likna det vid en försäkran om att klassen man skriver kommer att innehålla alla metoder som deklareras i interfacet.

(22 maj 2015 F14.29 ) Några råd inför tentan Se till att ni kan de obligatoriska uppgifterna Läs igenom uppgiften ett par gånger innan ni börjar lösa den Läs den bifogade koden! Den ger ofta extra vägledning för hur uppgifterna ska lösas. Ni får skriva hjälpmetoder (om det är vettigt... )

(22 maj 2015 F14.30 ) Några råd inför tentan Kom ihåg att t ex Node n = new Node() inte betyder att n är en nod eller ett nod-objekt! Kom ihåg att alltid tänka på om en referens kan vara null innan ni använder den! Använd basfallet null om det går! Ger oftast enklast och effektivast kod Kom ihåg att namn som first, next, Node, root, left, right,... inte är reserverade! Man skulle t ex kunna använda car och cdr i stället för left och right.

(22 maj 2015 F14.31 ) Läs texten på först sidan! Där står, bland annat, att poängavdrag kan kan göras för 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).