Postfix notation und eingabe von Operatoren



  • Hallo zusammen,

    ich bin neu hier und habe direkt schon eine Frage wie unverschämt 🤡, aber ich freue mich auf ein paar nette Diskussionen rund ums Thema C\C++.

    Zu meiner Frage. Ich habe die Aufgabe einen Postfix Rechner zu Programmieren, das habe ich auch soweit alles erledigt.

    Nun muss ich aber abfangen wenn der User z.b ++ anstatt nur einem + eingibt und dann eine Fehler meldung raus bringen leider weiß ich nicht wie man abfängt ob es nun ein Plus ist oder zwei.

    Also bsp:

    2 3 + <- das ist richtig weiter gehts im Programm

    2 3 ++ <- das ist falsch Programm abbruch.

    Das ganze habe ich in C++ geschrieben.

    Ich hoffe mir kann jemand weiterhelfen. Weil google bringt mich gerade überhaupt nicht weiter.



  • Grundansatz:

    • jede Zahl wird auf einen Stack gepackt
    • ein Operator holt die obersten Werte vom Stack, berechnet ihr Ergebnis und schreibt das Resultat zurück auf den Stack

    -->

    • wenn zu wenig Werte für den Operator vorhanden sind, kannst du einen Fehler melden
    • genauso bei einem unbekannten Operator


  • CStoll schrieb:

    Grundansatz:

    • jede Zahl wird auf einen Stack gepackt
    • ein Operator holt die obersten Werte vom Stack, berechnet ihr Ergebnis und schreibt das Resultat zurück auf den Stack

    -->

    • wenn zu wenig Werte für den Operator vorhanden sind, kannst du einen Fehler melden
    • genauso bei einem unbekannten Operator

    Ja das ist ja alles schön und gut und soweit bin ich ja auch aber wie bekomme ich denn nun raus ob es ++ oder + oder ******* oder * ist da liegt ja mein Problem der Rechner selber und er Stack laufen ja einwandfrei bis auf diese zwei abfang routinen.



  • Wenn du die einzelnen Elemente in einen String einliest, kannst du dann problemlos damit weiterarbeiten:

    string input;
    while(input!="=")
    {
      cin>>input;
      if(isdigit(input[0])
      {
        //wir haben (vermutlich) eine Zahl
        //-> Umwandeln und speichern
        //evt. Fehleingaben ala "12abs" abfangen
      }
      else
      {
        //wir haben keine Zahl -> also vermutlich ein Operator
        //mit der Liste der bekannten Operatoren vergleichen und auswerten
        //nicht in der Liste = Fehler
      }
    }
    


  • @Ctoll

    Danke für deine Hilfe ich habs jetzt verstanden.
    Ich habe nochmale eine anschließende Frage.

    Ist es eigentlich möglich in C++ bei der eingabe in der Konsole unter Linux nur die Tasten von 0-9 und + - * / zu erlauben. Also so das der Nutzer wirklich nicht viel Falsch machen kann????



  • Mit Standardmitteln nicht. Mit Systemmitteln kannst du die Tasten z.B. 'blind' abfragen (per getch()) und unerwünschte Eingaben einfach ignorieren - d.h. wenn der Nutzer z.B. auf 'x' drückt, bemerkt niemand etwas davon.


Anmelden zum Antworten