SAI || Wintersemester 1997/98 || Entwicklung objekt-orientierter Bibliotheken || Übungen

Übungen zu Entwicklung objekt-orientierter Bibliotheken
Blatt 1 (17. 10. - 24. 10. 1997)


Aufgabe 1 (5 Punkte)

Schreiben Sie ein Oberon-Programm, das alle Zahlen aus dem Wertebereich von SHORTINT ausgibt (eine Zahl pro Zeile).

Aufgabe 2 (5 Punkte)

Schreiben Sie ein Oberon-Programm, das die Standardeingabe liest und zählt, wie oft bestimmte Zeichen vorkommen. Es soll zum Schluß eine Meldung ausgeben, die besagt, wieviele Null-Bytes, wieviele alphanumerische Zeichen (Buchstaben und Ziffern), wieviele Klammern (runde, eckige oder geschweifte) und wieviele sonstige Zeichen enthalten waren.

Hinweis: Nach Read.Char ist Streams.stdin.count entweder 1 oder 0, je nach dem, ob Lesen geklappt hat oder nicht. Mit Streams.stdin.eof und Streams.stdin.error könnte man im letzteren Fall unterscheiden, woran es gelegen hat. Für diese Aufgabe spielt das allerdings keine Rolle.

Aufgabe 3 (10 Punkte)

Gegeben sei folgende Schnittstelle:
DEFINITION Rational;

   TYPE
      Number =
         RECORD
            num: LONGINT;               (* numerator *)
            den: LONGINT;               (* denominator, > 0 *)
         END;

   PROCEDURE Add(op1, op2: Number; VAR result: Number): BOOLEAN;

   PROCEDURE Sub(op1, op2: Number; VAR result: Number): BOOLEAN;

   PROCEDURE Mul(op1, op2: Number; VAR result: Number): BOOLEAN;

   PROCEDURE Div(op1, op2: Number; VAR result: Number): BOOLEAN;

   PROCEDURE Cmp(op1, op2: Number): INTEGER;
   (* return -1, 0, 1, if op1 is less than, equal, or greater than op2 *)

END Rational.
Sie beschreibt ein Modul für das Rechnen mit einfachen Brüchen. (Für die Oberon-Bibliothek würde man dieses Modul anders formulieren, aber es geht zunächst nur um die Programmiersprache.) Für jede der vier Grundrechenarten gibt es eine Funktion, die TRUE liefern soll, wenn die Operation ausgeführt werden konnte, und FALSE bei Überlauf oder Division durch Null.

Implementieren Sie dieses Modul. Auf alle Überlauftests dürfen Sie vorerst verzichten. Verwenden Sie zum Kürzen von Brüchen das Modul für den größten gemeinsamen Teiler aus den Übungen.

Schreiben Sie ein weiteres Modul zum Testen Ihrer Implementierung. Es braucht nicht mehr zu können, als vier ganze Zahlen einzulesen, die als Zähler und Nenner von zwei Brüchen interpretiert werden, deren Summe, Differenz, Produkt, Quotient und Vergleichsresultat auszugeben ist.

Erzeugen Sie ein Makefile, um Ihre Module zu übersetzen und zu einem Testprogramm zusammenzubinden.

Hinweise:

Schicken Sie Ihre Lösungen bis zum Abgabetermin am Freitag, dem 24. Oktober 1997, 14.00 Uhr mit folgendem Kommando an den Übungsleiter:
abgabe oolib *.od *.om Makefile
Aus den Kommentaren in Ihren Quellen soll hervorgehen, um welche Aufgabe es sich jeweils handelt und für wen sie gewertet werden soll (maximal drei Personen je Arbeitsgruppe). Jedes Mitglied einer Arbeitsgruppe sollte in der Lage sein, Fragen zur eingereichten Lösung zu beantworten.

Weitere Hinweise zur Vorlesung und zu den Übungen finden Sie im WWW unter "http://www.mathematik.uni-ulm.de/sai/ws97/oolib/" . Die Beispielprogramme können Sie sich aus den Verzeichnissen unter "/www/thales/ftp/pub/vorlesungen/ws97/oolib/zb" holen.


SAI || Wintersemester 1997/98 || Entwicklung objekt-orientierter Bibliotheken || Übungen

Martin Hasch, Oktober 1997