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_parserFür solche Ausdrücke sollten die drei Regeln/Funktionen
expression, term
undfactor
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; }