Dr. Andreas Borchert Abteilung Angewandte Informationsverarbeitung 23.06.2005
Norbert Heidenbluth Blatt 9


Uni Logo



Allgemeine Informatik II für Mathematiker/Wirtschaftsmathematiker
(SS 2005)



Abgabetermin: 30. Juni 2005

Aufgabe 12: Was guckst Du? (8 Punkte)

Neulich ergab sich der folgende Dialog in der Mensa:

``Schau' mal: der Typ an der Kasse, der sieht aus wie Richard Gere!'' ``Richard Gere? Aus welchem Film kenne ich den?'' ``Zum Beispiel aus Pretty Woman!''. ``Ach ja richtig! Der Film ist toll! Wer hat da nochmal die weibliche Hauptrolle gespielt?'' ``Julia Roberts!'' ``Na klar, die hat doch auch in Ocean's Elevens mitgespielt.'' ``Hmm, macht in Ocean's Eleven nicht auch Brad Pitt1 mit?''. ``Ja, genau, den find' ich seit seinem Film Sieben Jahre in Tibet ganz toll!'' ``Sieben Jahre in Tibet? Da macht doch auch B.D. Wong mit. In welchem Film hat der denn noch mitgespielt?'' ``Keine Ahnung!'' ``Ich auch nicht!''

Was hat das mit unserem Übungsblatt zu tun? Nun, jetzt, wo bald die Ferien anfangen und Sie nicht wissen, was Sie ohne unterhaltsame Übungsblätter mit Ihrer Zeit anfangen werden, sind Sie dankbar für jede Anregung, die den Geist auf Trab hält. Und warum nicht mal die Internet Movie Database auswendig lernen?

Und wenn Sie dann alles auswendig können, möchten Sie ihr Wissen auch testen, und dazu können Sie dann das Programm verwenden, das Sie in dieser Aufgabe schreiben sollen:

Aufgabe

Schreiben Sie ein Oberon-Programm, mit dem Sie einen Dialog wie im Beispiel angegeben ``führen'' können. Sie geben also zu Beginn den Namen eines Schauspielers2 ein. Als nächstes erwartet das Programm die Eingabe eines Filmtitels (leider müssen dies hier bei uns die Originaltitel sein!), in dem dieser Schauspieler mitgespielt hat. War die Eingabe korrekt, fragt das Programm als nächstes nach einem anderen Schauspieler, der ebenfalls in dem zuletzt genannten Film dabei war. Bezogen auf diesen neuen Schauspieler wird nun wieder nach einem Filmtitel gefragt, in dem der genannte Schauspieler mitmacht. So geht es immer weiter. Wenn Sie eine falsche Antwort gegeben haben, ist das Spiel beendet, und Sie bekommen Ihre Punktzahl (Anzahl korrekter Antworten) genannt.

Wichtig:

Ein Schauspieler soll nicht mehrfach genannt werden dürfen!

Hinweise und Tips:

Die Module

Nachstehend finden Sie eine kurze Erklärung der für diese Aufgabe benötigten Module. Die genauen Spezifikationen entnehmen Sie bitte den zugehörigen od-Dateien, die sie wie immer auf unserem FTP-Server finden. Die Module sind in topologischer Reihenfolge erklärt und geben in der ersten (kursiv gesetzten) Zeile jeweis an, wie sie sich gegenseitig verwenden:

Hashes

Dieses Modul entspricht - zumindest in der Beispiellösung - vollständig dem Beispiel Hashes aus der Vorlesung.

Dies müssen Sie für diese Aufgabe nicht verwenden, wenn Sie gerne ein eigenes Hash-Modul schreiben möchten. Aber selbstverständlich können Sie es gerne verwenden!

NameObjects

(unterstützt Hashes für Objekte mit einem Namen)

Diese Abstraktion ist als Hilfestellung gedacht, um besser mit dem Hash-Modul aus der Vorlesung arbeiten zu können, welches als Datentyp Erweiterungen von Objects.Object erwartet.

Dementsprechend stellt NameObjects einen Datentyp zur Verfügung, der eine Erweiterung von Objects.Object ist und Strings verwalten kann. Letztlich braucht man sowohl für das Speichern von Schauspielern als auch für das Speichern der Filmtitel jeweils nur einen String - aber eben in einem vom das Hash-Modul erwarteten Weise. Genau dies wird durch NameObjects zur Verfügung gestellt: abgesehen vom Datentyp selber, werden hier auch die notwendigen Funktionen zur Aufnahme einer Variablen vom Typ NameObjects in den Hash definiert.

Das bedeutet konkret, daß es sich bei NameObjects um eine Faktorisierung des Namensteils von Schauspielern und Filmen handelt, die es einem erspart, die drei Prozeduren für Hashes doppelt zu schreiben.

Damit ergibt sich die folgende Typ-Hierarchie:

\epsfig{figure=hierarchy.eps, height=5cm}

Database

(nutzt NameObjects und Hashes zum Aufbau einer Datenbank)

Dieses Modul stellt die für den Aufbau der Datenbank erforderliche Datenstruktur sowie die notwendigen Zugriffsmechanismen zur Verfügung.

DBLoader

(füllt eine Datenbank aus dem Database-Modul)

Dieses Modul stellt die Funktion Load zur Verfügung, mit der eine Filmdatenbank eingelesen wird.

Game

(füllt ein Spiel durch mit einer gefüllten Datenbank)

Dieses Modul bietet die Prozedur Run an, die ein Spiel steuert.

Main.o[dm]

Dieses Modul ist das Hauptmodul des Spiels. Hier wird insbesondere auch der Pfad zur Datenbank-Datei angegeben. Abgesehen von dieser Anpassung können Sie das Modul aber ohne Änderungen übernehmen. Dies stellen wir Ihnen zur Verfügung.

Beispiel:

Wie immer geben wir zum Schluß der Aufgabenstellung noch ein Beispiel an (dies entspricht dem eingangs geschilderten ``Mensa-Dialog''):

*** Schauspieler / Filme Raten ***
Schauspieler: Richard Gere     
Film: Pretty Woman
Schauspieler: Julia Roberts
Film: Ocean's Eleven
Schauspieler: Brad Pitt
Film: Seven years in tibet
Schauspieler: B.D. Wong   
Film: Lethal Weapon
Pech! Leider hat B.D. Wong nicht in Lethal Weapon mitgespielt!
Gut! Sie haben 3 Punkte erreicht!

Aufgabe 13: Eine kleine Verbesserung$\ldots$ (2 Punkte)

Erweitern Sie das Programm so, daß die Groß- und Kleinschreibung nicht mehr relevant ist. Die Eingabe ``Seven years in Tibet'' soll zum Beispiel genauso gewertet werden wie ``Seven Years In Tibet''.

Tip:

Für diese Aufgabe ist lediglich eine Änderung im Modul NameObjects notwendig. Die übrigen Module brauchen nicht verändert zu werden!

Viel Erfolg!



Fußnoten

... Pitt1
Wenn Sie weiblich sind, dürfen Sie jetzt kurz hyperventilieren$\ldots$
... Schauspielers2
Das können natürlich auch Schauspielerinnen sein!
... Link3
Kommando: ln -s /home/ftp/root/pub/vorlesungen/ss05/ai2/uebungen/blatt9/daten/movies .
... wird4
Hier haben wir dann einen ``Hash von Hashes''!


Norbert Heidenbluth 2005-06-23