Pagini recente » Cod sursa (job #1603388) | Cod sursa (job #2673346) | Cod sursa (job #1443751) | Cod sursa (job #2260948) | Cod sursa (job #1799672)
#include <fstream>
#include <string>
using namespace std;
int expression(const string& expr, int& ptr);
int factor(const string& expr, int& ptr);
int term(const string& expr, int& ptr);
int expression(const string& expr, int& ptr) {
int value = term(expr, ptr);
while (ptr < int(expr.length()) && (expr[ptr] == '+' || expr[ptr] == '-')) {
const char op = expr[ptr++];
value = (op == '+') ? (value + term(expr, ptr)) : (value - term(expr, ptr));
}
return value;
}
int term(const string& expr, int& ptr) {
int value = factor(expr, ptr);
while (ptr < int(expr.length()) && (expr[ptr] == '*' || expr[ptr] == '/')) {
const char op = expr[ptr++];
value = (op == '*') ? (value * factor(expr, ptr)) : (value / factor(expr, ptr));
}
return value;
}
int factor(const string& expr, int& ptr) {
int value;
if (expr[ptr] == '(') {
++ptr;
value = expression(expr, ptr);
++ptr;
} else {
int sign = 1;
if (expr[ptr] == '-') {
sign = -1;
++ptr;
}
value = 0;
for (; ptr < int(expr.length()) && '0' <= expr[ptr] && expr[ptr] <= '9'; ++ptr) {
value = 10 * value + (expr[ptr] - '0');
}
value *= sign;
}
return value;
}
int evaluate(const string& expr) {
int ptr = 0;
return expression(expr, ptr);
}
int main() {
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string expr;
in >> expr;
out << evaluate(expr) << "\n";
in.close();
out.close();
return 0;
}