Pagini recente » Cod sursa (job #2375404) | Cod sursa (job #2450613) | Cod sursa (job #122103) | Cod sursa (job #2603438) | Cod sursa (job #2371541)
#include <iostream>
#include <fstream>
#include<cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int c,k,p,fp[100];
char a,st[100],text[100000];
int eval(char x)
{
if(x=='+'||x=='-') return 1;
else if (x=='*'||x=='/') return 2;
}
int op(int p)
{
if(st[p]=='+')fp[++k]=-4;
else if(st[p]=='-')fp[++k]=-3;
else if(st[p]=='*')fp[++k]=-2;
else fp[++k]=-1;
}
int main()
{
//fin>>c;fin.get();
fin.get(text,100000);
for(int l=0;l<strlen(text);l++)
{
a=text[l];
if(isdigit(a))
{if(isdigit(text[l-1]))fp[k]=fp[k]*10+(int)a-48;
else fp[++k]=(int)a-48;}
else if(a==')')
{
while(st[p]!='(')op(p--);
p--;
}
else if(a=='(') st[++p]=a;
else if(eval(a)<=eval(st[p]))
{while(eval(a)<=eval(st[p])&&st[p]!='('&&p>0)op(p--);st[++p]=a;}
else st[++p]=a;
}
while(p!=0) {if(st[p]=='+')fp[++k]=-4;
else if(st[p]=='-')fp[++k]=-3;
else if(st[p]=='*')fp[++k]=-2;
else fp[++k]=-1; p--;}
//for(int l=1;l<=k;l++) cout<<fp[l]<<" ";cout<<'\n';
int r=1;
while(k>1)
{while(fp[r+1]>0) r++;
if(fp[r+1]==-1)fp[r-1]/=fp[r];
else if(fp[r+1]==-2)fp[r-1]*=fp[r];
else if(fp[r+1]==-3)fp[r-1]-=fp[r];
else fp[r-1]+=fp[r];
for(int i=r;i<=k-2;i++)fp[i]=fp[i+2];
k-=2;r=2;
//for(int l=1;l<=k;l++) cout<<fp[l]<<" ";cout<<'\n';
}
fout<<fp[1];
return 0;
}