Pagini recente » Cod sursa (job #222454) | Cod sursa (job #2092352) | Cod sursa (job #1249921) | Cod sursa (job #908784) | Cod sursa (job #2338929)
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
FILE *f,*g;
int fp[100002];
int st[100002];
int adun=-3, scad=-4, inm=-5, imp=-6;
int nr, vf;
void forma_poloneza()
{ char c='a';
int s, ok;
fscanf(f,"%c",&c);
while(c!='\n')
{ ok=0;
if(c>='0' && c<='9')
{
s=0;
while(c>='0' && c<='9')
{
s=s*10+c-'0';
fscanf(f,"%c",&c);
}
ok=1;
fp[++nr]=s;
}
else
{
if(c=='+' || c=='-')
{
if(st[vf]==adun || st[vf]==scad || st[vf]==inm || st[vf]==imp)
{
fp[++nr]=st[vf];
if(c=='+')
st[vf]=adun;
else
st[vf]=scad;
}
else
if(c=='+')
st[++vf]=adun;
else
st[++vf]=scad;
}
else if(c=='*' || c=='/')
{
if(st[vf]==inm || st[vf]==imp)
{
fp[++nr]=st[vf];
if(c=='*')
st[vf]=inm;
else
st[vf]=imp;
}
else
if(c=='*')
st[++vf]=inm;
else
st[++vf]=imp;
}
else if(c=='(')
st[++vf]=-1;
else
while(st[vf]!=-1)
fp[++nr]=st[vf--];
}
if(!ok)
fscanf(f,"%c",&c);
}
while(vf)
fp[++nr]=st[vf--];
}
void solve()
{ forma_poloneza();
vf=0;
for(int i=1; i<=nr; i++)
{
if(fp[i]>=0)
st[++vf]=fp[i];
else
{
if(fp[i]==adun)
st[vf-1]+=st[vf];
else if(fp[i]==scad)
st[vf-1]-=st[vf];
else if(fp[i]==inm)
st[vf-1]*=st[vf];
else
st[vf-1]/=st[vf];
vf--;
}
}
}
void write()
{
cout<<st[1];
fprintf(g,"%d",st[1]);
}
int main()
{
f=fopen("evaluare.in","r");
g=fopen("evaluare.out","w");
//read();
solve();
write();
fclose(f);
fclose(g);
return 0;
}