Pagini recente » Cod sursa (job #155748) | Cod sursa (job #2766) | Cod sursa (job #1998210) | Cod sursa (job #3130143) | Cod sursa (job #153440)
Cod sursa(job #153440)
#include<fstream.h>
#include<string.h>
char a[100010],c,b[100010];
long vb1,i,nr,n,vb,vx,nrx[100010],vn,j;
long x[100010];
ifstream f("evaluare.in");
ofstream g("evaluare.out");
void plus_minus()
{
while(b[vb-1]=='*' || b[vb-1]=='/')
{
while(b[vb-1]=='*')
{
x[vx-2]=x[vx-2]*x[vx-1];
vx--;
vb--;
}
while(b[vb-1]=='/')
{
x[vx-2]=x[vx-2]/x[vx-1];
vb--;
vx--;
}
}
b[vb]=a[i];
vb++;
}
void ori_supra()
{
b[vb]=a[i];
vb++;
}
void paranteza_d()
{
b[vb]='(';
//par[vp]=vb;
nrx[vn]=vx;
vn++;
//vp++;
vb++;
}
void paranteza_i()
{
vb1=vb;
for(j=vb1-1;b[j]!='(';j--)
{
switch(b[j])
{
case '+':x[nrx[vn-1]]+=x[nrx[vn-1]+vb1-j];break;
case '-':x[nrx[vn-1]]-=x[nrx[vn-1]+vb1-j];break;
case '*':x[nrx[vn-1]]*=x[nrx[vn-1]+vb1-j];break;
case '/':x[nrx[vn-1]]/=x[nrx[vn-1]+vb1-j];break;
}
vx--;
vb--;
}
vn--;
vb--;
//vp--;
}
int main()
{
f>>a;
int n;
n=strlen(a);
i=0;
while(i<n)
{
if(a[i]>='0' && a[i]<='9')
{
x[vx]=0;
while(a[i]>='0' && a[i]<='9')
{
x[vx]=x[vx]*10+a[i]-'0';
i++;
}
i--;
vx++;
}
else
{
if(a[i]=='+' || a[i]=='-')
plus_minus();
else
if(a[i]=='*' || a[i]=='/')
ori_supra();
else
if(a[i]=='(')
paranteza_d();
else
if(a[i]==')')
paranteza_i();
}
i++;
}
for(i=0;i<vb;i++)
{
switch(b[i])
{
case '+':x[0]+=x[i+1];break;
case '-':x[0]-=x[vx-1];break;
case '*':x[0]*=x[vx-1];break;
case '/':if(x[i+1]!=0)
x[0]/=x[i+1];
break;
}
}
g<<x[0]<<'\n';
g.close();
return 0;
}