Seite 1 von 1

python richtig dafür

Verfasst: Montag 22. März 2004, 14:40
von TripleH
Hallo! ich habe folgende Aufgabenstellung:

Das Ergebnis einer Projektarbeit besteht aus einem Projektbericht ( ca. 20 Seiten ) und einer beiliegenden CD, die die entsprechenden Programme in Quellcode und Objektcode ( lauffähiges Programm ) enthält. Der Projektbericht erläutert die Arbeitsteilung innerhalb der Gruppe, die Problemlösung der Aufgaben ( mit Hintergrundinformationen und Quellenangaben ) sowie eine Erläuterung der Programme ( Kurzdokumentation ).


I. Schreiben Sie ein Programm „Auswertung“, das zulässige, geklammerte Ausdrücke einliest und berechnet, wobei zulässige Ausdrücke wie folgt aufgebaut sind:

Die Eingabewerte sind ganzzahlig und der Ausdruck wird vollständig übergeben, d.h. als vollständige Zeile oder als Datei. Als Operatoren können + (Addition), - (Subtraktion), * (Multiplikation), / (ganzzahlige Division ohne Rest), und **2 ( Quadrierung ) auftreten, wobei die Operanden auch mathematisch geklammert sein können ( Klammersymbole ( oder ) ). Als Trennzeichen fungiert das Leerzeichen; eine Folge von Trennzeichen ist einem einzelnen Trennzeichen gleichwertig. Vor und hinter jedem Operator darf ein Trennzeichen stehen, braucht es aber nicht. Ein Zeilenende-Zeichen beendet einen Ausdruck.

Das Programm erfüllt folgende Anforderungen/Funktionen:

Lesen und Berechnung werden wiederholt, bis das Dateiende-Zeichen erreicht wird. Die Umleitung der Eingabe in eine Datei ist möglich, d.h. Dateien mit zulässig geklammerten Ausdrücken können zur Auswertung an das Programm übergeben werden.
Das Programm sieht (mindestens) für folgende Fälle verschiedene Fehlermeldungen vor:
Unzulässige Eingaben ( Aufgabe: welche unzulässigen Eingaben können entstehen ??? ).
Bereichsüberschreitungen beim Rechnen.


II. Schreiben Sie ein Programm „Prior“, das wie das Programm Auswertung zulässige, geklammerte Ausdrücke einliest und berechnet, was aber zusätzlich die folgende Klammereinsparungsregel realisiert:

Man ordnet den Operatoren folgende Prioritäten zu:
**2 geht vor * , /
* , / geht vor + , -

Alle anderen Rahmenbedingungen gelten analog zu Programm „Auswertung“, insbesondere Fehlermeldungen.
III. Schreiben Sie ein Programm „UPN“, das zulässige, geklammerte Ausdrücke einliest und diesen Ausdruck in umgekehrte polnische Notation ( UPN ) übersetzt.

Die Eingabewerte können ganze Zahlen und auch Buchstaben ( keine Umlaute ) sein. Ein Ausdruck wird vollständig übergeben, d.h. als vollständige Zeile oder als Datei.
Als Operatoren können + (Addition), - (Subtraktion), * (Multiplikation), und / (Division) auftreten, wobei die Operanden auch mathematisch geklammert sein können ( Klammersymbol ( oder ) ). Als Trennzeichen fungiert das Leerzeichen; eine Folge von Trennzeichen ist einem einzelnen Trennzeichen gleichwertig. Vor und hinter jedem Operator darf ein Trennzeichen stehen, braucht es aber nicht. Ein Zeilenende-Zeichen beendet einen Ausdruck. Alle anderen Rahmenbedingungen gelten analog zu Programm „Auswertung“, insbesondere Fehlermeldungen.


Meine Frage ist jetzt ob Python die richtige sprache dafür ist um dies umzusetzen oder eine andere ratsaamer wäre.

Vielen Dank im voraus.

Bis danni

Verfasst: Montag 22. März 2004, 15:29
von Dookie
Hi TripleH,

dank der sehr guten Unterstützung von Stringsbearbeitungsfunktionen, ist Python sicher gut dafür geeignet.
Ich habe mal, vor ein paar Jahren auf dem Amiga mit Modula2, etwas ähnliches Programmiert. Dabei ging es darum in einem Eingabefeld für numerische Werte auch die Eingabe vonFormeln, mit Klammerung und Punkt vor Strichrechnung, zu ermöglichen.
Ich hab das damals nach folgendem Prinzip realisiert:

Code: Alles auswählen

  Funktion berechne_formel(zeichenkette):
    zeichenkette = zeichenkette.strip()
    solange der_ganze_Ausdruck_ist_geklammert(zeichenkette):
        äussere Klammern entfernen # zeichenkette = zeichenkette[1:-1]
    operator, position = suche_kleinsten_Operator(zeichenkette)
    wenn operator gefunden:
        a = berechne_formel(zeichenkette[:position])
        b = berechne_formel(zeichenkette[position+1:])
        ergebnis = berechne(a,operator,b)
    sonst:
        ergebnis = Fliesskommazahl(zeichenkette)
    return ergebnis
Dazu musst Du dann noch die Funktionen:
der_ganze_Ausdruck_ist_geklammert(zeichenkette)
suche_kleinsten_Operator(zeichenkette)
berechne(zeichenkette, operator_zeichen, zeichenkette)
Fliesskommazahl(zeichenkette)
erstellen.


Gruß

Dookie