Prof. Dr. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 28. Januar 2004
Dr. Andreas Borchert, Michael Wiedemann Blatt 13
Allgemeine Informatik I (WS 2003/2004)
Abgabetermin: 4. Februar 2003
Dieses Mal beschäftigen wir uns mit ganz bestimmten Sätzen.
Nehmen wir zum Beispiel den Satz:
Leg in eine so helle Hose nie'n Igel.
Wenn man diesen Satz genauer betrachtet, wird man feststellen, dass man ihn sowohl von vorne, als auch von hinten lesen kann. Eine praktische Sache. Deswegen programmieren wir ein Oberon-Programm, dass genau solche Sätze identifizieren kann. Um es nicht allzu einfach zu machen, hier einige Anforderungen an das Programm:
- Die Struktur des Programms ist fest vorgegeben: eine Einlese-, eine Überprüfungs- und eine Ausgabeprozedur.
- Es sollten in den Prozeduren keine globale Variablen verwendet werden. Alles geschieht durch Übergabe, lokale Variablen bzw. offene Feldparameter.
- Das Modul Write wird dieses Mal auch nicht verwendet, sondern das oft weitaus praktischere Modul Print.
- Euer Programm sollte sowohl mit Groß- und Kleinschreibung als auch Satzzeichen und Trennern zurecht kommen. D.h. das Programm erkennt sowohl
otto, OtTO als auch o T t O als einen solchen speziellen Satz.
Zum Testen des Programms hier einige Beispielsätze:
Kajak
Reliefpfeiler
Lager - Regal
Dreh Magiezettel um, Amulette zeig' am Herd!
Eine treue Familie bei Lima feuerte nie.
Nie fragt sie: ``Ist gefegt? ``. Sie ist gar fein.
Vitaler Nebel mit Sinn ist im Leben relativ.
Die Liebe fleht: Helfe bei Leid!
Ein Eis esse sie nie!
(Weitere Beispiele finden sich auf der Homepage unter Beispiele zu diesem Übungsblatt.)
Nützliche Tipps:
- Es reicht, wenn Ihr einfach eine Zeile mittels Read.Line einlest.
- Am besten nehmt Ihr nicht einen, sondern zwei Arrays. Einer davon hält Euren originalen eingelesen Satz, der andere beinhaltet Euren veränderten String, der nur aus Buchstaben bestehen sollte. Diese Buchstaben gilt es schließlich zu untersuchen.
- Es wäre durchaus nützlich, sich die Anzahl der Buchstaben im String zu merken.
- Ihr solltet darauf achten, dass Ihr nicht auf einen Index Eurer Arrays zugreift, der nicht existiert. Speziell offene Feldparameter sollten immer so benutzt werden (Stichwort: LEN). Also prüft bei jeder Bunutzung Eures Arrays ab, ob Ihr noch innerhalb der zulässigen Schranken seid.
- Es reicht nicht, die eingelesenen Buchstaben einfach in Euren zweiten Array zu stopfen. Damit Ihr vernünftig vergleichen könnt, müssen die Buchstaben quasi normiert werden, also entweder nur Groß- oder nur Kleinbuchstaben.
- Im Fall, dass der Satz nicht vorwärts und rückwärts lesbar ist, sollte eine Information ausgegeben werden, an welchen Stellen im Satz (hier reicht der umgewandelte Satz) die Zeichen unterschiedlich sind und welche Zeichen das sind (das geht sehr komfortabel mit Print).
- Wie bereits oben erwähnt, dürfen die Arrays innerhalb der Prozeduren nicht als globale Varibalen verwendet werden. Verwendet stattdessen offene Feldparameter!
- Wie immer gibt es einen Programmrumpf und eine beispielhafte Programmbenutzung, um die grundsätzliche Struktur zu erklären.
Viel Erfolg!
Michael Wiedemann
2004-01-28