Pagini recente » Cod sursa (job #1086146) | Cod sursa (job #359585) | Cod sursa (job #79956) | Cod sursa (job #2080519) | Cod sursa (job #1556153)
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char exp[100005];
int solve(int &p);
int getnr(int &p);
int fact(int &p);
int term(int &p);
int main() {
f >> exp;
int pos = 0;
g << solve( pos);
return 0;
}
int solve(int &p) {
int t1 = term(p);
while(exp[p] == '+' || exp[p] == '-') {
int semn;
if(exp[p] == '+') {
semn = 1;
}
else {
semn = -1;
}
++p;
int t2 = term(p);
t1 += semn * t2;
}
return t1;
}
int term(int &p) {
int f1 = fact(p);
while(exp[p] == '*' || exp[p] == '/') {
int semn;
if(exp[p] == '*') {
semn = 1;
}
else {
semn = -1;
}
++p;
int f2 = fact(p);
if(semn == 1) {
f1 *= f2;
}
else {
f1 /= f2;
}
}
return f1;
}
int fact(int &p) {
int rez;
if(exp[p] == '(') {
++p;
rez = solve(p);
++p;
}
else {
rez = getnr(p);
}
return rez;
}
int getnr(int &p) {
int sol = 0;
while(exp[p] >= '0' && exp[p] <= '9') {
sol = sol * 10 + exp[p] - '0';
++p;
}
return sol;
}