Pagini recente » Cod sursa (job #2175910) | Cod sursa (job #3338062) | Cod sursa (job #1651077) | Cod sursa (job #191191) | Cod sursa (job #1939668)
#include <fstream>
#include <cstring>
#define linemax 100005
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int n, pointer;
char line[linemax], curchar;
int suma(int,char);
int factor(int);
int produs(int,char);
void readnextchar() {
curchar = line[pointer];
pointer++;
}
int suma(int answer, char op) {
int r = produs(1,'*');
if(op == '+')
answer+=r;
else
answer-=r;
if(curchar == '+'){
readnextchar();
return suma(answer, '+');
}else if(curchar == '-'){
readnextchar();
return suma(answer, '-');
}else
return answer;
}
int factor(int result) {
if(curchar == '(') {
readnextchar();
result = suma(0,'+');
readnextchar();
return result;
} else if('0' <= curchar && curchar <= '9'){
result = result * 10 + (curchar - '0');
readnextchar();
return factor(result);
} else
return result;
}
int produs(int answer, char op) {
int r = factor(0);
if(op == '*')
answer *= r;
else
answer /= r;
if(curchar == '*') {
readnextchar();
return produs(answer, '*');
} else if(curchar == '/'){
readnextchar();
return produs(answer, '/');
} else
return answer;
}
int main() {
fin.getline(line, linemax);
readnextchar();
fout<<suma(0,'+');
return 0;
}