Algorithmen und Programmierung II
|
SS 2004
|
Zusatzblatt 2
|
Abgabe:
14.7.2004
|
Aufgabe
1 (4 Punkte)
In der Vorlesung wurde das
8-Damen-Problem vorgestellt. In dem Algorithmus wird eine Methode boolean
bedroht(int
zeile, int spalte) verwendet, die eine Aussage darüber
trifft, ob ein gegebenes Feld des Schachbretts, unter
Berücksichtigung aller bisher platzierten Damen, bedroht ist.
Ergänzen Sie die folgende Spezifikation von bedroht um
die Beschreibung des Ergebnisses. Die Spezifikation soll
formalsprachlich mittels Haskell erfolgen.
/**
* Voraussetzung: -- (keine)
* Effekt: --
* Ergebnis: ...
*/
boolean bedroht(int zeile, int spalte)
Hinweise: Bei der
Repräsentation des Schachbretts als boolean-Feld werden
Elemente mit Index 0 ignoriert.
Aufgabe 2 (8 Punkte)
Für einfache Ausdrücke lässt sich ein Parser relativ
einfach in Anlehnung an die Struktur der zugrunde liegenden Grammatik
entwickeln. Vorgegeben sei beispielsweise die folgende Grammatik:
expression = term { addOp term }
addOp = + | -
term = factor { mulOp factor }
mulOp = * | /
factor = number | (expression)
Die Auswertung eines Ausdrucks (expression) wird durch die Methode expression
im vorgegebenen Programmfragment geleistet.
Die Eingabe darf keine Leerzeichen enthalten und muss einen Punkt als
Endmarkierung enthalten, z.B. "(31+219)/25.".
Der Parser soll erweitert werden, um auch den Exponentiationsoperator ^
zu unterstützen. Beispiel:
Eingabe: (100-98)^10*2.
Ausgabe: 2048
a) Modifizieren Sie die oben stehenden Grammatik entsprechend und
ergänzen Sie die fehlende Regel für number.
Beschränken Sie sich auf positive ganze Zahlen.
b) Vervollständigen bzw. modifizieren Sie das gegebene
Programmfragment, so dass ein Ausdruck gemäß der neuen
Grammatik von der Kommandozeile eingelesen und das Ergebnis (bzw. eine
Fehlermeldung) ausgegeben wird.
Hinweis: Der Exponentiationsoperator soll, entsprechend der
üblichen Konvention, rechtsassoziativ sein (2^3^2 = 2^(3^2) = 512).