Rechenaufgabe als String auswerten



  • Ich sitz hier grad vor einem Problem. Ich einer Aufgabe steht ich soll ein Programm schreiben, welches die 4 Grundrechenarten eines einfachen Taschenrechners nachbilden soll.
    Der Benutzer gibt die Aufgabe als String ein (Beispiel: 2+4*3/5+7+8-2*5).

    Ich habe keine Ahnung wie mein Programm die Rechnung auswerten soll, da ich relativ neu in diesem Gebiet bin.
    Ich hoffe mir kann jemand helfen.



  • Viel Spaß beim Bauen eines Formelinterpreters.
    Bist du dir sicher, dass nicht ein interaktiver TR gemeint ist, der Werte und Operation einzeln abfragt?



  • Lies mal das:
    http://en.wikipedia.org/wiki/Recursive_descent_parser

    Für solche Ausdrücke sollten die drei Regeln/Funktionen expression, term und factor ausreichen.



  • Ich habe hier einen einfachen Formelinterpreter für die 4 Grundrechenarten, ohne Klammerung und sonstige Extras, für den float-Wertebereich und max. 20 Operationen:

    float formel(const char *s)
    {
      int n,i=0;
      float f,l[41]={0};
      char c[2];
    
      if( sscanf(s,"%f%n",&f,&n) )
      {
        *l=f;
        while( 2==sscanf(s+=n,"%1s%f%n",c,&f,&n) && strchr("+-*/",*c) )
        {
          l[++i]=*c;
          l[++i]=f;
        }
        while(i)
        {
          int x=-1;
          do if( (*c=l[x+=2])=='*'||*c=='/' ) break; while( x<i );
          if(x<i)
            l[x-1]=*c=='*'?l[x-1]*l[x+1]:l[x-1]/l[x+1];
          else
            *l=(*c=l[1]=='+')?*l+l[2]:*l-l[2],x=1;
          memmove(&l[x],&l[x+2],(i-x+1)*sizeof*l);
          i-=2;
        }
      }
      return *l;
    }
    

Anmelden zum Antworten