Algorithmen, Datenstrukturen und Programmieren II SS 2001

Ähnliche Dokumente
10. Hausübung Algorithmen und Datenstrukturen

Binäre Bäume Darstellung und Traversierung

Institut für Programmierung und Reaktive Systeme 7. Mai Programmieren II. 11. Übungsblatt

Institut für Programmierung und Reaktive Systeme 10. Mai Programmieren II. 11. Übungsblatt

Algorithmen, Datenstrukturen und Programmieren I WS 2001/2002

13. Bäume: effektives Suchen und Sortieren

13. Bäume: effektives Suchen und Sortieren

Allgemeine Informatik 2 im SS 2007 Programmierprojekt

Grundlagen der Informatik

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

Kapitel 12: Induktive

Übungen zu Programmierung I - Blatt 8

2.4 Durchlaufen von Bäumen

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

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

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Projekt 3 Variablen und Operatoren

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

5.3 Auswertung von Ausdrücken

Wiederholung. Datenstrukturen und. Bäume. Wiederholung. Suchen in linearen Feldern VO

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Stack. Queue. pop() liefert zuletzt auf den Stack gelegtes Element und löscht es push( X ) legt ein Element X auf den Stack

Lineare Liste. struct list_element { float f; /* weitere Elemente */ struct list_element *next; /* Zeiger auf Nachfolger-Element */ }; Peter Sobe

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele.

Verkettete Datenstrukturen: Bäume

Rekursive Funktionen (1)

Rekursive Funktionen (1)

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Probeklausur Name: (c)

Algorithmen und Datenstrukturen

Institut für Programmierung und Reaktive Systeme 19. August Programmier-Labor. 1. Übungsblatt

Einführung in die Informatik 2

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Einfügen immer nur am Kopf der Liste Löschen auch nur an einem Ende (2 Möglichkeiten!)

1. Die rekursive Datenstruktur Liste

Programmieren 1 C Überblick

2.3 Implementierung und Anwendung von ADT Anwendung von ADT... am Beispiel "Stapel"

ÜBUNGS-BLOCK 7 LÖSUNGEN

368 4 Algorithmen und Datenstrukturen

Lösungshinweise/-vorschläge zum Übungsblatt 9: Software-Entwicklung 1 (WS 2017/18)

Programmieren 2 15 Abstrakte Datentypen

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

DHBW Karlsruhe, Angewandte Informatik Programmieren in JAVA W. Geiger, T. Schlachter, C. Schmitt, W.

Algorithmen und Datenstrukturen

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Tutoraufgabe 1 (Listen):

Vorlesung Datenstrukturen

Aufbau eines "B-Baums" der Ordnung 3, Teil 1

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B4.1 Definitionen und Eigenschaften. B4.2 Traversierung. B4.

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Übungsblatt 11. Thema: Algorithmen und Datenstrukturen: Bäume

Einführung in die Informatik 2

ABITURPRÜFUNG 2001 LEISTUNGSFACH INFORMATIK (HAUPTTERMIN)

Labor Software-Entwicklung 1

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

3 Terme und Algebren 3.1 Terme

Grundlagen der Informatik

ADS: Algorithmen und Datenstrukturen

Inhaltsverzeichnis Einleitung Imperative Sprachkonzepte Objektorientierte Sprachkonzepte

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Arithmetik in der tcsh

Tutoraufgabe 1 (2 3 4 Bäume):

Übersicht Shell-Scripten

Algorithmische Graphentheorie

Algorithmen und Datenstrukturen

Bäume. Listen und Bäume, Graphen und Bäume, elementare Eigenschaften von Binärbäumen, Implementierung, Generische Baumdurchläufe

einlesen n > 0? Ausgabe Negative Zahl

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13

2.2 Syntax, Semantik und Simulation

Klausur Software-Entwicklung März 01

Institut für Programmierung und Reaktive Systeme 22. Mai Programmieren II. 11. Übungsblatt

1. Die rekursive Datenstruktur Liste

Algorithmen implementieren. Implementieren von Algorithmen

Algorithmen & Programmierung. Rekursive Funktionen (1)

Programmieren 1 C Überblick

Software Entwicklung 1

Programmierung mit C Zeiger

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Informatik II (D-ITET) Informatik II (D-ITET) Übungsstunde 1. Distributed Systems Group, ETH Zürich

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele. Stammbaum.

Datenstrukturen und Algorithmen (SS 2013)

Einstieg in die Informatik mit Java

Binärbäume: Beispiel

Klausur zur Vorlesung Informatik 1 im Wintersemester 2014/2015 am 18. Februar Bearbeitungszeit: 90 Minuten Gesamtpunktezahl: 90 Punkte

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Abstrakte Datentypen und deren Implementierung in Python

Trainingsmanagement Gutschein Management. Beschreibung

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Transkript:

Algorithmen, Datenstrukturen und Programmieren II SS 2001 1. InfixToPostfixConverter: Üblicherweise werden mathematische Ausdrücke in infix-notation geschrieben, d.h. der Operator steht zwischen den Operanden, wie etwa in 3 + 4 oder 7 9. Für ein Computerprogramm ist es aber wesentlich leichter, Ausdrücke in postfix-notation auszuwerten, d.h. der Operator steht nach den Operanden, obige Ausdrücke wären also 3 4 + bzw. 7 9. Der Ausdruck 6 + 2 5 wäre etwa 6 2 5 +, (6 + 2) 5 wäre hingegen 6 2 + 5 (beachten Sie, daß keine Klammern notwendig sind). Schreiben Sie eine Applikation, welche einen einzulesenden infix-ausdruck in einen postfix-ausdruck umwandelt. Dabei sollen die Operatoren +,,,/ sowie Klammern zugelassen sein. Hier ein Beispiel für einen Algorithmus, der diese Aufgabe erfüllt. Definieren Sie zwei Variablen StringBuffer infix (in welcher der eingelesene Ausdruck gespeichert wird) und StringBuffer postfix sowie einen Stack. (a) pushen Sie eine linke Klammer ( auf den Stack. (b) Hängen Sie eine rechte Klammer ) ans Ende von infix. (c) Solange der Stack nicht leer ist, lesen Sie infix elementweise von links nach rechts: Wenn das Element von infix eine Zahl ist, hängen Sie sie an postfix an. Wenn das Element von infix eine linke Klammer ist, pushen Sie sie auf den Stack. Wenn das Element von infix ein Operator ist: Poppen Sie Operatoren (falls welche vorhanden) vom Stapel, solange diese gleiche oder höhere Priorität wie der aktuelle Operator haben, und hängen Sie diese gepoppten Operatoren ans Ende von postfix. Pushen Sie das Element von infix (d.h. den Operator) auf den Stapel. Wenn das Element von infix eine rechte Klammer ist: Poppen Sie Operatoren (falls welche vorhanden) vom Stapel und hängen Sie sie ans Ende von postfix, bis eine linke Klammer oben am Stapel liegt. Poppen Sie die linke Klammer vom Stapel und werfen Sie sie weg.

2. PostfixEvaluator: Ein Postfix-Ausdruck ist gleichzeitig der Postorder Traversal eines bestimmten Binärbaumes. Erzeugen Sie diesen Baum mittels folgendem Algorithmus und beachten Sie dabei die folgende von rechts nach links-konvention : Die Anweisung an ein Element anhängen bedeutet versuchen Sie es zunächst rechts anzuhängen, wenn dort schon besetzt ist, hängen Sie es links an. (a) Der äußerst rechte Operator bildet die Wurzel des Baumes. Erzeugen Sie damit einen neuen Knoten und legen Sie Ihn auf den Stack. (b) Lesen Sie postfix elementweise von rechts nach links: Finden Sie den letzten nicht vollbesetzten Operator, indem Sie (falls notwendig) solange Knoten vom Stack poppen, bis oben auf dem Stack ein Knoten liegt, dessen rechte und/oder linke Kante auf null zeigt. Erzeugen Sie einen neuen Knoten mit dem postfix-element und hängen Sie Ihn an den oben auf dem Stack liegenden Knoten an. Wenn das Element von postfix ein Operator ist, pushen Sie den eben erzeugten Knoten auf den Stack. Auswerten des Baumes (und damit des Postfix-Ausdrucks): Schreiben Sie eine rekursive Methode int evaluate(node n) nach folgendem Algorithmus: (a) Wenn n.data eine Zahl ist, liefert die Methode diese Zahl zurück. (b) Wenn n.data ein + ist, liefert die Methode evaluate(n.left)+evaluate(n.right) zurück. (c) Wenn n.data ein - ist, liefert die Methode evaluate(n.left)-evaluate(n.right) zurück, usw.

3. Schreiben Sie eine Applikation (als Unterklasse von JFrame), die einen Satz über ein JTextField einliest und dann folgende Daten ausgibt: a) Die Zahl der mehrfach vorkommenden Wörter (dabei soll Großund Kleinschreibung ignoriert werden). b) Die verschiedenen Wörter des Satzes in alphabetischer Reihenfolge. c) Die verschiedenen Wörter des Satzes in umgekehrter Reihenfolge. Überlegen Sie zuerst, welche Datenstrukturen dem Problem angemessen erscheinen. Wahrscheinlich werden Sie die Klasse StringTokenizer verwenden wollen. Außerdem ist vielleicht die Collections-Methode reverseorder() von Nutzen.

4. Verwenden Sie die Klasse RandomFileTest als Ausgangspunkt, um eine einfache Version einer Personalverwaltung mit GUI zu entwickeln (wieder als Unterklasse von JFrame): der User soll zunächst über Textfelder Name und Gehalt des Angestellten festlegen können. Das Programm soll dann die Nummer des jeweiligen Angestellten anzeigen und die Daten in einem File abspeichern. Es soll möglich sein, über die Personalnummer auf die einzelnen Angestellten zuzugreifen, ihre Daten anzeigen zu lassen und ihr Gehalt zu verändern. Außerdem soll eine Ausgabe des gesamten Datenfiles auf die Standardausgabe möglich sein. Bei Aufruf des Programmes soll die Zahl der derzeit im File abgespeicherten Angestellten abrufbar sein.

5. Modifizieren Sie das Programm TableDisplay2.java so, dass die Resultate der einzelnen Abfragen jeweils zusätzlich in Textdateien abgespeichert werden. Wenn der User den Submit-Button drückt, soll ein File namens abfragex.txt angelegt werden, wobei X die Nummer der Abfrage ist. In dieses File soll zunächst der Abfrage-String geschrieben werden und danach als durch Kommata getrennte Liste das Resultat der Abfrage. Ein Blick auf die showtable-methode des Programmes MakeDB.java ist eventuell von Nutzen...

6. Modifizieren Sie die Client-Server Applikation aus 4.4 so, dass der Client ein Textfile anfordern kann. Falls dieses File am Server nicht vorhanden ist, soll eine entsprechende Meldung an den Client gesendet werden. Ansonsten soll das File zeilenweise an den Client geschickt werden.