Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

Ähnliche Dokumente
Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

13. Binäre Suchbäume

Kurs 1613 Einführung in die imperative Programmierung

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

Geordnete Binärbäume

An die Teilnehmerinnen und Teilnehmer des Kurses 1613 Einführung in die imperative Programmierung im WS 05/06

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

11.1 Grundlagen - Denitionen

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

Kurs 1612 Konzepte imperativer Programmierung Kurs 1613 Einführung in die imperative Programmierung

Lösungen zu den Übungsaufgaben zu Feldern

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Tutoraufgabe 1 (2 3 4 Bäume):

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Excel VBA. Teil Zusammenfassung! Was wir können sollten! V

Objektorientierte Programmierung OOP Programmieren mit Java

FernUniversität -Gesamthochschule- in Hagen

JAVA KURS COLLECTION

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Datenstrukturen und Algorithmen

Suchen und Sortieren Sortieren. Heaps

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Informatik II, SS 2014

C.3 Funktionen und Prozeduren

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

Grundlagen der Programmierung 2. Bäume

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Sortierte Folgen 250

Über Arrays und verkettete Listen Listen in Delphi

Informatik II, SS 2014

Einführung in VisualBasic for Applications. Stefan Mahlitz

Grundlagen der Programmierung Prof. H. Mössenböck. 4. Schleifen

Programmierkurs Java

Makro Programmierung User Interface (Entwicklungs- Umgebung) Grafische Werkzeugbox. GUI Form erstellen (UserForm)

Access 2010 Programmierung Schleifen

14. Rot-Schwarz-Bäume

Kap. 4.2: Binäre Suchbäume

BTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio /9

Programmierung und Modellierung

Übersicht. Rot-schwarz Bäume. Rot-schwarz Bäume. Beispiel. Eigenschaften. Datenstrukturen & Algorithmen. Rot-schwarz Bäume Eigenschaften Einfügen

Binäre Bäume Darstellung und Traversierung

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

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

10. Kapitel (Teil1) BÄUME GRUNDLAGEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen

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

Übungen Programmieren 1 Felix Rohrer. Übungen

6-1 A. Schwill Grundlagen der Programmierung II SS 2005

Vorkurs Informatik WiSe 15/16

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Kapiteltests zum Leitprogramm Binäre Suchbäume

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?

368 4 Algorithmen und Datenstrukturen

4 Schleifen -= Entstanden unter Excel 2003 =-

Modul 122 VBA Scribt.docx

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Algorithmen und Datenstrukturen SS09

Access [basics] Kunden per Bezeichnung verwalten. Beispieldatenbank. Kundenbezeichnung erwünscht. Separates Bezeichnungsfeld

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 {

Programmiertechnik II

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Filter in VBA nutzen HARALD NAHRSTEDT. Erstellt am

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

Nachtrag zu binären Suchbäumen

Übungen zu Programmierung I - Blatt 8

Übung zur Vorlesung Algorithmische Geometrie

VBA-Programmierung: Zusammenfassung

Programmierkurs: Delphi: Einstieg

16 SQL Server-Zugriff per VBA

Frühjahr. Erste Staatsprüfung für ein Lehramt an öffentlichen Schulen. Prüfungsteilnehmer Prüfungstermin Einzelprüfungsnummer. - Prüfungsaufgaben -

Herzlich Willkommen. Über mich Termine Literatur Über PHP

Prozedurale Datenbank- Anwendungsprogrammierung

Punkte dieser Runde. Gegenstand. 1 Stein 2 2 Schere Schere 2 2 Papier 2 1 Stein Stein 1 1, Stein 1 1 Papier 4 3

Programmierung für Mathematik HS12 Übung 3

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

BAUINFORMATIK. SS 2013 Vorlesung 1 Johannes Lange

E-PRIME TUTORIUM Die Programmiersprache BASIC

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Objektorientierte Programmierung

Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen Balancierte Suchbäume

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Lua Grundlagen Einführung in die Lua Programmiersprache

4.Grundsätzliche Programmentwicklungsmethoden

Schleifen und If-Abfragen

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

Enthält die Variable einen Zahlenwert - IsNumeric() gibt Auskunft Kontext

Was ist Logische Programmierung?

Einführung in die Programmierung für Wirtschaftsinformatik

Einführung in die Programmierung

Arbeiten mit JavaKara

Übung zur Vorlesung Multimedia im Netz

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:

Transkript:

1 Lösung 1 ( 4+4 Punkte) a) procedure VerschiebeZyklisch ( iofeld : tfeld); { verschiebt die Werte innerhalb eines Feldes eine Position nach rechts; der Wert iofeld[max] wird nach iofeld[1] übertragen } sicher: integer; ix: tindex; sicher := iofeld[max]; (* Der letzte Feldinhalt wird gesichert *) for ix := MAX downto 2 do iofeld[ix] := iofeld[ix-1]; (* Die Feldinhalte mit Ausnahme des Letzten werden um eine Position nach rechts verschoben *) iofeld[1] := sicher (* Das ehemalig letzte Element wird neues erstes *) ;{VerschiebeZyklisch} b) Eine einfache, wie in der Aufgabenstellung empfohlene Lösung sieht wie folgt aus: procedure VerschiebeBis (inwert : integer; iofeld : tfeld); { verschiebt den Inhalt von iofeld solange zyklisch nach rechts, bis inwert vorne steht. Falls inwert nicht im Feld vorkommt, wird der Feldinhalt nicht verändert } vorhanden : boolean; ix: tindex; vorhanden := false; ix := 0; while ((not vorhanden) and (ix < MAX)) do (* Die Schleife wird solange durchlaufen, bis inwert gefunden wird oder das ganze Feld durchsucht ist *) ix := ix + 1; if iofeld[ix] = inwert then

2 Kurs 1613 Einführung in die imperative Programmierung vorhanden := true ; if vorhanden then (* Wenn der Suchwert im Feld vorkommt, wird solange verschoben, bis sich dieser an der ersten Position befindet *) while iofeld1[1] <> inwert do VerschiebeZyklisch(ioFeld) ; {VerschiebeBis} Auf die erste Schleife kann man verzichten, wenn man die Schleifenabbruchbedingung der zweiten Schleife erweitert: Der Zusatz (anz < MAX) bewirkt, dass die Schleife spätestens dann abbricht, wenn das Feld einmal vollständig verschoben wurde und sich somit wieder im Ursprungszustand befindet. procedure VerschiebeBis (inwert : integer; iofeld : tfeld); { verschiebt den Inhalt von iofeld solange zyklisch nach rechts, bis inwert vorne steht. Falls inwert nicht im Feld vorkommt, wird der Feldinhalt nicht verändert } anz : integer; anz := 0; while ((iofeld[1] <> inwert) and (anz < MAX)) do VerschiebeZyklisch(ioFeld); anz := anz + 1 { while ((iofeld[1] <> inwert) and (anz < MAX)) } ;{VerschiebeBis}

3 Lösung 2 ( 6+4 Punkte) a) procedure suchen(insuchwert: integer; inrefanf: trefliste; outpos: trefliste); { Gibt mit outpos einen Zeiger auf das letzte Vorkommen von insuchwert in der Liste inrefanfang zurück } lauf, pos: trefliste; pos := inrefanfang; lauf := inrefanfang^.next; while lauf <> NIL do (* Die Liste wird vollständig durchlaufen und dabei das *) (* jeweils letzte Vorkommen von insuchwert gespeichert *) if lauf^.info = insuchwert then pos := lauf; lauf := lauf^.next ; { while lauf <> NIL } outpos := pos; ; {suchen} b) procedure loeschen(insuchwert: integer; iorefanf: trefliste); { löscht das letzte Vorkommen von insuchwert in der Liste, deren Anfangszeiger iorefanf ist} lauf, pos: trefliste; suchen(insuchwert, iorefanf, pos); if pos = iorefanf then (* Sonderfall: Löschen des Listenanfangs *) iorefanf := iorefanf^.next lauf := iorefanf;

4 Kurs 1613 Einführung in die imperative Programmierung while lauf^.next <> pos do (* Finden des Vorgängers von pos *) lauf := lauf^.next; (* Das Element pos wird aus der Liste entfernt: *) lauf^.next := pos^.next ; { if pos = iorefanf } dispose(pos) ; {loeschen}

5 Lösung 3 (10 Punkte) procedure FuegeEin(inWert: integer; iorefanfang: trefliste); lauf, neu, vor: TRefListe; new(neu); neu^.info := inwert; if iorefanfang = NIL then { Leere Liste? } neu^.next := NIL; iorefanfang := neu vor := iorefanfang; lauf := iorefanfang^.next; if vor^.info>inwert then { Neues Element wird } { erstes Element } neu^.next := vor; (*1*) iorefanfang := neu (*2*) if lauf = NIL then { Die Liste besteht nur aus } { einem Element. } vor^.next := neu; (*3*) neu^.next := NIL (*4*) while (lauf^.info < inwert) AND (lauf^.next <> NIL) do { Liste besteht aus mindestens zwei Elementen } lauf := lauf^.next; (*5*) vor := vor^.next (*6*) ; if lauf^.info >= inwert then { innerhalb der Liste } { einfügen } neu^.next := lauf; (*7*) vor^.next := neu (*8*) lauf^.next := neu; (*9*) neu^.next := NIL (*10*) ;

6 Kurs 1613 Einführung in die imperative Programmierung Lösung 4 (6+6+2 Punkte) a) function Hoehe(inWurzel: trefbinbaum): integer; { liefert die Höhe des übergebenen Baumes zurück } HoeheL, HoeheR: integer; if inwurzel = NIL then (* Ein leerer Baum hat die Höhe 0 *) Hoehe := 0; (* Die Höhe ergibt sich aus dem Maximum der Höhen der linken und rechten Teilbäume, zu dem 1 addiert wird (die Wurzel) *) HoeheL := Hoehe(inWurzel^.links); HoeheR := Hoehe(inWurzel^.rechts); if HoeheL > HoeheR then Hoehe := 1 + HoeheL Hoehe := 1 + HoeheR { if inwurzel = NIL } ; {Hoehe} b) procedure Pruefen(inWurzel: trefbinbaum; iobalanciert: boolean); { setzt iobalanciert auf false, wenn der in inwurzel übergebene Baum nicht balanciert ist } if inwurzel <> NIL then (* Sind alle Teilbaeume balanciert? *) Pruefen(inWurzel^.links, iobalanciert); Pruefen(inWurzel^.rechts, iobalanciert); (* Gilt die Balancierteigensschaft zusätzlich auch für die Wurzel? *) if abs(hoehe(inwurzel^.links)-hoehe(inwurzel^.rechts)) >1 then

7 iobalanciert := false { if inwurzel <> NIL } ; {Pruefen} c) iobalanciert muss beim ersten Aufruf den Wert true besitzen: Ein Baum ist nur dann balanciert, wenn all seine Teilbäume balanciert sind. Dementsprech kann sich innerhalb eines Teilbaum-Aufrufes immer nur ein bisher balancierter Baum als unbalancierter Baum erweisen, niemals umgekehrt.