Pagini recente » Cod sursa (job #595608) | Cod sursa (job #3263981) | Cod sursa (job #545179) | Cod sursa (job #2116059) | Cod sursa (job #1478810)
#include <cstdio>
#include <cstring>
#define IN_FILE_NAME "evaluare.in"
#define OUT_FILE_NAME "evaluare.out"
#define NMAX 100000
FILE *in, *out;
char E[NMAX];
int ptr;
int lenE;
void read() {
fscanf(in, "%s", E);
lenE = strlen(E);
}
int sum();
int res();
int term();
int term() {
int res;
if(E[ptr] == '(') {
ptr ++;
res = sum();
ptr ++;
} else {
res = 0;
while(E[ptr] >= '0' && E[ptr] <= '9') {
res = res*10 + E[ptr] - '0';
ptr++;
}
}
return res;
}
int prod() {
int res = term();
while(ptr < lenE) {
if (E[ptr] == '*') {
ptr ++;
res *= term();
} else if (E[ptr] == '/') {
ptr ++;
res /= term();
} else {
return res;
}
}
return res;
}
int sum() {
int res = prod();
while(ptr < lenE) {
if (E[ptr] == '+') {
ptr ++;
res += prod();
} else if (E[ptr] == '-') {
ptr ++;
res -= prod();
} else {
return res;
}
}
return res;
}
int main() {
in = fopen(IN_FILE_NAME, "r");
out = fopen(OUT_FILE_NAME, "w");
read();
fprintf(out, "%d", sum());
fclose(in);
fclose(out);
return 0;
}