Infix -> Postfix Umwandlungsproblem



  • Hallo

    Habe hier folgenden Ausdruck in Infix stehen : 3+2*(4 +1*(2+1))
    Und soll diesen in Postfix umwandeln und dabei auch angeben was wann am Stack liegt usw.

    Ich habe es nach den folgenden 4 Regeln durchgeführt :

    1. Operand: Ausgeben
    2. Operator: Operatoren mit gleicher oder höherer Priorität die am Stapel liegen ausgeben. Dann gegenwärtigen Operatoren auf Stapel legen.
    3. linke Klammer: Auf Stapel legen
    4. rechte Klammer: Alle Operatoren am Stapel nacheinander ausgegeben bis „(“ getroffen wird „(“ löschen. Am Ende die restlichen Operatoren am Stapel ausgeben.

    Komme damit allerdings nicht auf das Richtige Ergebnis.
    Gemacht hab ich folgendes :

    1. Operand 3 Ausgeben
    2. Operator + auf Stack legen
    3. Operand 2 Ausgeben
    4. * auf Stack legen ( Nun + ausgeben laut Regel 2 )
    5. Klammer ( auf Stack legen ( Ist ( ein gleichwertier Operator wie * ?? )
    6. 4 Ausgeben
    7. + Auf Stack
    8. 1 Ausgeben
    9. * Auf Stack ( + Ausgeben )
    10. Klammer (
    11. 2 Ausgeben
    12. + Auf Stack legen
    13. 1 Ausgeben
    14. Klammer ) ( Alles bis Klammer "(" ausgeben )
    14. Klammer ) ( Alles bis Klammer "(" ausgeben )

    Heraus bekomme ich dann das :

    32+41+21+** was jedoch irgendwie komplett falsch ist.

    Es sollte : 324121+++ sein.

    Verstehe aber nicht wie man auf dieses Ergenbnis kommen soll wenn man die 4 Regeln anwendet. Alle schon am Anfang mit 3 und 2 müsste ja danach ein + kommen laut Regel 2 wenn man das * auf den Stack legt. ??



  • 3+2*(4 +1*(2+1)) 
    
            2 1     +
          1 2 1    *+ == 1 3  *
        4 1 2 1   +*+ == 4 3  +
      2 4 1 2 1  *+*+ == 2 7  *
    3 2 4 1 2 1 +*+*+ == 3 14 +
                      ==   17
    

    4. * auf Stack legen ( Nun + ausgeben laut Regel 2 )

    das ist doch eigentlich falsch, da * eine höhere präzedenz als + hat, oder 😕



  • Deine Regeln stimmen. Habs ausprobiert, wenn man die Regeln richtig anwendet, kommt man aufs richtige Ergebnis.

    saabzero schrieb:

    1. Operand 3 Ausgeben
    2. Operator + auf Stack legen
    3. Operand 2 Ausgeben

    Soweit richtig.

    4. * auf Stack legen ( Nun + ausgeben laut Regel 2 )

    Hier sind gleich 2 Fehler in einer Zeile. Wenn überhaupt, müsstest Du ERST das + ausgeben, dann das * auf den Stack legen. (Sonst kommst Du ja an das + gar nicht mehr ran). Aber auch das ist falsch: Das * hat eine höhere Priorität als das +.

    5. Klammer ( auf Stack legen ( Ist ( ein gleichwertier Operator wie * ?? )

    ( ist überhaupt kein Operator, also stellt sich die Frage hier nicht. Bei Regel 4 werden nur Operatoren ausgegeben, also niemals ein (. Wenn ( oben auf dem Stack liegt, bricht Regel 4 ab.

    Versuch den Rest jetzt mal alleine weiter, das kommt alles so hin, wie es soll 🙂

    @_--: Was hat Deine Antwort mit der Frage zu tun???



  • SG1 schrieb:

    @_--: Was hat Deine Antwort mit der Frage zu tun???

    ja, schon gut! habs doch schon editiert.



  • Alles klar habs jetzt hinbekommen 🙂

    Habe blöderweise nicht dran gedacht, dass * natürlich eine höhere Priörität hat als + , und ich + somit gar nicht ausgeben darf bzw. eben erst zum Schluss dann.

    Danke für die Hilfe.

    gruß.


Anmelden zum Antworten