Pagini recente » Cod sursa (job #262372) | Cod sursa (job #262066) | Cod sursa (job #1287800) | Cod sursa (job #3001468) | Cod sursa (job #1872003)
#include <cstdio>
#include<cstring>
using namespace std;
char polo[105];
char op[105];
char s[105];
int import[255];
int numere[105];
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
int n,i,nr,nr2,j,a1,a2,aux,si,a3,nr1,poz2,poz;
gets(s);
n=strlen(s);
nr=0;
nr2=0;
import['*']=import['/']=2;
import['+']=import['-']=1;
for(i=0;i<n;i++)
{
if(s[i]>='0' && s[i]<='9'){
j=i;
nr1=0;
while(s[j]>='0' && s[j]<='9'){
nr1=nr1*10+(s[j]-'0');
j++;
}
j--;
i=j;
polo[++nr]=-2;
numere[nr]=nr1;
}
else
{
if(s[i]==')')
{
j=nr2;
while(op[j]!='(' && j>=1)
{
polo[++nr]=op[j];
op[j]=0;
j--;
nr2--;
}
op[j]=0;
}
else
if(import[s[i]]>import[op[nr2]] || op[nr2]=='(' || op[nr2]==')' || s[i]=='(')
op[++nr2]=s[i];
else
{
j=nr2;
while(import[s[i]]<import[op[nr2]] && j>=1)
{
polo[++nr]=op[j];
op[j]=0;
j--;
nr2--;
}
op[j]=s[i];
}
}
}
if(nr2!=0)
for(i=nr2;i>=0;i--)
polo[++nr]=op[i];
a1=a2=aux=si=0;
for(i=1;i<=nr;i++)
{
j=i;
while((polo[j]==-2 || polo[j]==0) && j<=nr)
j++;
a1=polo[j];
poz2=j;
while(numere[j]==0 && j>=1)
j--;
a2=numere[j];
poz=j;
a3=numere[j-1];
if(a1=='+')
si=a2+a3;
if(a1=='/')
si=a3/a2;
if(a1=='*')
si=a2*a3;
if(a1=='-')
si=a3-a2;
if(numere[poz+2]!=0){
numere[poz+1]=si;
numere[poz-1]=numere[poz]=0;
polo[poz+1]=0;
}
else{
numere[i]=si;
polo[poz2]=0;
numere[poz]=0;
}
i=poz+1;
if(sizeof(polo)==0)
break;
}
for(i=nr;i>=1;i--)
if(numere[i]!=0)
{
printf("%d",numere[i]);
break;
}
return 0;
}