Pagini recente » Cod sursa (job #2938130) | Cod sursa (job #2392251) | Cod sursa (job #3001618) | Cod sursa (job #1314960) | Cod sursa (job #1494429)
#include<fstream>
#include<list>
#include<iterator>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
bool numar(char a)
{
if(a>='0'&&a<='9') return true;
return false;
}
int rez()
{
bool minus,impartire;
char a,operatie='+';
int b,total=0,curent=0;
while(!in.eof())
{
b=0,minus=false;
in>>a;
if(!in.eof()&&a=='-')
{
minus=true;
in>>a;
}
if(a=='(')
{
b=rez();
in>>a;
}
while(!in.eof()&&numar(a))
{
b*=10;
b+=a-'0';
in>>a;
}
curent=b;
while(!in.eof()&&(a=='*'||a=='/'))
{
b=0;
if(a=='/') impartire=true;
else impartire=false;
in>>a;
if(!in.eof()&&a=='-')
{
minus=!minus;
in>>a;
}
if(a=='(')
{
b=rez();
in>>a;
}
while(!in.eof()&&numar(a))
{
b*=10;
b+=a-'0';
in>>a;
}
if(impartire)
curent/=b;
else
curent*=b;
}
if((operatie=='+'&&!minus)||(operatie=='-'&&minus))
{
total+=curent;
curent=0;
}
if((operatie=='-'&&!minus)||(operatie=='+'&&minus))
{
total-=curent;
curent=0;
}
if(a=='+')
operatie='+';
else
operatie='-';
if(a==')') break;
}
return total;
}
int main()
{
out<<rez();
}