Pagini recente » Cod sursa (job #1596885) | Cod sursa (job #1656661) | Cod sursa (job #678155) | Cod sursa (job #456589) | Cod sursa (job #407883)
Cod sursa(job #407883)
//evaluarea unei expresii
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
char fp[20000],st[10000],p1[]="*/",p2[]="+-";
int k1=-1,k2;
int main()
{
char e[10001];
int i,k,s[10001],nr;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f>>e;
for(i=0;e[i];i++)
{
if(isdigit(e[i]))
{
while(isdigit(e[i]))
{
fp[++k1]=e[i];
if(e[i]) i++;
}
fp[++k1]='.';
}
if(strchr(p1,e[i])&&e[i])
{
if((strchr(p1,st[k2])&&k2>=0))
{
k2--;
while(strchr(p1,st[k2])&&k2>=0)
fp[++k1]=st[k2--], fp[++k1]='.';
st[++k2]=e[i], st[++k2]=0;
}
else
st[k2++]=e[i], st[k2]=0;
}
if(strchr(p2,e[i])&&e[i])
{
k2--;
if((strchr(p2,st[k2])||strchr(p1,st[k2]))&&k2>=0)
{
while((strchr(p2,st[k2])||strchr(p1,st[k2]))&&k2>=0)
fp[++k1]=st[k2], st[k2--]=0, fp[++k1]='.';
st[++k2]=e[i], st[++k2]=0;
}
else
st[++k2]=e[i], st[++k2]=0;
}
if(e[i]=='(') st[k2++]=e[i], st[k2]=0;
if(e[i]==')')
{
while(st[--k2]!='(')
fp[++k1]=st[k2], fp[++k1]='.';
}
}
k2--;
while(k2>=0)
fp[++k1]=st[k2--], fp[++k1]='.';
k=0;
for(i=0;fp[i];i++)
{
if(isdigit(fp[i]))
{
nr=atoi(&fp[i]);
if(nr) i=i+log10(nr);
s[++k]=nr;
}
if(fp[i]=='/')
s[k-1]=s[k-1]/s[k--];
if(fp[i]=='*')
s[k-1]=s[k-1]*s[k--];
if(fp[i]=='+')
s[k-1]=s[k-1]+s[k--];
if(fp[i]=='-')
s[k-1]=s[k-1]-s[k--];
}
g<<s[1]<<"\n";
f.close();
g.close();
return 0;
}