Pagini recente » Cod sursa (job #2322458) | Cod sursa (job #850048) | Cod sursa (job #41343) | Cod sursa (job #56265) | Cod sursa (job #1494428)
#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(a=='(')
{
b=rez();
in>>a;
}
if(!in.eof()&&a=='-')
{
minus=!minus;
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();
}