Pagini recente » Cod sursa (job #2474717) | Cod sursa (job #2773783) | Cod sursa (job #597896) | Cod sursa (job #3272177) | Cod sursa (job #594236)
Cod sursa(job #594236)
#include <fstream>
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <cstdlib>
using namespace std;
string a;
double s2r (int left,int right)
{
int i,n=0;
for (i=left; i<=right; i++)
{
n=n*10+a[i]-'0';
}
return n;
}
double eval(int left, int right)
{
int p1 =-1, p2 =-1, p3 =-1, p4 =-1, pp =0;
for (int i = left; i <= right; i++)
{
if (a[i]=='(')
{
pp++;
} else if (a[i]==')')
{
pp--;
} else if (pp==0)
{
if (a[i]=='+') p1=i;
if (a[i]=='-') p2=i;
if (a[i]=='*') p3=i;
if (a[i]=='/') p4=i;
}
}
if (p1>p2)
{
return eval(left,p1-1)+eval(p1+1,right);
} else if (p2>0)
{
return eval(left,p2-1)-eval(p2+1,right);
} else if (p3>p4)
{
return eval(left,p3-1)*eval(p3+1,right);
} else if (p4>0)
{
return eval(left,p4-1)/eval(p4+1,right);
} else if (a[left]=='(')
{
return eval(left+1,right-1);
} else return s2r(left,right);
}
int main ()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f >> a;
g << eval(0,a.length()-1);
return 0;
}