Pagini recente » Cod sursa (job #127489) | Cod sursa (job #613262) | Cod sursa (job #203268) | Cod sursa (job #2755397) | Cod sursa (job #567314)
Cod sursa(job #567314)
#include<fstream>
using namespace std;
char v[100001],st[100001],expr[100001];
long y[100001];
int vf,nr;
void rezultat()
{int i,k=0,m=-1;
for(i=0;expr[i];i++)
{k=0;
if(isdigit(expr[i]))
{while(isdigit(expr[i]))
v[k]=expr[i],k++,i++;
v[k]=0,k++;
y[++m]=atoi(v);
}
else
switch(expr[i])
{case '+': y[m-1]=y[m-1]+y[m--];break;
case '-': y[m-1]=y[m-1]-y[m--];break;
case '*': y[m-1]=y[m-1]*y[m--];break;
case '/': y[m-1]=y[m-1]/y[m--];break;
}
}
}
char pop()
{if(nr>=1) {nr--;return st[nr];}
return 0;
}
void push(char c)
{st[nr]=c;nr++;
}
void evaluare()
{int i,n;
char c;
n=strlen(v);
for(i=0;v[i];i++)
{if(isdigit(v[i])) {
while(isdigit(v[i]))
{expr[vf]=v[i];
vf++,i++;
}
expr[vf]='.',vf++;}
switch(v[i])
{case '(':push(v[i]);break;
case ')':while((c=pop())!='(') expr[vf++]=c;break;
case '/':
case '*':if(strchr("(+-",st[nr-1])||(nr==0)) push(v[i]);
else
if(strchr("*/",st[nr-1])){expr[nr]=pop();nr++;i--;}break;
case '+':
case '-':if(st[nr-1]=='('||nr==0) push(v[i]);
else expr[vf]=pop(),vf++,i--;break;
}
}
while((c=pop())!=0) expr[vf]=c,vf++;
expr[vf]=0,vf++;
}
int main()
{
ifstream in("evaluare.in");
in.get(v,100000);
in.close();
evaluare();
rezultat();
ofstream out("evaluare.out");
out<<y[0]<<'\n';
out.close();
return 0;
}