Algorithmen und Programmierung II


SS 2001 Hannes Federrath
Übung 7 Lars Knipping
Abgabe bis zum 28.06.01.

Aufgabe 1 (6 P.)

In der Vorlesung wurde erklärt wie man mit der Methode des rekursiven Abstiegs einen arithmetischen Ausdruck einlesen kann.

Eine Grammatik für arithmetische Ausdrücke mit den Operatoren +, -, *, /, die auch die Präzedenzen berücksichtig, ist:

expression = term { addop term }
term = factor { mulop factor }
factor = number | ( expression )
addop = + | -
mulop = * | /
number = digit { digit }
digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Implementiere einen Calculator (Taschenrechner), der von der Tastatur aus eingegebene arithmetische Ausdrücke zeilenweise einliest, unter Berücksichtigung der Operatorenpräzedenzen auswertet und das Ergebnis zurückliefert.

Bei nicht korrekt gebildeten arithmetischen Ausdrücken soll eine Fehlermeldung (z.B. "parse error") ausgegeben werden. Ob Ihr mit ints oder longs rechnet, bleibt euch überlassen.

Aufgabe 2 (6 P.)

Erweitere das hier verlinkte Rahmenprogramm durch überschreiben der Methode public void paint(Graphics g) (und ggf. durch Hinzufügen von Methoden, z.B. eine rekursive zur Behandlung de Fraktale) derart, daß das Programm eines der unten aufgeführten Fraktale zeichnet, und zwar in der Rekursionstiefe, die von der Kommandozeile aus eingelesen wurde.

Zum Rahmenprogramm siehe auch Einführung in die Fensterprogrammierung unter Java, Teil 1.

Hintergrund:

Der Begriff "Fraktal" bezieht sich auf die gebrochene Dimension einer fraktalen Figur (der Grenzwert der rekursiven Figur für Rekursionstiefe gegen unendlich) und wurde geprägt durch Benoit B. Mandelbrot. Die Dimension entspricht dem Exponenten, mit welchem die Ausdehnung einer Figur potenziert werden muss, um deren Volumen zu erhalten.