Dr. Andreas Borchert Abteilung Angewandte
Informationsverarbeitung 09.06.2005
Norbert Heidenbluth Blatt 7
Allgemeine Informatik II für Mathematiker/Wirtschaftsmathematiker
(SS 2005)
Abgabetermin: 16. Juni 2005
Bis heute waren Sie der Meinung, das Ding da auf oder unter Ihrem
Schreibtisch (``Computer'') ist nur ein Befehlsempfänger und denkt
nicht selbständig, stimmt's? Aber weit gefehlt! Ihr Computer kann
sogar Ihre Gedanken erraten! Glauben Sie nicht? Dann schauen Sie mal hier:
Denken Sie sich einfach einen Gegenstand und beantworten Sie die Fragen,
die Ihnen gestellt werden. Ihr Computer wird nun zielsicher durch Ihre
Antworten auf die Fragen den von Ihnen gedachten Gegenstand bestimmen.
Dieses System finden Sie doch bestimmt dermaßen beeindruckend, daß
Sie sich wünschen, mal ein Informatik-Übungsblatt zu bekommen, auf dem
Sie dies nachprogrammieren dürfen. Na gut, dann wollen wir mal nicht
so sein!
Aufgabe diesmal ist es, ein (vereinfachtes) System wie oben dargestellt in
Oberon zu programmieren. Allerdings -- und dies ist die Vereinfachung
-- soll es nur aus Fragen bestehen, die mit ``Ja'' oder
``Nein'' zu beantworten sind.
Die folgenden Hinweise sollen die Aufgabenstellung präzisieren und Ihnen
den Einstieg in diese Aufgabe erleichtern:
- Gewünscht ist ein Programm, das zu dem von Ihnen ausgedachten
Gegenstand Fragen stellt, die mit ``Ja'' oder ``Nein''
zu beantworten sind.
- In Abhängigkeit Ihrer Antwort soll es dann entweder eine
weitere Frage stellen oder einen Tip abgeben, um was es sich
bei dem von Ihnen gedachten Gegenstand handelt.
- Das Programm soll lernfähig sein. Das heißt, wenn der Tip
des Programms falsch war, dann wird es um eine neue Frage bitten,
die in Zukunft diese Fehlentscheidung vermeiden hilft.
- Es ist diesmal nicht erforderlich, das Programm zu modularisieren.
Wie in den ``guten alten Zeiten'' können Sie diesmal alles in
einem Modul unterbringen.
- Als Datenstruktur sollten Sie einen binären Baum verwenden,
diesmal jedoch einen ohne Sortierung!
Seine Knoten enthalten zum einen die Frage sowie die
Verweise auf den jeweils weiterführenden Knoten, für die
beiden Fälle, daß mit ``Ja'' bzw. ``Nein'' geantwortet wurde.
- Es ist natürlich nötig, den erzeugten Fragenbaum persistent
zu machen, das heißt, er soll in eine Datei geschrieben
(``serialisiert'') werden können, die beim Start des
Programms eingelesen wird. Das klingt ja irgendwie nach
Traversierung, gell?
- Die Fragen-Datei soll dem Programm als Argument übergeben werden
können, damit es möglich ist, unterschiedliche Fragenbäume
mit Ihrem Programm durchzuspielen.
- Die Frage-Datei muß zum Lesen und Schreiben geöffnet sein.
Sie müssen hier auf die korrekten Modi achten (rdwr +
condcreate, vergleiche Skript aus dem Wintersemester und
man UnixFiles).
Vor dem Schreiben müssen Sie sich zunächst mit
Streams.SetPos(s, 0) (wobei ``s'' vom Typ Streams.Stream ist)
auf den Beginn der Datei positionieren.
- Sie können Ihr Programm so gestalten, daß die Fragen stets aus
einem Themenbereich (z.B. Autos, Berufe oder - wie im Beispiel -
Tiere) kommen. Somit können Sie also die Benutzerdialoge statisch
halten (vgl. Beispiel, dort wird stets nur auf Tiere Bezug
genommen).
Als Beispiel stellen wir Ihnen - abgesehen von den
Binaries
- die Datenbank tiere.db
zur Verfügung.
Hier können Sie sich bis zu 4 Bonuspunkte verdienen, wenn Sie eine
kreative und brauchbare Fragen-Datenbank erstellen. Die Fragen stellen
wir dann online, und die lustigste/kreativste/beste Datenbank bekommt
4 Bonuspunkte, die zweite dann 2 Bonuspunkte und die dritte 1 Bonuspunkt.
Bonuspunkte gibt es nur, wenn auch für das Hauptprogramm mindestens 5
Punkte erzielt worden sind!
Nachstehend noch eine kleine Beispielsitzung. Wir nehmen an, wir haben
uns den Hund als Tier vorgestellt, der aber noch nicht in unserer
Wissenssammlung enthalten ist. Dann sieht eine Sitzung wie folgt aus:
zur Beispielsitzung...
Norbert Heidenbluth
2005-06-08