Pagini recente » Cod sursa (job #281822) | Cod sursa (job #1231996) | Cod sursa (job #2749008) | Cod sursa (job #1943972) | Cod sursa (job #1252006)
#include<iostream>
#include<fstream>
using namespace std;
char s[100003], *p;
//eval calculeaza valoarea unei adunari sau scaderi
//termen calculeaza valoarea unui sir de inmultiri si impartiri
//factor evalueaza parantezele
int eval();
int termen();
int factor();
int main(){
ifstream fin("evaluare.in");
fin.getline(s, 100003);
fin.close();
p = s;
int n;
ofstream fout("evaluare.out");
n = eval();
fout << n;
fout.close();
return 0;
}
int eval(){
int rezultat;
rezultat = termen();
while (*p == '+' || *p == '-'){
switch (*p){
case '+':{
++p;
rezultat += termen();
break;
}
case '-':{
++p;
rezultat -= termen();
break;
}
}
}
return rezultat;
}
int termen(){
int rezultat;
rezultat = factor();
while (*p == '*' || *p == '/'){
switch (*p){
case '*':{
++p;
rezultat *= factor();
break;
}
case '/':{
++p;
rezultat /= factor();
break;
}
}
}
return rezultat;
}
int factor(){
int rezultat;
rezultat = 0;
if (*p == '('){
++p;
rezultat = eval();
++p;
}
else {
while ('0' <= *p && *p <= 9){
rezultat *= 10;
rezultat += (int)*p - '0';
++p;
}
}
return rezultat;
}