Sie sind auf Seite 1von 2

Lehrstuhl für Angewandte Informatik II

Universität Bayreuth, Universitätsstraße 30, 95447 Bayreuth


Prof. Dr. Thomas Rauber Büro: AI 2.08
Tim Werner Büro: AI 2.15
Internet: https://elearning.uni-bayreuth.de/course/view.php?id=35391
Email: vorname.nachname@uni-bayreuth.de

Parallele und Verteilte Systeme I


1. Übungsblatt
Ausgabe: Mittwoch, 19. 10. 2022 Abgabe: Montag, 07. 11. 2022, 12 Uhr

Hinweis: Die Lösungen der Programmieraufgaben sind im Quelltext zusammen mit allen zur Übersetzung
benötigten Hilfsdateien über die E-Learning-Seite einzureichen. Die Programme sollten sich mit dem
Compiler gcc übersetzen lassen.

Aufgabe 1.1 (1+3+3+1 Punkte)

In dieser Aufgabe sollen Sie eine einfache Simulation eines Galtonsbretts[1] in der Programmiersprache
C mit anschließender Ausgabe programmieren:

(a) Zuerst soll die Simulation die Zahl der zu verfolgenden Kugeln und die Zahl der Fächer des Galton-
bretts von der Kommandozeile einlesen.

(b) Als Nächstes soll die Simulation die Kugeln nacheinander durch das Brett verfolgen. Um zu ent-
scheiden, ob eine Kugel bei einem Hindernis den linken oder den rechten Pfad herunterfällt, soll
die rand-Funktion verwendet werden. Die Fächer des Galtonbretts beziehungsweise das Histogramm
sind als einfaches eindimensionales Array zu implementieren. Ist eine Kugel unten in einem Fach
angekommen, so ist der Eintrag des entsprechenden Fachs im Array um eins zu inkrementieren.

(c) Nun soll die Simulation aus dem Histogramm eine einfache ASCII-Graphik erstellen, und diese in
einem (zweidimensionalen) Array abspeichern. Diese Graphik kann zum Beispiel wie folgt ausschau-
en:

X
X X
X X X X
X X X X X X
X X X X X X X

Hinweis: Indem Sie in der ASCII-Graphik nicht für jede Kugel ein Symbol eintragen, sondern jeweils
eine bestimmte feste Anzahl an Kugeln zu einem Symbol zusammenfassen, wird die Binomialvertei-
lung in dieser ASCII-Graphik deutlich besser erkennbar!

(d) Abschließend soll die die Simulation diese ASCII-Graphik auf der Konsole ausgeben.

[1] https://de.wikipedia.org/wiki/Galtonbrett

Aufgabe 1.2 (10+2 Punkte)

In dieser Aufgabe sollen Sie einen binären Suchbaum[1], welcher Integer als Schlüssel besitzt, in der Pro-
grammiersprache C programmieren. Für diesen Suchbaum sind bereits folgende Strukturen vorgegeben:
typedef struct NODE Node;

struct NODE{
int key;

1
Node* smaller_keys;
Node* larger_keys;
};

typedef struct{
Node* root;
}Tree;

(a) Implementieren Sie folgende Funktionen für den Suchbaum:

• tree_create: Erzeugt einen leeren Sucbaum


• tree_insert_key: Fügt einen neuen Schlüssel in den Suchbaum ein
• tree_find_key_recursive: Prüft rekursiv ob ein Schlüssel im Suchbaum vorhanden ist
• tree_find_key_iterative: Prüft iterativ ob ein Schlüssel im Suchbaum vorhanden ist
• tree_is_valid: Überprüft ob der Suchbaum valide ist, d.h dass für jeden Knoten der Teilbaum
des Knotens mit den kleineren Schlüsseln auch wirklich nur kleinere Schlüssel beinhaltet, und
dass der Teilbaum des Knotens mit den größeren Schlüsseln auch wirklich nur größere Schlüssel
beinhaltet.
• tree_deep_copy: Erzeugt eine tiefe Kopie des Suchbaums
• tree_delete: Löscht den Sucbaum mitsamt allen Knoten
(b) Implementieren Sie eine Main-Funktion, die einen Suchbaum mit zufälligen Schlüsseln aufbaut, und
sämtliche Funktionen testet!

[1] https://en.wikipedia.org/wiki/Binary_search_tree

Das könnte Ihnen auch gefallen