python richtig dafür

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

python richtig dafür

Beitragvon TripleH » Montag 22. März 2004, 14:40

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 22. März 2004, 15:29

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

Wer ist online?

Mitglieder in diesem Forum: r.barrios, Tholo