FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Taschenrechnergrammatik in C++ nachvollziehbar?

Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-09 18:15
Anonymer User
Bei der folgenden Grammtik für einen Taschenrechner in C++
weiss ich nicht warum er Ausdrücke auswerten kann, die weder mit + noch - anfangen.

D.h. bei einer Eingabe von 3-5 -wie merkt er sich die 3?

Der Quellcode:
#include #include using namespace std; long zahl(char&); long faktor(char&); long summand(char&); long ausdruck(char&); int main() { char ch; while(true) { cout>"; cin.get(ch); if(ch != 'e'){ cout << ausdruck(ch); cout << "\n mit e for end abbrechen.."; } else break; } } long zahl(char& c){ long z = 0; while(isdigit(c)){ z = 10*z + static_cast(c-'0'); cin.get(c); } return z; } long faktor(char& c) { long f; if( c == '('){ cin.get(c); f= ausdruck(c); if(c != ')' ) cout << "Rechte Klammer fehlt!\n"; else cin.get(c); } else f = zahl(c); return f; } long summand(char& c){ long s = faktor(c); while(c== '*' || c == '/') if(c == '*'){ cin.get(c); s *= faktor(c); } else { cin.get(c); s /= faktor(c); } return s; } long ausdruck(char& c) { long a; if(c == '-') { cin.get(c); a = -summand(c); } else { if(c == '+') cin.get(c); a = summand(c); } while(c == '+' || c == '-') if(c == '+'){ cin.get(c); a += summand(c); } else { cin.get(c); a -= summand(c); } return a; }


Re: Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-09 18:28
georg
Das Problem liegt vermutlich in der etwas irreführenden
Einrückung des ersten else-Blocks in 'ausdruck'. Beachte,
dass das 'a=summand©' auch dann ausgeführt wird, wenn
c nicht gleich '+' ist.

Re: Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-09 18:31
Anonymer User
ach so - stimmt
danke mann, hab echt lange darüber gebrütet… [img]http://www.fb18.de/gfx/25.gif[/img]

Re: Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-12 00:36
low_level
ach so - stimmt
danke mann, hab echt lange darüber gebrütet… [img]http://www.fb18.de/gfx/25.gif[/img]

Und? Was hast Du getan, um solche Fehler in Zukunft zu vermeiden?

Re: Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-12 11:57
Anonymer User
ach so - stimmt
danke mann, hab echt lange darüber gebrütet… [img]http://www.fb18.de/gfx/25.gif[/img]

Und? Was hast Du getan, um solche Fehler in Zukunft zu vermeiden?

Warum? Also wie der Code von mir oben gepostet ist, hab ich ihn ja nicht vor Augen - haben oben wirklich nur die Code-Umgebung vergessen…

Ach so, jetzt weiss ich was dui meinst - ok, ich werde alle Rechner dieser Welt zerstören und alle IT-Heinis k*ll*n - dann kann niemand mehr schlechten Code erstellen [img]http://www.fb18.de/gfx/10.gif[/img]

Re: Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-12 16:43
georg
Ich glaube er meinte eher, dass du die 'a=summand©;'-
Zeile nicht hättest einrücken sollen.

Re: Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-12 16:54
Anonymer User
Oder kein 'if' ohne geschweifte Klammern verwenden? Lint benutzen?

LEIFer

Re: Taschenrechnergrammatik in C++ nachvollziehbar? 2005-12-12 23:18
asdf
Oder den compilierten Code schrittweise im Debugger durchlaufen lassen?