Pagini recente » Cod sursa (job #1682048) | Cod sursa (job #2459076) | Cod sursa (job #3250314) | Cod sursa (job #562414) | Cod sursa (job #184580)
Cod sursa(job #184580)
#include<stdio.h>
#include<ctype.h>
#define in "evaluare.in"
#define out "evaluare.out"
long i,j,b[100000],ok;
char a[100000],c;
void eval(char ch);
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
i=1;
a[0]='|';
while(scanf("%c",&c)!=EOF)
{
if((c=='+' || c=='-') && a[i]=='-')
{
b[j]*=(-1);
a[i]='+';
}
if((c=='(') || ((c=='+' || c=='-' || c=='*' || c=='/') && (i==1 || a[i]=='(' || a[i]=='+' || a[i]=='-')))
{
a[++i]=c;
ok=0;
}
else if(isdigit(c))
{
if(ok)
b[j]=b[j]*10+c-48;
else
b[++j]=c-48;
ok=1;
}
else if(((c=='+' || c=='-') && (a[i]=='+' || a[i]=='-' || a[i]=='*' || a[i]=='/')) || ((c=='*' || c=='/') && (a[i]=='*' || a[i]=='/')))
{
while(((c=='+' || c=='-') && (a[i]=='+' || a[i]=='-' || a[i]=='*' || a[i]=='/')) || ((c=='*' || c=='/') && (a[i]=='*' || a[i]=='/')))
{
eval(a[i]);
i--;
}
ok=0;
a[++i]=c;
}
else if(c==')')
{
while(a[i]!='(')
{
eval(a[i]);
i--;
}
i--;
ok=0;
}
}
while(i>1)
eval(a[i--]);
printf("%ld\n",b[j]);
return 0;
}
void eval(char ch)
{
j--;
if(ch=='+')
b[j]=b[j]+b[j+1];
else if(ch=='-')
b[j]=b[j]-b[j+1];
else if(ch=='*')
b[j]=b[j]*b[j+1];
else
b[j]=b[j]/b[j+1];
}