Pagini recente » Cod sursa (job #97629) | Cod sursa (job #1970721) | Cod sursa (job #1079007) | Cod sursa (job #2184755) | Cod sursa (job #1174030)
#include <fstream>
#include <string>
using namespace std;
string Expression;
int Parser;
inline int GetValue() {
int sign = 1, value = 0;
if (Parser < int(Expression.length()) && Expression[Parser] == '-') {
sign = -1;
++Parser;
}
while (Parser < int(Expression.length()) && '0' <= Expression[Parser] && Expression[Parser] <= '9') {
value = value * 10 + int(Expression[Parser] - '0');
++Parser;
}
return value * sign;
}
int GetFactor();
int GetTerm();
int GetExpression();
int GetFactor() {
if (Expression[Parser] == '(') {
++Parser;
int value = GetExpression();
++Parser;
return value;
}
return GetValue();
}
int GetTerm() {
int factor = GetFactor();
while (Parser < int(Expression.length()) && (Expression[Parser] == '*' || Expression[Parser] == '/')) {
if (Expression[Parser] == '*') {
++Parser;
factor *= GetFactor();
} else if (Expression[Parser] == '/') {
++Parser;
factor /= GetFactor();
}
}
return factor;
}
int GetExpression() {
int term = GetTerm();
while (Parser < int(Expression.length()) && (Expression[Parser] == '+' || Expression[Parser] == '-')) {
if (Expression[Parser] == '+') {
++Parser;
term += GetTerm();
} else if (Expression[Parser] == '-') {
++Parser;
term -= GetTerm();
}
}
return term;
}
int main() {
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
cin >> Expression;
Parser = 0;
cout << GetExpression() << "\n";
cin.close();
cout.close();
return 0;
}