F6: Debriefing OU2, OU3 Hashtabeller, användargränssnitt, interaktivitet och grafik. Carl Nettelblad

Storlek: px
Starta visningen från sidan:

Download "F6: Debriefing OU2, OU3 Hashtabeller, användargränssnitt, interaktivitet och grafik. Carl Nettelblad"

Transkript

1 F6: Debriefing OU2, OU3 Hashtabeller, användargränssnitt, interaktivitet och grafik Carl Nettelblad

2 Recursive descent Gå från vänster till höger Titta bara på nästa token Rekursera ned olika djupt Var upptäcks de flesta fel? Längst ut Metoderna returnerar innan hela uttrycket är tolkat Längst in Primary fastnar på något den inte förstår

3 Hur hantera fel? (T.ex.) primary vet precis vad som gått fel Vet inte hur man kom dit Rapportera precis vad felet Med egna undantagsklasser Syntaxfel Ett viss uttryck är alltid felaktigt Evalueringsfel Att faktiskt beräkna uttrycket, just nu, går inte

4 Fånga felen Fånga undantag har två syften Rapportera felet I vårt fall, ta med info om aktuellt token i rapporten Hantera felet Vad gör vi nu? Hela programmet ska inte avslutas, ska fortsätta fungera normalt Exempel: Läsa till slutet av raden» Kunde vara stänga filer, starta om en bana, nollställa en beräkning, parkera en styrd utrustning i ett säkert läge, logga ut användaren

5 Kompilatorfel eller oväntade resultat vid körning Sätt att hantera fel Oväntat resultat/krasch Rapporterat undantag Hitta fel i förberedda tester Hitta fel i kompilering

6 Primary public double primary() { double result = 99999; if (tokenizer.isnumber()) { result = tokenizer.getnumber(); tokenizer.nexttoken(); } else return result; } Vad händer om vi missar att sätta result i ett fall? Får vid körning

7 Kompilatorfel eller oväntade resultat vid körning Sätt att hantera fel Oväntat resultat/krasch Rapporterat undantag Hitta fel i förberedda tester Hitta fel i kompilering

8 Primary public double primary() { double result = 99999; if (tokenizer.isnumber()) { result = tokenizer.getnumber(); tokenizer.nexttoken(); } else } else { throw new SyntaxException("unhandled case in primary"); } return result; } Vad händer om vi missar ett fall?

9 Kompilatorfel eller oväntade resultat vid körning Sätt att hantera fel Oväntat resultat/krasch Rapporterat undantag Hitta fel i förberedda tester Hitta fel i kompilering

10 Primary public double primary() { double result; if (tokenizer.isnumber()) { result = tokenizer.getnumber(); tokenizer.nexttoken(); } else return result; } Vad händer om vi missar att sätta result i ett fall? Kompileringsfel! Otilldelad variabel

11 Kompilatorfel eller oväntade resultat vid körning Sätt att hantera fel Oväntat resultat/krasch Rapporterat undantag Hitta fel i förberedda tester Hitta fel i kompilering

12 functionhelper private double functionhelper(string name, double val) { if (name.equals("cos")) { return Math.cos(val); } else if (name.equals("sin")) { return Math.sin(val); } } else { return Math.log(val); } } Vad händer om name inte är något av de godkända namnen?

13 Kompilatorfel eller oväntade resultat vid körning Sätt att hantera fel Oväntat resultat/krasch Rapporterat undantag Hitta fel i förberedda tester Hitta fel i kompilering

14 functionhelper private double functionhelper(string name, double val) { if (name.equals("cos")) { return Math.cos(val); } else if (name.equals("sin")) { } return Math.sin(val); } else if (name.equals("log")) { return Math.log(val); } else { throw new SyntaxException("Function " + name + " not supported."); } }

15 Kompilatorfel eller oväntade resultat vid körning Sätt att hantera fel Oväntat resultat/krasch Rapporterat undantag Hitta fel i förberedda tester Hitta fel i kompilering

16 samecontents Kan implementeras i linjär tid och linjärt extra minne med toarraylist Använd färdig equals i ArrayList Men inte så effektivt om träden är väldigt olika Om this.smallest() och t.smallest() är olika borde vi kunna upptäcka det direkt Pratar om ett annat sätt i slutet av föreläsningen eller sista gången

17 Länkade listor Låt varje element peka på sin efterföljare Precis som ArrayList finns LinkedList i Java I många fall är ArrayList bäst Men inte om man vill lägga till/ta bort element någon annanstans än nära slutet

18 Fler varianter Dubbellänkad, cirkulär lista Lättare att nå sista elementet, lättare att röra sig bakåt i listan Men alla algoritmer krångligare

19 Hjälpmetoder Publika metoder finns för att ge ett tydligt kontrakt till omvärlden Så här använder du den här klassen Hjälpmetoderna finns för att ge dig en tydlig struktur inne i klassen Kan göra saker som är förbjudna utifrån Kan ta andra parametrar och returnera andra värden än de publika metoderna Klassmetoder (static) om all information finns i parametrarna och returvärdet

20 tostring public String tostring() { return tostring(root); } private static String tostring(node r) { if (r==null) { return ""; } else { return tostring(r.left) + " " + r.value + " " + tostring(r.right); } } Vilken typ av traversering är detta? Preorder, postorder, inorder?

21 Egenskaper hos binära träd Ett binärt träd med k fyllda nivåer innehåller n noder n = k 1 = 2 k -1 k = log 2 (n + 1) log 2 n I ett sådant träd blir arbetet för Sökning O log n Inlägg O log n Uttag O log n

22 Sämsta möjliga träd I ett sådant träd blir arbetet för Sökning O n Inlägg O n Uttag O n Trädet en linjär lista Algoritmerna blir i praktiken som algoritmerna för enkellänkad

23 Intern väglängd Intern väglängd (ipl, eller bara i) kan definieras som summan av nivån för alla noder Roten har nivå 1, rotens barn nivå 2, Exempel: i = * * * 4 = 33 Att hitta en lagrad nyckel tar då i genomsnitt i n = = 3 steg

24 Extern väglängd Extern väglängd (EPL, eller bara E) tar med externa noder dessutom Den externa väglängden definieras som summan av de externa nodernas nivåer (4 * * 5 = 56 för exemplets 12 externa noder) Varje sökning efter en nyckel som inte finns slutar i en extern nod. Eftersom antalet externa noder är n + 1 blir det genomsnittliga antalet försök för misslyckad sökning E/(n + 1)

25 Iläggningsordning Hur ett binärt träd växer beror på i vilken ordning noderna läggs i Praktiska implementationer kan ibland också balansera om trädet AVL-träd, rödsvarta träd En definition på hur bra trädet är blir hur välordnat det blir i medeltal över alla möjliga iläggningsordningar Den interna väglängden för alla träd som bildas om man lägger in alla n! permutationer av n nycklar blir 1,38 n log 2 n + O n I ett slumpmässigt träd tar då sökning O(log n) operationer

26 Binära sökträd i Java TreeSet<E>, TreeMap<K,V> är sådana ombalanserande binära träd. De garanterar O(log n) för inlägg, sökning och urtag för varje specifikt träd.

27 Alla binära träd är inte sökträd

28 Alla binära träd är inte sökträd Aritmetiska uttrycket 1 * (2 3) + (4 + 5)/6 Trädet styr evalueringsordning, inga parenteser Värdet beräknas genom att rekursivt: Beräkna värdet av vänster träd Beräkna värdet av höger träd Utföra operationen på de två beräknade värdena

29 Hashtabeller Vi har sett att man kan göra sökträd Oftast i en struktur är det viktiga att kunna lägga in, söka och ta bort Inte traversera i viss ordning Tidskomplexitet Lägg in Sök Ta bort Sorterad array Θ(n) Θ(log n) Θ(n) Länkad lista Θ(n) Θ(n) Θ(n) Binärt sökträd Θ(log n) Θ(log n) Θ(log n) Går det att göra bättre? Inte om vi bara kan jämföra enskilda element

30 Hashtabeller Vi kanske kan använda mer information än bara en sorterings-/jämförelseregel. Arrayer är snabba. Lagra alla element i en array, välj index utifrån en hashfunktion. Samma objekt leder alltid till samma hashvärde. Blir värdena alltid unika? Oftast inte. Hur gör man då? Leta efter en annan plats i arrayen. eller Använd en länkad lista för alla element som kolliderar. Vi tittar på alternativet med en länkad lista.

31 Heltal som element Tänk att vi har en liten tabell med 7 platser och hashfunktionen h(k) = k mod 7 (rest vid heltalsdivision) som hashfunktion. k h(k) Väljer att hålla listorna sorterade eftersom man vid inlägg ändå måste kontrollera att elementet inte redan är inlagt.

32 Tidskomplexitet Antag att vi vill lagra n nycklar i en array med m platser Den genomsnittliga listlängden blir då α = n m fyllnadsgraden som kallas Om α 1 och om hashfunktionen sprider elementen någorlunda jämnt över arrayen blir strukturen effektiv för inlägg, sökning och urtag. Misslyckad sökning: 1 + α försök Lyckad sökning: 1 + α 2 försök Fördjupad analys i separat dokument

33 Tidskomplexitet Om tabellstorleken ungefär motsvara antalet element och hashfunktionen ger bra spridning tar sökning, inlägg och urtag O(1) tid Nära på lika snabbt som vanlig array Trädstrukturer är O(log n) Dessutom är varje operation ofta dyrare

34 Skapa hashfunktioner Enormt viktiga att hashvärdet är någorlunda unikt Även när man tar modulo något mindre tal För heltal: h(k) = k Blir k mod m i praktiken för hashtabell storlek m Teckensträngar Konstruera ett heltal utifrån teckenkoderna, se mer i länkat dokument Ofta viktigt att samma teckenföljd i annan ordning inte får samma kod

35 Hashstrukturer i Java HashSet<E> HashMap<K, V> Ofta bättre (snabbare) än TreeSet, TreeMap Samma metoder Olika implementationer av gränssnitten (interface) Set och Map Går att skriva kod som ska ta en Map och sedan ge den antingen en TreeMap eller en HashMap

36 Basklass och interface Basklassen har metoder och klassvariabler Om den inte är abstrakt kan man skapa en instans av den En subklass kan ärva från högst en basklass Om ingen basklass anges ärver man från Object Klassen Y ärver från klassen X, varje Y är en X Interface har metoder Utan implementation, som om alla metoder är abstrakta Man kan inte skapa en instans av ett interface Klassen Y implementerar interface X, varje Y kan ses som en X Varje HashMap kan ses som en Map

37 Hashfunktioner i Java Java har inbyggda hashfunktioner Metoden int hashcode() finns i klassen Object Precis som tostring och equals Standardversionen beräknar hash utifrån referenslikhet D.v.s. om a == b har de också samma hashvärde I standardklasser som ersätter equals ersätts också hashcode Samma objekt bör inte byta hashvärde under sin livstid Tänk om du stoppar in ett objekt i en HashSet och sedan förändrar det så att det byter hashvärde En egen klass bör alltid ha en egen tostring Om du har en egen hashcode bör du ha en egen equals, och vice versa

38 Sammanfattning Listor och träd är flexibla datastrukturer Grund för att komma fram till egna representationer Oerhört kraftfullt att ha objekt som refererar till objekt av samma typ Som Node Om du bara behöver en lista, använd ändå ArrayList Om du bara behöver en länkad lista, använd LinkedList HashMap och HashSet är bra grundval för att skapa avbildningar och lagra mängder Kräver korrekt implementation av hashcode och equals om referenslikhet inte räcker

39 Händelsestyrd programmering Hur fungerar den numeriska kalkylatorn? En slinga som läser kommandon Anropar metoder för att hantera kommandon Varje kommando hanteras fort Utför arbete, kommer tillbaka till huvudslingan Motsats Ett program som ställer upprepade frågor till användaren i samma metod Ett menysystem där varje meny är en egen metod som ber användaren välja alternativ

40 Händelsestyrda program Många datorprogram är händelsestyrda på det här viset Definition: Händelsestyrd programmering är ett paradigm där programmets flöde bestäms av händelser som användarhandlingar (musklick, knapptryck), sensorutmatning eller meddelanden från andra program/trådar. Händelsestyrd programmering är det dominerande paradigmet i program med grafiska användargränssnitt och andra tillämpningar. (Omskrivet och översatt från )

41 Struktur Vänta på händelse (Börja) hantera händelse Bör gå fort, annars kan senare händelser inte hanteras Komponenten som väntar på händelser generell Färdig i det bibliotek man använder Eller egen men sällan i behov att ändras Händelseslinga/ event loop Kan startas genom ett metodanrop eller indirekt i en konstruktor

42 Grafiska användargränssnitt Jämfört med kalkylatorn är mängder av händelser möjliga i ett grafiskt program, som: Ändra storlek på fönster Flytta på fönster Animera gränssnittet för att visa vad som är markerat och De riktiga funktionerna hos programmet

43 Vårt första program import javax.swing.*; import java.awt.*; import java.awt.event.*; public class WindowApp1 extends JFrame { public WindowApp1() { super("an event driven program"); setresizable(false); getcontentpane().setpreferredsize(new Dimension(400, 400)); setdefaultcloseoperation(jframe.dispose_on_close); pack(); setvisible(true); } } public static void main(string[] args) { WindowApp1 app = new WindowApp1(); }

44 Vad gör koden? Vi ärver från JFrame Representerar ett fönster Konstruktorn gör anpassningar Fönstrets titel Storlek och att den inte får ändras Vad som händer när fönstret stängs Men ingen metod för det Vi tar inte själva hand om den händelsen Att fönstret ska visas Obs! Glöm inte denna!

45 Händelsedrivet Vår main gör ingenting Skapar bara ett objekt Programmet gör inte heller någonting Mäta processoranvändning Men vi har ingen kod för att hantera händelser Lägg till en knapp!

46 Fyra steg Markera att vi kan lyssna på händelser Lägg till knappen Säg att vi vill lyssna på knappens händelser Implementera knappmetoden

47 Lyssna på händelser public class WindowApp2 extends JFrame implements ActionListener { public WindowApp2() { ActionListener är ett interface som ingår Javaramverket för grafiska gränssnitt (awt/swing) En enda metod actionperformed Anropas för alla händelser vi väljer att lyssna på

48 Lägg till knappen och registrera lyssnare setdefaultcloseoperation(jframe.dispose_on_close); JPanel panel = new JPanel(); getcontentpane().add(panel); JButton button = new JButton("Whatever you do, do not push this button!"); panel.add(button); button.addactionlistener(this); pack(); Knappen ligger i en panel Det räcker inte med att skapa knappen Knappen vet inte att den ska ligga i panelen i fönstret Eller vart den ska skicka sina händelser

49 Implementera metoden public void actionperformed(actionevent e) { JOptionPane.showMessageDialog(null, "I told you not to push the button...", "Event captured", JOptionPane.INFORMATION_MESSAGE); } Det här är vår lyssningsmetod. Enkelt i det här fallet, bara en möjlig händelse (som vi vet om). Alltid klokt att kontrollera att det är rätt sorts händelse om flera är möjliga. Jämför functionhelper i OU2, olämpligt att ha ett sistafall på en kedja med if-else som antar att tillståndet är giltigt.

50 Lyssnare/händelsehanterare Lyssnaren är ett objekt som informeras om vissa händelser efter att ha registrerat sig. Ett vanligt designmönster Frikoppling mellan källan till händelsen och mottagaren. ActionListener med metoden actionperformed bara ett exempel på mönstret.

51 Lyssnare och källor Samma källa kan ha flera lyssnare Samma lyssnare kan ha flera källor När metoden anropas måste det framgå Varifrån händelsen kommer Vilken händelse det är Annan information

52 Hitta källan public void actionperformed(actionevent e) { if (e.getsource() == obj1) { // Åtgärd för objekt 1 } else if (e.getsource() == obj2) { // Åtgärd för objekt 2 } else { // throw new RuntimeException här??? } }

53 Timers Hur gör vi om något ska hända hela tiden Ett sätt while-loop Kanske med anrop Thread.sleep Pausar i ett antal ms Stör händelseflödet Händelseinriktat sätt Be om att få timerhändelser!

54 Exempel på timer timer = new Timer(5000, this); timer.start(); Skickar händelser till objektet Spara Timer-objektet i en instansvariabel

55 Om grafiska gränssnitt Fällor Förvirrande layout Lång tid i händelsehanterare Kom ihåg, programmet svarar inte medan händelsen hanteras Användargränssnittskod som även sköter logiken Model view controller Försöka skilja på klasser som beskriver världen, klasser som beskriver användargränssnittet och klasser som utför åtgärder

56 Layout i Swing Man vill inte tala om exakta koordinater för varje del i gränssnittet I stället användas layoutklasser, två exempel: FlowLayout visa komponenterna i den ordning de läggs till GridLayout visa komponenterna i ett fast rutnät

57 Layout GridLayout FlowLayout

58 Välja layout På befintligt objekt (som hela contentpane): Container contentpane = getcontentpane(); contentpane.setlayout(new FlowLayout()); På en ny panel JPanel panel = new JPanel(new GridLayout(2, 2));

59 Grafik på datorer Vad finns på skärmen? Skärmen minns inte Bilden ritas om många gånger per sekund Ett minne i datorn lagrar skärmbilden Som en stor array Men vad händer om man vill ändra något?

60 Kvadraten och cirkeln Vi vill att cirkeln ska röra sig över kvadraten

61 Hur? Tänk två metoder drawcircle(x,y) drawsquare(x,y) Vi vill flytta på cirkeln Många drawcircle?

62 Kvadraten och cirkeln Vi ritar en massa cirklar Men de gamla cirklarna vi ritade finns kvar För att få cirkeln att röra sig måste vi städa upp Rita vitt Rita ut kvadraten igen

63 Alternativet Representera grafik som objekt Objektens jobb att rita upp sig Jämför paddorna i Programmeringsteknik I

64 Två paradigm Omedelbart läge (immediate mode) Kommandon om vad som skall ritas, när det skall ritas Behöver svara på händelse när något behöver ritas upp på nytt Delegerat läge (retained mode) Berätta hur världen ser ut Paddor, paneler i Swing, objekt i en spelvärld Någon annan ser till att det hålls uppritat

65 Koordinatsystem för grafik Matematik Datorgrafik X Y Y X (Ofta) Kanske ett arv från koordinater för text, rad och kolumn Övre vänstra hörnet (0,0)

66 Koordinatsystem för grafik De mest naturliga koordinaterna för datorn är pixlar Heltal Ganska trubbigt, avrundningsfel En del system har olika typer av stöd för subpixelrendering /anti-alias

67 Grafik i kod Det finns olika ramverk för grafik OpenGL, Direct3D, GDI, Canvas, Vi fortsätter använda Java Swing Vi utökar JPanel i en egen klass Ersätter metoden paintcomponent Den ritar upp innehållet när det behövs Om vi gör någon ändring får vi be den rita upp igen manuellt (metod repaint)

68 Exempelklass public class GraphicsExample extends JPanel { public GraphicsExample() { super(); super.setpreferredsize( new Dimension(400, 400)); super.setbackground(color.white); public void paintcomponent(graphics g) { super.paintcomponent(g); //void setcolor(color color) g.setcolor(color.red);

69 Exempelklass //void fillrect( // int x, int y, // int width, int height) g.fillrect(100, 100, 200, 200); g.setcolor(color.black); //void filloval( // int x, int y, // int width, int height) g.filloval(100, 100, 200, 200); //void drawline( // int x1, int y1, int x2, int y2) g.drawline(0, 0, 100, 100); } }

70 Resultat

71 Immediate mode i Swing Uppritning sker mot ett Graphics-objekt Ofta som var på uppritningshändelse Finns också Graphics2D-objekt Titta i koden för paddorna från färska omgångar av Programmeringsteknik I Kommandonas ordning spelar stor roll Sist ritat är det som syns Färginställning med setcolor gäller tills man byter Kan vara svårt att felsöka i debugger Ett halvt uppritat fönster ser inte alltid ut som man tänker sig

72 Sammanfattning, klass för klass JFrame fönster, som ofta också kan implementera ActionListener, lägger till fler delar i fönstret i konstruktorn JPanel allmän yta, ersätt metoden PaintComponent i subklass om man vill rita grafik JLabel statisk etikett (text) JTextField textfält för inmatning JButton klickbar knapp GridLayout strukturera komponenter i rutnät FlowLayout strukturera komponenter i följd Timer källa för timerhändelser

73 OU4 Studsande bollar Skapa först ett fönster och en egen JPanel (med arv). Testa att rita en enda boll. Skapa en egen bollklass som kan flytta på sig, kollidera med kanter, rita upp sig själv. Skapa flera bollar och låt dem vandra med en timer. Lägg till kollisionshantering. Skapa ett separat användargränssnitt för att styra programmet.

74 OU5 Vi gjorde en numerisk kalkylator Tolkade (parsade) och utvärderade uttrycken genom samma rekursiva anrop Returnerade double, uppdaterade variabeldefinitioner i assignment Nu ska vi i stället tolka uttrycken Tolkade uttryck kan sedan utvärderas senare Ger möjlighet till symbolhantering Används i uppgiften för derivering och kvotering (aktivt skjuta upp utvärdering)

75 Exempel Input : 2*(-3-1+6)/ Result: 8.5 Input : log(exp(ans)) Result: 8.5 Input : "(exp(2*x) + x) = y Result: exp(2.0*x)+x Input : y Result: exp(2.0*x)+x Input : ans Result: exp(2.0*x)+x Input : "y Result: y

76 Kvotering I exemplet ovan blev värdet för variabeln y ett uttryck, inte ett tal Markeras med citationstecken " Allt som inte kvoteras utvärderas direkt

77 Derivering Deriveringsoperator med ' Vänsterled som ska deriveras, med avseende på variabeln i högerled Felhantering: Vad händer om högerledet inte är en variabel? Ändrar inte på regeln icke-kvoterade uttryck utvärderas direkt så Input : exp(x*x+1)'x Result: 0.0 Input : "exp(x*x +1)'x Result: 2.0*x*exp(x*x+1.0)

78 Evalueringsoperatorn Om " används för att kvotera, skjuta upp utvärdering Så har vi &, evalueringsoperatorn, för att framtvinga evaluering Input : "(x*x+a*x) = y Result: x*x+a*x Input : 2 = a Result: 2.0 Input : 3 = x Result: 3.0 Input : y Result: x*x+a*x Input : &y Result: 15.0

79 Syntaxdiagram Väldigt snarlika den numeriska kalkylatorn Derivering införd i factor Unär operator (kvotering/evaluering förutom unärt minus) i primary

80 Trädrepresentation I stället för att returnera double ska våra parsingmetoder returnera instanser av Sexpr (symbolic expressions) Sexpr är en abstrakt basklass

81 Trädrepresentation Varje del av ett uttryck måste representeras som en Sexpr eller ett träd av flera Sexpr Exempel: blir två konstanter som är vänster och höger delträd till en additionsoperationer Parenteser har inga egna klasser, de styr bara trädstrukturen

82 Klasshierarki Tre huvudtyper av Sexpr Atom löv i trädet, konstanter och tal Unary har ett underträd, unära operatorer och funktioner Binary vänster och höger delträd för vanliga binära operatorer (+ - * / = ')

83 Utgångspunkt Utgå från kodskelett för uppgiften Alla dotterklasser finns nämnda i PDF-filen för uppgiften Utnyttja arv Många av lövklasserna blir rätt korta när basklasserna är rätt gjorda och hjälpklassen Symbolic Varje klass har en metod eval för evaluering och en metod diff för derivering Symbolic gör jobbet

84 Exempel: sinus I klassen Sin: public Sexpr eval(map<string,sexpr> map){ return Symbolic.sin(operand.eval(map)); } public Sexpr diff(sexpr x){ return Symbolic.mul(operand.diff(x), new Cos(operand)); } I klassen Symbolic: public static Sexpr sin(sexpr arg){ if (arg.isconstant()) return new Constant(Math.sin(arg.getValue())); else return new Sin(arg); } Mönster: Räkna ut direkt OM det är en konstant, skapa annars bara symbolisk representation.

85 Förenkling och parenteser Evaluering av x + x om x har ett värde bör bli ett tal, inte ett uttryck Evaluering av "(x * x)'x bör bli 2.0*x Nödvändigt att förenkla uttryck Ett träd för (a + b) * c får inte komma att representeras som a + b * c Nödvändigt att sätta in parenteser på rätt ställen Hellre för många än för få

86 Tänk på Undvik duplicering av kod Följ kodstandard Läslighet, dokumentation Parsern ska alltid bara parsa Hantera syntaxfel, skapa trädet Evaluering ska vara generell Anropa basklassernas metoder, inte instanceof, inte typomvandlingar Titta gärna igen på exemplen här och i uppgiften på kvotering, evaluering och derivering Lätt att missa vad de faktiskt ska innebära

87 Iterera i ett träd Träd passar väldigt bra för rekursion Vi kan vilja gå igenom ett träd iterativt Kanske för att det är del av en större rekursion samecontents ett exempel

88 Stack Rekursion bygger på en stack Anropsstacken Variabelvärden och var i metoden vi står lagras automatiskt i Java Push metodanrop Pop metod returnerar Kasta undantag kan leda till flera pop i följd Anropsstacken visas i felutskriften Men aldrig börja titta mitt i stacken

89 Göra rekursiv algoritm iterativ Skriv egen kod för stacken Styr när vi gör push och pop Kan behöva lagra både parametrar och tillstånd I vårt fall Node och int 0 vänster delträd, 1 höger delträd Antag att vi har en klass TraversalStack med metoder push, pop, getnode, getstate, isempty

90 Tankegång Vi väljer att gå igenom trädet in-order Upplägg: Se om det finns ett Node-objekt på stacken Läs av nod och lägestal Poppa Om status är 0 Lägg tillbaka samma nod med status 1 Lägg in vänster delträd med status 0 Om status är 1 Utför operationen för nyckeln Lägg in höger delträd med status 0

91 Pseudokod void traverse(node start) { Stack s = new Stack(); s.push(start, 0); while (!s.isempty()) { Node now = s.getnode(); int state = s.getstate(); s.pop(); if (now == null) continue;

92 Pseudokod switch (state) { case 0: // First visit to node s.push(node, 1); s.push(node.getleft(), 0); case 1: // Second visit to node System.out.println(node.getKey()); s.push(node.getright(), 0); default: throw new RuntimeException("Invalid state."); } } }

93 Kommentar Nullkontroll när vi läser från stacken Lite ineffektivt Annars hade vi behövt kontrollera null på tre ställen För noden själv i början För vänster delträd i state 0 För höger delträd i state 1 Objektet som ska besökas sist läggs på stacken först Störst nytta med en sådan här lösning om arbetet i state 1 vore mer komplext

94 Sen då? Hur skriver vi om den här till preorder? Postorder? Kan vi stryka state lätt i något fall? Bara Node-objekt på stacken Kan vilja skriva om som metod som ger nästa Node

95 Pseudokod Node getnodeinorder(stack s) { while (!s.isempty()) { Node now = s.getnode(); int state = s.getstate(); s.pop(); if (now == null) continue;

96 switch (state) { case 0: // First visit to node s.push(node, 1); s.push(node.getleft(), 0); case 1: // Second visit to node s.push(node.getright(), 0); return node; default: throw new RuntimeException( ); } } return null; } Pseudokod

F7: Användargränssnitt, interaktivitet och grafik. Carl Nettelblad

F7: Användargränssnitt, interaktivitet och grafik. Carl Nettelblad F7: Användargränssnitt, interaktivitet och grafik Carl Nettelblad 2017-05-08 I dag OU3 Händelsestyrd programmering Användargränssnitt Grafik OU4, OU5 Iterera i ett träd Träd passar väldigt bra för rekursion

Läs mer

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

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad F5: Debriefing OU2, repetition av listor, träd och hashtabeller Carl Nettelblad 2017-04-24 Frågor Kommer nog inte att täcka 2 timmar Har ni frågor på OU3, något annat vi har tagit hittills på kursen, listor

Läs mer

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur

Läs mer

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

F7: Rekursiv till iterativ, sammanfattning, genomgång av omtentan Carl Nettelblad F7: Rekursiv till iterativ, sammanfattning, genomgång av omtentan 2018-08-24 Carl Nettelblad 2018-05-21 Lite administrativt Jättevälkomna att redovisa OU5 före deadline Ni får bättre och mer feedback när

Läs mer

Obligatorisk uppgift 5

Obligatorisk uppgift 5 (5 oktober 2018 Symbolisk kalkylator 1 ) Obligatorisk uppgift 5 En kalkylator som hanterar uttryck symboliskt dvs värden är uttryck inte bara tal. Uppgiften exemplifierar: objektorientering återanvändning

Läs mer

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. Tentamen Programmeringsteknik II 2015-05-26 Skrivtid: 0800 1300 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

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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 Programmeringsteknik II 2017-05-29 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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 Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

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

F4: Mer om OU1, OU2, listor och träd. Carl Nettelblad F4: Mer om OU1, OU2, listor och träd Carl Nettelblad 2018-04-17 Kodstil Glöm inte bra Javadoc Ge rimliga namn Se till att koden är rätt indenterad Editorn kan hjälpa dig Undvik Kopierad kod Mycket långa

Läs mer

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

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 2017-10-23 Skrivtid: 14:00 19:00 Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande

Läs mer

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Föreläsnings 11 - GUI, Händelsestyrda program, MVC Föreläsnings 11 - GUI, Händelsestyrda program, MVC Josef Svenningsson Tisdag 20/11 Boken Denna föreläsning går igenom följande sektioner i boken: 10.1 och 10.2 11.1 Notera att kapitel 11 inte finns i boken

Läs mer

Föreläsning 3: Händelsestyrda program och användargränssnitt

Föreläsning 3: Händelsestyrda program och användargränssnitt (2 september 2015 F3.1 ) Föreläsning 3: Händelsestyrda program och användargränssnitt Idag Från sekventiella till händelsestyrda program Lyssnare Kontroller Layout för ordning av kontroller (2 september

Läs mer

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

if (n==null) { return null; } else { return new Node(n.data, copy(n.next)); 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 hålls

Läs mer

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Denna laboration är frivillig och syftar till att låta dig lära mer om grafik i java. Labben är ganska grundlig och går igenom vad du skall

Läs mer

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

public boolean containskey(string key) { return search(key, head)!= null; } 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

Läs mer

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 II 2017-10-23 Skrivtid: 14:00 19:00 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011) Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation

Läs mer

Obligatorisk uppgift 5: Symbolisk kalkylator

Obligatorisk uppgift 5: Symbolisk kalkylator Informationsteknologi Tobias Wrigstad IOOP HT10 Obligatorisk uppgift 5: Symbolisk kalkylator Moment: Objektorientering med klasshierarkier, arv och dynamisk bindning samt dynamiska strukturer, undantag,

Läs mer

Observera. Tentamen Programmeringsteknik II Skrivtid:

Observera. Tentamen Programmeringsteknik II Skrivtid: Tentamen Programmeringsteknik II 2016-10-19 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).

Läs mer

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 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Fulltentamen vitsord: 3=28p, 4=38p, 5= 48p, max 60p. Max 30p i denna halvtentamen Hjälpmedel:

Läs mer

Länkade strukturer, parametriserade typer och undantag

Länkade strukturer, parametriserade typer och undantag Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer

Läs mer

Obligatorisk uppgift: Symbolisk kalkylator

Obligatorisk uppgift: Symbolisk kalkylator Informationsteknologi Programmeringsteknik II 22 augusti 2018 Obligatorisk uppgift: Symbolisk kalkylator Moment: Dynamiska strukturer (särskilt trädstrukturer), klasshierarkier, arv, dynamisk bindning,

Läs mer

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

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel. 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

Läs mer

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

Grafik, grafiska användargränssnitt och rörliga bilder (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

Läs mer

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. Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 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

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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 Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

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 II 2016-10-19 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

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 att du har förstått dessa även om detaljer kan vara felaktiga. Tentamen Programmeringsteknik II 2013-06-05 Skrivtid: 1400-1700 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

Läs mer

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037) Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07 Innehåll 2

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Programmeringsteknik II Inledning. Anmälningskod: Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående

Läs mer

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper. Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något

Läs mer

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna MER Java Foundation Classes (JFC) Swing Swing Många klasser Vettigt att lära sig dem utantill - Tror inte det -... men det kan vara bra att ha en liten överblick över vad som finns - Idag (och med fortsättning

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna MER Java Foundation Classes (JFC) Swing Swing Många klasser" Vettigt att lära sig dem utantill" - Tror inte det" -... men det kan vara bra att ha en liten överblick över vad som finns" - Idag (och med

Läs mer

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius ITK:P1 Att implementera en spelidé i Java DSV Peter Mozelius import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Lektion4 extends JFrame implements ActionListener { final int

Läs mer

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

Läs mer

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Grafiskt användargränssnitt, Swing Layout och komponenter Göra

Läs mer

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036) Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig

Läs mer

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index

Läs mer

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

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel. Tentamen Programmeringsteknik II för STS 2007-03-09 Skrivtid: 1500-2000 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

Läs mer

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) Objektorienterad Programmering DAT043 Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Metoden clone() Skapa kopior av existerande objekt. Interface Cloneable Deep vs.

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

Obligatorisk uppgift 5: Symbolisk kalkylator

Obligatorisk uppgift 5: Symbolisk kalkylator Informationsteknologi Tom Smedsaas IOOP ht09 Obligatorisk uppgift 5: Symbolisk kalkylator Moment: Objektorientering med klasshierarkier, arv och dynamisk bindning samt dynamiska strukturer, undantag, samlingar

Läs mer

Föreläsning 14 Innehåll

Föreläsning 14 Innehåll Föreläsning 14 Innehåll Abstrakta datatyper, datastrukturer Att jämföra objekt övriga moment i kursen Om tentamen Skriftlig tentamen både programmeringsuppgifter och teoriuppgifter Hitta fel i fingerade

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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 Programmeringsteknik II 2017-05-29 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) Objektorienterad Programmering DAT043 Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Repetition: Arv En subklass ärver alla variabler och metoder från sin superklass.

Läs mer

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 10. ADT:er och datastrukturer Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad

Läs mer

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037) Föreläsning 10 Datastrukturer (DAT037) Fredrik Lindblad 1 29 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

Läs mer

Föreläsning 4 Innehåll

Föreläsning 4 Innehåll Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och

Läs mer

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna! 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

Läs mer

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna! Tentamen Programmeringsteknik II 2013-10-22 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

Läs mer

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering 1 DSV Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren I Java finns

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller

Läs mer

Mer om grafiska komponenter. Händelsestyrda program

Mer om grafiska komponenter. Händelsestyrda program Layout Managers TDA143 I1 Programmerade system Föreläsning 14 (OH-bilder 10) Mer om grafiska komponenter. Händelsestyrda program Utplaceringen av komponenter i en behållare styrs med en Layout Manager.

Läs mer

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

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen Föreläsning 9 Innehåll Inlämningsuppgiften De föreläsningar som inlämningsuppgiften bygger på är nu klara. Det är alltså dags att börja arbeta med inlämningsuppgiften. Träd, speciellt binära träd egenskaper

Läs mer

Lektion Händelsehanterare

Lektion Händelsehanterare Lektion Händelsehanterare Händelsehanterare kallas även lyssnare. En lyssnare har som uppgift att ta hand om olika händelser som kan inträffa. För att lyssnaren skall reagera på händelser måste den registreras

Läs mer

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se 1 F18-20-2006 Denna vecka Måndag: Ett komplext problem Tisdag: Lektion. Kväll: Essäfrågan distribueras via webben. Dead-line onsdag 17 maj, kl 12.00. Inlämning elektroniskt och på papper. Onsdag: Grafik

Läs mer

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:

Läs mer

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

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag Föreläsning 12 Föreläsning 12 Rörliga figurer Klassen Timer Undantag Något om applets Rörliga appletsfigurer Klassen Timer Undantag Något om applets Klassen javax.swing.timer I Swing finns en klass Timer

Läs mer

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

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad F3: Recursive descent, tokenisering, avbildningar och undantag Carl Nettelblad 2017-04-03 Säg vad du vill göra Varför skriver vi kod? För att få datorn att göra det vi vill För att själva läsa koden För

Läs mer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 18 Igår: Genomgång av dugga Rekursion Idag och på måndag: Om essän Lite, lite teori om konstanter Grafiska användargränssnitt Grundläggande

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016 Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik

Läs mer

Föreläsning 5 Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037) Föreläsning 5 Datastrukturer (DAT037) Nils Anders Danielsson, Fredrik Lindblad 2016-11-14 Förra gången: Cirkulära arrayer Prioritetskö Binära heapar Leftistheapar merge Det verkar inte gå att slå ihop

Läs mer

Lab5 för prgmedcl04 Grafik

Lab5 för prgmedcl04 Grafik Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

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

List.java. List.java. Printed by Tom Smedsaas Mar 03, 08 17:48 Page 1/3 class List * Representerar en länkad lista av godtyckliga objekt public class List { ListNode * Noder i listor protected static class ListNode { protected Object data; protected

Läs mer

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig

Läs mer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037) Föreläsning 4 Datastrukturer (DAT07) Fredrik Lindblad 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat07 1 Innehåll

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

Läs mer

Lösningsförslag till tentamen

Lösningsförslag till tentamen Uppgift 1 a) Sant. b) Sant. c) Sant. Lösningsförslag till tentamen 170818 d) Falskt. IPv6 anger en IP-adress med 132 bitar. e) Falskt. Spoofing åsyftar användning av förfalskad eller lånad identitet på

Läs mer

Föreläsning 13. Träd

Föreläsning 13. Träd Föreläsning 13 Träd Träd Ett träd är en datastruktur som tillåter oss att modellera sådant som vi inte kan modellera med linjära datastrukturer. Ett datavetenskapligt träd består av noder med pilar emellan.

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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 Programmeringsteknik II 2017-08-24 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :

Läs mer

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

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. Tentamen Programmeringsteknik I 2012-06-04 Skrivtid: 1400-1700 Hjälpmedel: Java-bok 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

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng

Läs mer

Trädstrukturer och grafer

Trädstrukturer och grafer Översikt Trädstrukturer och grafer Trädstrukturer Grundbegrepp Binära träd Sökning i träd Grafer Sökning i grafer Programmering tillämpningar och datastrukturer Varför olika datastrukturer? Olika datastrukturer

Läs mer

Föreläsning 14: Grafik & mera händelsehantering

Föreläsning 14: Grafik & mera händelsehantering TDA 545: Objektorienterad programmering Föreläsning 14: Grafik & mera händelsehantering Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Idag: grafik läs kap 17 Viktigt i denna föreläsning: att rita

Läs mer

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

Föreläsning 7. Träd och binära sökträd Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Det är extra mycket

Läs mer

Diskutera. Hashfunktion

Diskutera. Hashfunktion Föreläsning 1 Innehåll Diskutera Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Tidigare har

Läs mer

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen Datastrukturer, DAT037, Lösningsförslag till tentamen Datastrukturer, DAT037, 2018-01-10 1. Båda looparna upprepas n gånger. s.pop() tar O(1), eventuellt amorterat. t.add() tar O(log i) för i:te iterationen av första loopen.

Läs mer

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036) Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl

Läs mer

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037) Föreläsning 3 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-07 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat037 Förra

Läs mer

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder

Läs mer