Abstrakte Datentypen.

Größe: px
Ab Seite anzeigen:

Download "HTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen."

Transkript

1 Abstrakte Datentypen OOPM, Ralf Lämmel

2 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 562 Motivation abstrakter Datentypen Was haben wir bisher an Typen gesehen? Primitive Typen, Felder und Verbunde Spezifische abgeleitete Datentypen (Complex,...) Spezifische, zeigerbasierte Datenstrukturen Was fehlt uns noch an Typen? Allgemeinere Typen: Bäume, Keller, Schlangen,... Melanie Gallo

3 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 563 Beispiele für Bäume Eine Verzeichnisstruktur... oder denken Sie an Hierarchien in Betrieben. Die Package- Hierarchie in unserer Programmsammlung.

4 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 564 Beispiele für Keller public static int ggt(int, int); 0: iload_0 1: iload_1 2: if_icmpeq 24 5: iload_0 6: iload_1 7: if_icmple 17 10: iload_0 11: iload_1 12: isub 13: istore_0 14: goto 0 17: iload_1 18: iload_0 19: isub 20: istore_1 21: goto 0 24: iload_0 25: ireturn Operanden-Keller in der JVM. Webseiten-Keller im Browser.

5 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 565 Beispiele für (Warte-)Schlangen Melanie Wartenschlangen für Drucker. Wartenschlangen für App-Updates.

6 Der abstrakte Datentyp Keller LIFO -- Last In First Out Operationen Push: Element auf Stapel legen IsEmpty: Test auf leeren Keller Pop: Oberstes Element vom Stapel entfernen Top: Oberstes Element auf dem Stapel anfragen (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 566

7 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 567 Der abstrakte Datentyp Keller LIFO -- Last In First Out Operation top() push(1) 1 push(2) 2 push(3) 3 pop() 2 pop() 1 pop() --

8 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 568 Beispielcode zur Benutzung eines Kellers UnboundedIntStack s = new UnboundedIntStack(); s.push(1); System.out.println(s.top()); s.push(2); System.out.println(s.top()); s.push(3); System.out.println(s.top()); while (!s.isempty()) { System.out.println(s.top()); s.pop(); top() push(1) 1 push(2) 2 push(3) 3 pop() 2 pop() 1 pop() -- Siehe package data.lifo

9 Schnittstelle für den abstrakten Datentyp Keller public interface IntStack { void push(int item); boolean isempty(); int top(); void pop(); (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Siehe package data.lifo 569

10 Implementation eines unbeschränkten Kellers public class UnboundedIntStack implements IntStack { private IntListEntry top = null; public void push(int item) { IntListEntry e = new IntListEntry(); e.item = item; e.next = top; top = e; Beliebig viele Einträge können in den Keller eingetragen werden. public boolean isempty() { return top == null; public int top() { return top.item; public void pop() { top = top.next; (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Siehe package data.lifo 570

11 Schnittstelle für den abstrakten Datentyp Keller public interface IntStack { void push(int item); boolean isempty(); int top(); void pop(); Könnte man nicht auch beide Operationen zu einer machen? (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Siehe package data.lifo 571

12 Alternative Schnittstelle für den abstrakten Datentyp Keller public interface IntStack { void push(int item); boolean isempty(); int pop(); So macht man das gern in der Praxis. Das ergibt aber keine gute Trennung zwischen Abfragen und Änderungen :-). (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Siehe package data.lifo 572

13 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 573 Unterteilung von Operationen Konstruktoren bauen Daten auf. new, Push, Enqueue Mutationen ändern die Daten ab. Pop, Dequeue Beobachter befragen die Daten. Top, Front

14 Ein beschränkter Keller public class BoundedIntStack implements IntStack { private IntListEntry top = null; private int length = 0; private int limit = 0; public BoundedIntStack(int limit) { this.limit = limit; public void push(int item) {... if (length==limit) return; IntListEntry e = new IntListEntry(); e.item = item; e.next = top; top = e; length++; (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau public boolean isempty() { return top == null; public int top() { return top.item; public void pop() { length--; top = top.next; Im Sinne einer Ressourcenbeschränkung können Einträge bis zu einer gewissen Schranke eingekellert werden. Siehe package data.lifo

15 Der abstrakte Datentyp Schlange FIFO -- First In First Out Operationen Enqueue: Element in die Schlange einfügen IsEmpty: Test auf leere Schlange Dequeue: Erstes Element aus der Schlange entfernen Front: Erstes Element in der Schlange anfragen (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 575

16 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 576 Der abstrakte Datentyp Schlange FIFO -- First In First Out Operation front() enqueue(1) 1 enqueue(2) 1 enqueue(3) 1 dequeue() 2 dequeue() 3 dequeue() --

17 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 577 Beispielcode zur Benutzung einer Schlange SimpleIntQueue q = new SimpleIntQueue(); q.enqueue(1); System.out.println(q.front()); q.enqueue(2); System.out.println(q.front()); q.enqueue(3); System.out.println(q.front()); while (!q.isempty()) { System.out.println(q.front()); q.dequeue(); front() enqueue(1) 1 enqueue(2) 1 enqueue(3) 1 dequeue() 2 dequeue() 3 dequeue() -- Siehe package data.fifo

18 Schnittstelle für den abstrakten Datentyp Schlange Melanie Gallo public interface IntQueue { void enqueue(int item); boolean isempty(); int front(); void dequeue(); Siehe package data.fifo (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 578

19 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 579 Testen der FIFO-Eigenschaft import org.junit.test; import static org.junit.assert.assertequals; public class Demo public void FifoQueueOk() { SimpleIntQueue x = new SimpleIntQueue(); x.enqueue(1); x.enqueue(2); assertequals(1, x.front());

20 Eine Schlangenimplementation (Teil 1/2) public class SimpleIntQueue implements IntQueue { private IntListEntry first = null; private IntListEntry last = null; public void enqueue(int item) {... (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau IntListEntry e = new IntListEntry(); e.item = item; e.next = null; if (first==null) first = e; if (last!=null) last.next = e; last = e; Siehe package data.fifo 580 Verglichen zu den Operationen des Kellers, sind die Operationen der Schlange etwas schwieriger zu implementieren, weil das Einfügen und Entfernen an verschiedenen Enden erfolgt.

21 Eine Schlangenimplementation (Teil 2/2) public class SimpleIntQueue implements IntQueue {... public boolean isempty() { return first == null; public int front() { return first.item; public void dequeue() { if (first==last) last = null; first = first.next; (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Siehe package data.fifo 581

22 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 582 Keller versus Schlange Fangfrage: Gelten die folgenden Entsprechungen? push isempty top pop Antwort: Nein! = enqueue = isempty = front = dequeue Wie würden Sie den konstruktiven Beweis führen? Keller verwendet LIFO. Schlange verwendet FIFO.

23 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 583 Effektive Unterscheidung von Keller und Schlange push isempty top pop = enqueue = isempty = front = dequeue Implementiere die gleiche Schnittstelle in beiden ADTs. Implementiere fehlende Operationen gemäß den Gleichungen. Teste LIFO für den Keller: Ok Teste FIFO für den Keller: Fail Teste FIFO für die Schlange: Ok Ein Gedankenexperiment, welches nicht prüfungsrelevant ist. Teste LIFO für die Schlange: Fail

24 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 584 Implementation beider Schnittstellen public interface IntContainer extends IntStack, IntQueue { public class UnboundedIntStack implements IntContainer {... SAME CODE AS BEFORE... // Let's confuse Stack and Queue. public void enqueue(int item) { push(item); public int front() { return top(); public void dequeue() { pop(); Ein Gedankenexperiment, welches nicht prüfungsrelevant ist. public class SimpleIntQueue implements IntContainer {... SAME CODE AS BEFORE... // Let's confuse Stack and Queue. public void push(int item) { enqueue(item); public int top() { return front(); public void pop() { dequeue();

25 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 585 Testen der Unterschiede public class Demo { private void testlifo(intcontainer x) { x.push(1); x.push(2); assertequals(2, x.top()); private void testfifo(intcontainer x) { x.enqueue(1); x.enqueue(2); assertequals(1, x.front()); Ein Gedankenexperiment, welches nicht prüfungsrelevant public void LifoStackOk() { testlifo(new public void FifoStackFail() { testfifo(new public void FifoQueueOk() { testfifo(new public void LifoQueueFail() { testlifo(new SimpleIntQueue());

26 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 586 Einschub: Warum sprechen wir von abstrakten Datentypen? Konkrete Datentypen = Datenstrukturen Diese werden durch eine Implementation beschrieben. Abstrakte Datentypen = Schnittstelle + Eigenschaften Anwenden können effektiv von Implementation abstrahieren. Eigenschaften können verschieden beschrieben werden: Text, Illustration, Testfälle (diese Vorlesung) Algebraische Spezifikation (nächste Vorlesung)

27 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 587 Bäume Wurzel Java types Unterbaum Primitive types Reference types... boolean char short int long float double String... Array types... Wrapper types int[] Integer Blatt Wurzel und Blätter sind spezielle Knoten. Alle Knoten speichern eine Information.

28 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 588 Bäume Java types Primitive types Reference types... boolean char short int long float double String... Array types... Wrapper types int[] Integer Eine andere Darstellungsform: Hier wird die Baumstruktur durch Einrückung verdeutlicht. - Java types ---- Primitive types boolean char short int long float double ---- Reference types String Array types int[] Wrapper types Integer

29 Baumkonstruktion StringTree t1 = new StringTree("Java types", new StringTree[] { new StringTree("Primitive types", new StringTree[] { new StringTree("boolean", new StringTree[] {), new StringTree("char", new StringTree[] {), new StringTree("short", new StringTree[] {), new StringTree("int", new StringTree[] {), new StringTree("long", new StringTree[] {), new StringTree("float", new StringTree[] {), new StringTree("double", new StringTree[] {)), new StringTree("Reference types", new StringTree[] { new StringTree("String", new StringTree[] {), new StringTree("Array types", new StringTree[] { new StringTree("int[]", new StringTree[] {), new StringTree("...", new StringTree[] {)), new StringTree("Wrapper types", new StringTree[] { new StringTree("Integer", new StringTree[] {), new StringTree("...", new StringTree[] {)))); - Java types ---- Primitive types boolean char short int long float double ---- Reference types String Array types int[] Wrapper types Integer Wir verwenden einen geeigneten Konstruktor, um die Knoteninfo und die Unterbäume zu beschreiben. (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Siehe package data.tree 589

30 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 590 Implementation public class StringTree { private String info = null; private StringTree[] subtrees = null; public StringTree(String info, StringTree[] subtrees) { this.info = info; this.subtrees = subtrees; // What public operations are needed?...

31 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 591 Ausgabe von Bäumen public class StringTree {... Wir schmieren the print-methode in die Klasse des ADT!? public void print() { print(0); public void print(int indent) { System.out.print(' '); for (int i=0; i<3*indent; i++) System.out.print('-'); System.out.print("- "); System.out.println(info); indent++; for (int i=0; i<subtrees.length; i++) subtrees[i].print(indent); Siehe package data.tree - Java types ---- Primitive types boolean char short int long float double ---- Reference types String Array types int[] Wrapper types Integer

32 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 592 Bäume mit Zugriffsoperation public class StringTree { Ist diese Repräsentation immer zweckmässig? private String info = null; private StringTree[] subtrees = null; public StringTree(String info, StringTree[] subtrees) { this.info = info; this.subtrees = subtrees; Brauchen wir noch weitere Methoden? Ist die Feld- Sicht adäquat? public String getinfo() { return info; public StringTree[] getsubtrees() { return subtrees; Verbesserte Abstraktion: Wir können nun Methoden wie print() außerhalb der Klasse programmieren.

33 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 593 Beispiel einer Methode, welche auf ADT-Methoden aufbaut public class DemoStringTree { public static void print(stringtree t) { print(t, 0); public static void print(stringtree t, int indent) { System.out.print(' '); for (int i=0; i<3*indent; i++) System.out.print('-'); System.out.print("- "); System.out.println(t.getInfo()); indent++; for (int i=0; i<t.getsubtrees().length; i++) print(t.getsubtrees()[i],indent);

34 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 594 Binärbäume x y z w * Jeder Knoten hat maximal zwei Unterbäume. * Es wird der linke und der rechte Teilbaum unterschieden.

35 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 595 Anwendung von Binärbäumen: Binäre Suchbäume Auf allen Ebenen sind die Werte im linken (rechten) Teilbaum kleiner (größer) als der Wert an der Wurzel. Vergleiche diese Bäume mit sortierten Feldern, auf deren Basis man binär suchen kann

36 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 596 Wozu benötigt man binäre Suchbäume? Dies wird im Folgenden illustriert. Binäre Suche ist einfach zu formulieren. Sortierte Struktur ist einfach zu ändern. Siehe weiterführende Veranstaltungen

37 Baumkonstruktion BinIntTree t1 = new BinIntTree(4, new BinIntTree(2, new BinIntTree(1,null,null), new BinIntTree(3,null,null)), new BinIntTree(5,null,null)); (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Siehe package data.tree 597

38 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 598 Implementation public class BinIntTree { private int info; private BinIntTree left, right; public BinIntTree(int info, BinIntTree left, BinIntTree right) { this.info = info; this.left = left; this.right = right; public int getinfo() { return info; public BinIntTree getleft() { return left; public BinIntTree getright() { return right; // Further instance methods are conceivable....

39 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 599 Anzahl der Knoten public class BinIntTree {... SAME CODE AS BEFORE... the number of nodes in the tree */ public int nodes() { return 1 + (left==null? 0 : left.nodes()) + (right==null? 0 : right.nodes()); 5 Übung: Machen Sie die ADT- Implementation effizienter so dass die Knotenanzahl in konstanter Zeit zur Verfügung steht.

40 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 600 Inorder-Serialisierung public class BinIntTree { SAME CODE AS BEFORE... inorder serialization of the tree */ public int[] inorder() { int[] a = new int[nodes()]; inorder(a,0); return a; [1,2,3,4,5] private int inorder(int[] a, int i) { i = left==null? i : left.inorder(a, i); a[i++] = info; i = right==null? i : right.inorder(a, i); return i; Wir verwenden hier Instanzmethoden. Übung: Entfernen Sie die Methoden aus der Klasse.

41 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 601 Suche im Binärbaum public class BinIntTree { SAME CODE AS BEFORE... public boolean find(int x) { return (x < info)? left!=null && left.find(x) : (x > info)? right!=null && right.find(x) : true;

42 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 602 Spezifikation von Eigenschaften abstrakter Datentypen mittels Testfällen Identifiziere Sequenzen von Operationen: Demonstration des Zusammenspiels der Operationen. Bereite Testfall vor mit Konstruktoren und optional Mutationen. Formuliere Zusicherungen in Rückgriff auf die Beobachter. Normalfälle: Sequenzen, die sinnvollen Beobachtungen führen. Fehlerfälle: Nicht anwendbare Operation am Ende einer Sequenz. Grenzfälle:?

43 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 603 Testen eines Kellers Ableitung von Testfällen aus folgenden Geschichten Initialer (leerer) Keller Nichtleerer Keller Aus leerem Keller durch push(...) entstanden. Keller mit verbleibenden Elementen nach pop(). Anwendung der Operationen in diesen Situationen.

44 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 604 Normalfall /* * A newly created stack is empty. public void testempty() { IntStack s = new UnboundedIntStack(); asserttrue(s.isempty());

45 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 605 Fehlerfälle /* * An empty stack throws on pop. public void testpopwhenempty() { IntStack s = new UnboundedIntStack(); s.pop(); /* * An empty stack throws on top. public void testtopwhenempty() { IntStack s = new UnboundedIntStack(); s.top();

46 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 606 Normalfall /* * A stack is non-empty after push. * Also, top returns the pushed item. public void testpush() { IntStack s = new UnboundedIntStack(); int item = 1; s.push(item); assertfalse(s.isempty()); assertequals(item,s.top());

47 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 607 Normalfall /* * When an item is popped off the stack, * then the previously pushed item becomes top-of-stack. public void testpop() { IntStack s = new UnboundedIntStack(); int item1 = 1; int item2 = 2; s.push(item1); s.push(item2); assertequals(item2,s.top()); s.pop(); assertequals(item1,s.top());

48 (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Zusammenfassung Abstrakte Datentypen: Keller, Schlangen, Bäume Verwendung einfach verketteter Listen in der Implementierung Weitere Illustration von Verkapselung zur Abstraktion Weitere Illustration des Testens zur Spezifikation Ausblick Algebraische Spezifikation von Datentypen Einführung in die Objektorientierung Generizität von Datentypen

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Suchbäume Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 7 Prof. R. Westermann, A. Lehmann, R.

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

1 Abstrakte Datentypen

1 Abstrakte Datentypen 1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Lösungsvorschläge. zu den Aufgaben im Kapitel 4 Lösungsvorschläge zu den Aufgaben im Kapitel 4 Aufgabe 4.1: Der KNP-Algorithmus kann verbessert werden, wenn in der Funktion nexttabelle die Zuweisung next[tabindex] = ruecksprung; auf die etwas differenziertere

Mehr

368 4 Algorithmen und Datenstrukturen

368 4 Algorithmen und Datenstrukturen Kap04.fm Seite 368 Dienstag, 7. September 2010 1:51 13 368 4 Algorithmen und Datenstrukturen Java-Klassen Die ist die Klasse Object, ein Pfeil von Klasse A nach Klasse B bedeutet Bextends A, d.h. B ist

Mehr

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein. Aufgabe 10 Binäre Bäume a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge, 28, 35, 31, 9, 4,, 17, 37, 25 ein. 1. Einfügen von : 3. Einfugen von 35: 2. Einfügen von 28: 28 28 10. Einfügen

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009 Formale Spezialisierungstechniken am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009 Spezialisierungsarten (Typbeziehungen erster Art) X stellt Methoden und Eigenschaften

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können. 6. Bäume Lernziele 6. Bäume Lernziele: Definition und Eigenschaften binärer Bäume kennen, Traversierungsalgorithmen für binäre Bäume implementieren können, die Bedeutung von Suchbäumen für die effiziente

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen Suchbaum Algorithmen und Datenstrukturen Suchbaum Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Motivation Datenstruktur zur Repräsentation dynamischer Mengen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: AVL-Bäume Analyse (Folie 85, Seite 39 im Skript) Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: 0 falls n = 0 F n = 1 falls

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen

Mehr

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Fachschaft Informatik Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Michael Steinhuber König-Karlmann-Gymnasium Altötting 15. Januar 2016 Folie 1/77 Inhaltsverzeichnis I 1 Datenstruktur Schlange

Mehr

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Aufgabenblatt Nr. 5 Generizität und TicTacToe Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012 , Queues & Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 19. September 2012 ODE/FHTBM, Queues & 19. September 2012 1/42 Datenstrukturen Elementare Datenstrukturen

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

13. Binäre Suchbäume

13. Binäre Suchbäume 1. Binäre Suchbäume Binäre Suchbäume realiesieren Wörterbücher. Sie unterstützen die Operationen 1. Einfügen (Insert) 2. Entfernen (Delete). Suchen (Search) 4. Maximum/Minimum-Suche 5. Vorgänger (Predecessor),

Mehr

Testen mit JUnit. Motivation

Testen mit JUnit. Motivation Test First Design for Test in Eclipse (eigentlich: ) zu einer Klasse Beispiel zur Demonstration Ergänzungen Test First "Immer dann, wenn Du in Versuchung kommst, etwas wie eine print- Anweisung oder einen

Mehr

16. Dynamische Datenstrukturen

16. Dynamische Datenstrukturen Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange

Mehr

Tutorium Algorithmen & Datenstrukturen

Tutorium Algorithmen & Datenstrukturen June 16, 2010 Binärer Baum Binärer Baum enthält keine Knoten (NIL) besteht aus drei disjunkten Knotenmengen: einem Wurzelknoten, einem binären Baum als linken Unterbaum und einem binären Baum als rechten

Mehr

188.154 Einführung in die Programmierung für Wirtschaftsinformatik

188.154 Einführung in die Programmierung für Wirtschaftsinformatik Beispiel 1 Vererbung (Liste) Gegeben sind die beiden Klassen ListNode und PersonNode. 188.154 Einführung in die Programmierung für Wirtschaftsinformatik Wiederholung, Prüfungsvorbereitung Monika Lanzenberger

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen: 6 Partiell geordnete binäre Bäume: Heap (Haufen) Motivation für manchen Anwendungen nur partielle Ordnung der Elemente statt vollständiger nötig, z.b. - Prioritätsschlange: nur das minimale (oder maximale)

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 5 Lösungsvorschlag Objektorientierte Programmierung 22. 05. 2006 Lösung 9 (SMS-Eingabe am

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

ALP II Dynamische Datenmengen Datenabstraktion

ALP II Dynamische Datenmengen Datenabstraktion ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen

Mehr

EndTermTest PROGALGO WS1516 A

EndTermTest PROGALGO WS1516 A EndTermTest PROGALGO WS1516 A 14.1.2016 Name:................. UID:.................. PC-Nr:................ Beachten Sie: Lesen Sie erst die Angaben aufmerksam, genau und vollständig. Die Verwendung von

Mehr

U08 Entwurfsmuster (II)

U08 Entwurfsmuster (II) U08 Entwurfsmuster (II) Inhalt der Übung Diskussion und Implementierung von Entwurfsmustern Übungsaufgaben Aufgabe 1 (Queue) Gegeben ist das folgende Analysemodell einer Warteschlange (Queue): Eine Warteschlange

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Binärbäume. Prof. Dr. E. Ehses, 2014 1

Binärbäume. Prof. Dr. E. Ehses, 2014 1 Binärbäume Grundbegriffe der Graphentheorie Bäume und Ihre Anwendungen Unterschiedliche Darstellungen von Bäumen und Binärbäumen Binärbäume in Java Rekursive Traversierung von Binärbäumen Ebenenweise Traversierung

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:

Mehr

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1 3.2 Binäre Suche Beispiel 6.5.1: Intervallschachtelung (oder binäre Suche) (Hier ist n die Anzahl der Elemente im Feld!) Ein Feld A: array (1..n) of Integer sei gegeben. Das Feld sei sortiert, d.h.: A(i)

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Vorname:... Matrikel-Nr.:... Unterschrift:...

Vorname:... Matrikel-Nr.:... Unterschrift:... Fachhochschule Mannheim Hochschule für Technik und Gestaltung Fachbereich Informatik Studiengang Bachelor of Computer Science Algorithmen und Datenstrukturen Wintersemester 2003 / 2004 Name:... Vorname:...

Mehr

Binäre Bäume Darstellung und Traversierung

Binäre Bäume Darstellung und Traversierung Binäre Bäume Darstellung und Traversierung Name Frank Bollwig Matrikel-Nr. 2770085 E-Mail fb641378@inf.tu-dresden.de Datum 15. November 2001 0. Vorbemerkungen... 3 1. Terminologie binärer Bäume... 4 2.

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Suchen und Sortieren

Suchen und Sortieren (Folie 69, Seite 36 im Skript) 5 6 1 4 Als assoziatives Array geeignet Schlüssel aus geordneter Menge Linke Kinder kleiner, rechte Kinder größer als Elternknoten Externe und interne Knoten Externe Knoten

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

5. Abstrakte Klassen

5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

4. AuD Tafelübung T-C3

4. AuD Tafelübung T-C3 4. AuD Tafelübung T-C3 Simon Ruderich 17. November 2010 Arrays Unregelmäßige Arrays i n t [ ] [ ] x = new i n t [ 3 ] [ 4 ] ; x [ 2 ] = new i n t [ 2 ] ; for ( i n t i = 0; i < x. l e n g t h ; i ++) {

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de. Stammbaum. Stammbaum. Stammbaum

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de. Stammbaum. Stammbaum. Stammbaum lausthal Beispiele Stammbaum Informatik II. Zachmann lausthal University, ermany zach@in.tu-clausthal.de. Zachmann Informatik - SS 06 Stammbaum Stammbaum / Parse tree, Rekursionsbaum Parse tree, Rekursionsbaum

Mehr

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete Kapitel 4: Dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2012/13 Prof. Dr. Sándor Fekete 4.4 Binäre Suche Aufgabenstellung: Rate eine Zahl zwischen 100 und 114! Algorithmus 4.1 INPUT: OUTPUT:

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 Bäume robert.legenstein@igi.tugraz.at 1 Inhalt der Vorlesung 1. Motivation, Einführung, Grundlagen 2. Algorithmische Grundprinzipien 3. Sortierverfahren 4. Halden

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Konzepte der Informatik Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 16.10.2015 Technische Universität Braunschweig, IPS Inhaltsverzeichnis Suchen Binärsuche Binäre Suchbäume 16.10.2015 Dr. Werner

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 13 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen Was bisher geschah abstrakter Datentyp : Signatur Σ und Axiome Φ z.b. ADT Menge zur Verwaltung (Finden, Einfügen, Entfernen) mehrerer Elemente desselben Typs Spezifikation einer Schnittstelle Konkreter

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

1. Teilklausur. Modul "OOPM Vorlesung/Übung" 16.12.2008. Gruppe A

1. Teilklausur. Modul OOPM Vorlesung/Übung 16.12.2008. Gruppe A Objektorientierte Programmierung und Modellierung WS 2008/2009 Institut für Informatik Prof. Dr. Ralf Lämmel Dr. Manfred Jackel 1. Teilklausur Modul "OOPM Vorlesung/Übung" 16.12.2008 Gruppe A Name Vorname

Mehr

Codes und Informationsgehalt

Codes und Informationsgehalt Aufgaben 2 Codes und Informationsgehalt Auf wie viele Dezimalziffern genau können vorzeichenlose ganze Zahlen in einem binären Code der Länge 32 bit dargestellt werden? 2 Codes und Informationsgehalt Auf

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Nachtrag zu binären Suchbäumen

Nachtrag zu binären Suchbäumen Nachtrag zu binären Suchbäumen (nicht notwendigerweise zu AVL Bäumen) Löschen 1 3 2 10 4 12 1. Fall: Der zu löschende Knoten ist ein Blatt: einfach löschen 2. Fall: Der zu löschende Knoten hat ein Nachfolgeelement

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

Test-Driven Design: Ein einfaches Beispiel

Test-Driven Design: Ein einfaches Beispiel Test-Driven Design: Ein einfaches Beispiel Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 2 Ziele Veranschaulichung der Technik des Test-Driven Design am Beispiel eines Programms

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Visual Basic Express erstes Projekt anlegen

Visual Basic Express erstes Projekt anlegen Inhalt Dokument Beschreibung... 1 Erstes Projekt anlegen... 1 Verweise hinzufügen... 2 Imports setzen... 5 Public Class vorbereiten... 6 Mehrere Tools programmieren... 7 Dokument Beschreibung Nach der

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

2015-06-11 Tagesprogramm

2015-06-11 Tagesprogramm 1 2015-06-11 Tagesprogramm Design-by-Contract 2 Vertragspartner Anbieter (Server) bietet Leistungen (Services) an Kunde (Client) nimmt von Anbietern angebotene Leistungen in Anspruch Details der Inanspruchnahme

Mehr

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt

Mehr

Software Engineering in der Praxis

Software Engineering in der Praxis Software Engineering in der Praxis Praktische Übungen Dirk Wischermann Marc Spisländer Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg 18. Dezember 2006 Inhalt Nachlese

Mehr

Scala kann auch faul sein

Scala kann auch faul sein Scala kann auch faul sein Kapitel 19 des Buches 1 Faulheit Faulheit ( lazy evaluation ) ist auch in C oder Java nicht unbekannt int x=0; if(x!=0 && 10/x>3){ System.out.println("In if"); } Nutzen der Faulheit?

Mehr

Sortierte Folgen 250

Sortierte Folgen 250 Sortierte Folgen 250 Sortierte Folgen: he 1,...,e n i mit e 1 apple applee n kennzeichnende Funktion: M.locate(k):= addressof min{e 2 M : e k} Navigations Datenstruktur 2 3 5 7 11 13 17 19 00 Annahme:

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr