Pagini recente » Cod sursa (job #26647) | Cod sursa (job #159338) | Cod sursa (job #2424723) | Cod sursa (job #612456) | Cod sursa (job #567329)
Cod sursa(job #567329)
#include<fstream>
using namespace std;
char v[100101],st[100101],expr[100101];
long y[100101];
int vf,nr=-1;
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>=0) return st[nr--];
return 0;
}
void push(char c)
{st[++nr]=c;
}
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])||(nr==-1)) push(v[i]);
else
if(strchr("*/",st[nr])){expr[nr]=pop();nr++;i--;}break;
case '+':
case '-':if(st[nr]=='('||nr==-1) 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;
}