Übung Wörterbuch Standard ◦ ?

Lernziele

- verkettete Datenstrukturen
- sortierter Binärbaum
- Implementation eines Binärbaums
- rekursiver Algorithmus

Wiederholungsfragen

Ein Klick auf den roten Hyperlink zeigt die richtige Lösung.

1. Welche Aussage ist richtig?

   1. In Datenfeldern müssen alle Elemente dieselbe Grösse haben und in einem zusammenhängenden Speicherbereich gespeichert werden.
   2. In verketteten Strukturen müssen alle Elemente dieselbe Grösse haben. Sie müssen aber nicht in einem zusammenhängenden Speicherbereich gespeichert werden.
   3. In verketteten Strukturen können die Elemente verschiedene Grösse haben. Sie müssen aber in einem zusammenhängenden Speicherbereich gespeichert werden.
   4. Sowohl in Datenfeldern als auch in verketteten Strukturen können die Elemente verschiedene Grösse haben, und sie müssen nicht in einem zusammenhängenden Speicherbereich gespeichert werden.

2. Welche Höhe hat ein ausbalancierter Binärbaum mit 31 Knoten?

   1. 30
   2. 31
   3. 32
   4. 4

3. Welche der folgenden Binärbäume sind sortiert?

4. Welche der folgenden Binärbäume sind ausbalanciert?

5. Skizzieren Sie die Binärbäume, die entstehen, wenn Sie die folgenden Buchstaben in der angegebenen Reihenfolge in einen leeren sortierten Binärbaum einfüllen.

   1. x, v, s, r, o, e, n
   2. r, v, e, x, s, o, n
   3. n, o, s, x, e, v, r

6. Welche Aussage ist falsch? Bei einem rekursiven Algorithmus ...

   1. ... müssen die Abbruchbedingungen vor einem rekursiven Aufruf geprüft werden.
   2. ... muss der Basisfall die Rekursion abbrechen.
   3. ... muss die Reduktion vor dem Basisfall geprüft werden.
   4. ... muss der rekursive Aufruf die Aufgabe vereinfachen.

Vertiefungsfragen

Bevor wir mit der eigentlichen Aufgabe beginnen, lernen wir den Debugger noch etwas besser kennen. Lösen Sie dazu die Aufgabe Verkettete Liste debuggen.

Wir implementieren eine einfache Variante unseres Wörterbuchs 'Deutsch-Englisch' für Fachbegriffe. Das nächste Bild zeigt die Benutzerschnittstelle der Arbeitsmappe WoerterbuchStandardSkelett.xls.

- 'füge hinzu' einen neuen Eintrag (Begriff/Definitions-Paar) ins Wörterbuch ein.
- 'übersetze' gibt die Definition zu einem Begriff zurück.

Aufgaben

1. Öffnen Sie die Arbeitsmappe WoerterbuchStandardSkelett.xls, und machen Sie sich mit ihrem Inhalt vertraut:

   - Welche Namen haben die hellblauen Bereiche?
   - Welche Prozeduren sind den beiden Schaltflächen zugeordnet?
   - Aus welchen Modulen setzt sich das Projekt zusammen?
   - In welchem Modul befinden sich die Ereignisprozeduren?
   - Welche Aufgaben haben die restlichen Module?

2. Wechseln Sie in die Programmierumgebung, und betrachten Sie das Klassenmodul cWörterbuch:

   - Notieren Sie alle Eigenschaften und Methoden der Klasse cWörterbuch.
   - Beschreiben Sie den Unterschied zwischen den drei Prozeduren fügeHinzu(), fügeHinzuIt() und fügeHinzuRek(). Welche Unterschiede in den Prozedurköpfen stellen Sie fest?
   - Beschreiben Sie den Unterschied zwischen den beiden Prozeduren Eintrag() und EintragRekursiv(). Welche Unterschiede in den Prozedurköpfen stellen Sie fest?
   - Schreiben Sie den Programmcode der Prozedur erzeugeKindRechts().

3. Wechseln Sie ins Modul Prozeduren, und vervollständigen Sie den Programmcode:

   - Beschreiben Sie die Funktion der Prozedur initialisiere(), und fügen Sie die fehlende Programmzeile ein.
   - Beschreiben Sie die Funktion von fügeHinzu_Klick(), und ergänzen Sie den Programmcode.
   - Beschreiben Sie die Funktion von übersetze_Klick(), und ergänzen Sie den Programmcode.

4. Testen und studieren Sie die beiden Implementationen des Einfügealgorithmus.

   - Wechseln Sie ins Modul cWörterbuch, und überzeugen Sie sich, dass die Methode fügeHinzu() die iterative Version des Einfügealgorithmus aufruft. Setzen Sie beim Aufruf einen Haltepunkt, und legen Sie einen Überwachungsausdruck für die Variable Wurzel fest.

   - Geben Sie über die Benutzerschnittstelle die folgenden Begriffs/-Definitions-Paare ein. Beobachten Sie dabei den Programmablauf mit dem Debugger und den Aufbau der Datenstruktur im Überwachungsfenster:

     kind/child, ast/branch, wurzel/root, knoten/node.

     Welche Bedingung bricht den Algorithmus in den folgenden Fällen ab?

     1. wenn Sie das erste Mal ein Begriffspaar eingeben
     2. wenn Sie ein weiteres Begriffspaar eingeben
     3. wenn Sie ein Begriffspaar zwei Mal eingeben
   - Lassen Sie nun die Methode fügeHinzu() die rekursive Version des Einfügealgorithmus aufrufen, und beobachten Sie den Programmablauf erneut.

5. Entwerfen und implementieren Sie eine rekursive Prozedur EintragRekursiv(), die einen Begriff im Wörterbuch sucht und den gefundenen Eintrag zurück gibt.

   - Schauen Sie sich zunächst den Aufruf der Prozedur EintragRekursiv() in der Methode Eintrag() an. Weshalb wird die Suche nicht direkt in der Methode Eintrag() implementiert?
   - Notieren Sie ein paar Beispielbäume, die sich zum Testen des Algorithmus eignen.

   - Entwerfen Sie einen rekursiven Algorithmus für die Suche eines Begriffs im Baum. Verwenden Sie als Vorlage den Entwurfscode für das Hinzufügen, wie er im Thema "rekursive Algorithmen" vorgestellt wurde.

         FügeHinzuRekursiv Begriff, Baum

         '-- 1 Basisfall
         Falls Baum leer
           erzeuge Wurzelknoten
           fülle Begriff ein

         '-- 2 Reduktion
         sonst
           Falls Begriff < Begriff im Wurzelknoten von Baum
             FügeHinzuRekursiv Begriff, linker Teilbaum von Baum
           Falls Begriff > Begriff im Wurzelknoten
             FügeHinzuRekursiv Begriff, rechter Teilbaum von Baum

   - Implementieren Sie den Algorithmus.
   - Testen Sie ihren Algorithmus anhand ihrer Beispielbäume. Geben Sie dazu über die Benutzerschnittstelle einen (deutschen) Begriff ein und klicken anschliessend auf 'übersetzen'.

LWoerterbuch.xls

©abo