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:
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;
}