Prof. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 21. Dezember 2004
Christian Ehrhardt Blatt 8


Uni Logo



Allgemeine Informatik 3 (WS 2004/2005)


Abgabetermin 11.01.2004

Ein Taschenrechner (10 Punkte)

Auf der Thales (und auf den meisten anderen unserer SUNs) findet sich im Verzeichnis
/usr/local/bin/ ein Programm calc. Dieses Programm wäre im Prinzip in der Lage, arithmetische Ausdrücke wie etwa $3*4+5*(7-2+6/(2*3))$ korrekt auszuwerten. Allerdings greift es auf eine Shared-Library libcalc.so zu, die leider verloren gegangen ist. Die Headerdatei, die zu der Shared-Library gehört, ist aber noch vorhanden und sieht wie folgt aus:

#ifndef CALC_H
#define CALC_H

int domul (int, int);
int dodiv (int, int);
int doadd (int, int);
int dosub (int, int);

#endif

Eure Aufgabe ist es, eine passende Shared-Library zu implementieren, die Multiplikation, Division, Addition und Subtraktion zweier Zahlen Modulo 2005 durchführt. Bei der Division gibt es Fälle, in denen dies nicht möglich ist, diese Fälle sollen erkannt werden und das Programm soll sofort (z.B. mit Hilfe von assert()) beendet werden. Die Funktionen domul, dodiv, doadd und dosub sollen beliebige Integerzahlen als Parameter verarbeiten können, der Rückgabewert soll aber immer zwischen $0$ und $2004$ (einschließlich) liegen.
Für alle, die nicht auf unseren SUNs arbeiten, steht calc.c, der Quellcode von
/usr/local/bin/calc, auf der Homepage der Vorlesung zum Download bereit. Nachdem Eure Shared-Library (unter dem Namen libcalc.so) erstellt wurde, kann calc.c im selben Verzeichnis wie folgt erzeugt werden:

    gcc -Wall -o calc calc.c -L. -lcalc



Christian Ehrhardt 2004-12-21