Pagini recente » Cod sursa (job #1292027) | Cod sursa (job #1773095) | Cod sursa (job #2829406) | Cod sursa (job #2316846) | Cod sursa (job #1465293)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
#define vmax 1001
int stv[vmax],vfsv=-1,vfso=-1;
char sto[vmax];
int pr(char c)
{
if(c=='(')return 0;
if(c=='+'||c=='-')return 1;
if(c=='*'||c=='/'||c=='%')return 2;
if(c=='m'||c=='+')return 3;
return -1;
}
int main()
{
char s[vmax+2];
fstream f("evaluare.in",ios::in);
f.getline(s+1,vmax);
s[0]='(';strcat(s,")");
int i;
for(i=0;i<strlen(s);i++)
{
if(s[i]=='(')sto[++vfso]='(';
else
if(isdigit(s[i]))
if(!isdigit(s[i-1]))
stv[++vfsv]=s[i]-'0';
else
stv[vfsv]=stv[vfsv]*10+s[i]-'0';
else
{
if(s[i]=='-'&&(s[i-1]=='('||pr(s[i-1])>0))
sto[++vfso]='m';
else
if(s[i]=='+'&&(s[i-1]=='('||pr(s[i-1])>0))
sto[++vfso]='p';
else
if(pr(s[i])>0||s[i]==')')sto[++vfso]=s[i];
if(sto[vfso]==')')
{
vfso--;
while(sto[vfso]!='(')
{
if(sto[vfso]=='m')stv[vfsv]*=-1;
else if(sto[vfso]=='/')
{stv[vfsv-1]=stv[vfsv-1]/stv[vfsv];vfsv--;}
else if(sto[vfso]=='%')
{stv[vfsv-1]=stv[vfsv-1]%stv[vfsv];vfsv--;}
else if(sto[vfso]=='*')
{stv[vfsv-1]=stv[vfsv-1]*stv[vfsv];vfsv--;}
else if(sto[vfso]=='+')
{stv[vfsv-1]=stv[vfsv-1]+stv[vfsv];vfsv--;}
else if(sto[vfso]=='-')
{stv[vfsv-1]=stv[vfsv-1]-stv[vfsv];vfsv--;}
vfso--;
}
vfso--;
}
else
if(vfso&&pr(sto[vfso])&&pr(sto[vfso])<=pr(sto[vfso-1]))
{
char op=sto[vfso--];
while(pr(op)<=pr(sto[vfso]))
{
if(sto[vfso]=='m')stv[vfsv]*=-1;
else if(sto[vfso]=='/')
{stv[vfsv-1]=stv[vfsv-1]/stv[vfsv];vfsv--;}
else if(sto[vfso]=='%')
{stv[vfsv-1]=stv[vfsv-1]%stv[vfsv];vfsv--;}
else if(sto[vfso]=='*')
{stv[vfsv-1]=stv[vfsv-1]*stv[vfsv];vfsv--;}
else if(sto[vfso]=='+')
{stv[vfsv-1]=stv[vfsv-1]+stv[vfsv];vfsv--;}
else if(sto[vfso]=='-')
{stv[vfsv-1]=stv[vfsv-1]-stv[vfsv];vfsv--;}
vfso--;
}
sto[++vfso]=op;
}
}
}
f.close();
f.open("evaluare.out",ios::out);
f<<stv[0];
return 0;
}