Pagini recente » Cod sursa (job #2749445) | Paginatie | Cod sursa (job #81291) | Cod sursa (job #668081) | Cod sursa (job #154473)
Cod sursa(job #154473)
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
ifstream f("evaluare.in");
ofstream g("evaluare.out");
long exp[1000];
int i,j,p[250],x,y,n;
char s1[100000],s[100030],st[100000];
void operatie(int x,char c)
{
if(c=='+')
exp[x-1]=exp[x]+exp[x-1];
else
if(c=='-')
exp[x-1]=exp[x-1]-exp[x];
else
if(c=='*')
exp[x-1]=exp[x]*exp[x-1];
else
exp[x-1]=exp[x-1]/exp[x];
}
int main()
{
f.getline(s,1000);
i=0;y=0;x=0;
n=strlen(s);
p['(']=0;p[')']=0;
p['+']=1;p['-']=1;
p['*']=2;p['/']=2;
while(i<n)
{
if(s[i]>='0'&&s[i]<='9')
{
j=0;
s1[j]=s[i];
j++; i++;
while(s[i]>='0'&&s[i]<='9')
{
s1[j]=s[i];
j++;i++;
}
s1[j]=NULL;
exp[++x]=atol(s1);
strcpy(s1,NULL);
}
else
{
if(s[i]!=')'&&s[i]!='(')
{ j=y-1;
while(st[j]!='('&&j>=0)
{
if(p[st[j]]>=p[s[i]])
{
operatie(x,st[j]);
y--;x--;
}
j--;
}
st[y++]=s[i];
i++;
}
else
if(s[i]==')')
{
j=y-1;
while(st[j]!='(')
{
operatie(x,st[j]);
j--; x--;y--;
}
y--;
i++;
}
else
{
st[y++]=s[i];
i++;
}
}
}
operatie(x,st[0]);
g<<exp[1];
f.close();
g.close();
return 0;
}