Pagini recente » Cod sursa (job #1398093) | Cod sursa (job #749223) | Cod sursa (job #870977) | Cod sursa (job #1919932) | Cod sursa (job #376416)
Cod sursa(job #376416)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[2000],stop[2000],stchar[2000],rez2[2000],rez3[2000],rez[2000];
int var[2000];
int i,j,k,vf,vf2,sc,constant,rezultat;
int main()
{
f.getline(s,2000);
for(i=0;i<strlen(s);i++)
{
if('0'<=s[i] && s[i]<='9')
{
constant=s[i]-48;
sc=sc*10+constant;
}
if( ('0'<=s[i] && s[i]<='9') && (s[i+1]<'0' || s[i+1]>'9') )
{
vf++;
stchar[vf]=sc;
sc=0;
}
if(s[i]=='(')
{
vf2++;
stop[vf2]='(';
}
if(s[i]=='+')
{
if(stop[vf2]!='(' && stop[vf2]!=')')
{
vf++;
stchar[vf]=stop[vf2];
stop[vf2]='+';
}
else
{
vf2++;
stop[vf2]='+';
}
}
if(s[i]=='-')
{
if(stop[vf2]!='(' && stop[vf2]!=')')
{
vf++;
stchar[vf]=stop[vf2];
stop[vf2]='-';
}
else
{
vf2++;
stop[vf2]='-';
}
}
if(s[i]=='*')
{
if(stop[vf2]=='-' || stop[vf2]=='+' || (stop[vf2]<='9' && stop[vf2]>='0'))
{
vf2++;
stop[vf2]='*';
}
else
{
vf++;
stchar[vf]=stop[vf2];
stop[vf2]='*';
}
}
if(s[i]=='/')
{
if(stop[vf2]=='-' || stop[vf2]=='+' || (stop[vf2]<='9' && stop[vf2]>='0'))
{
vf2++;
stop[vf2]='/';
}
else
{
vf++;
stchar[vf]=stop[vf2];
stop[vf2]='/';
}
}
if(s[i]==')')
{
k=vf2;
while(stop[k]!='(' && k!=0)
{
vf++;
stchar[vf]=stop[k];
k--;
strcpy(stop+k+1,stop+k+2);
}
strcpy(stop+k,stop+k+1);
}
}
k=0;
vf++;
for(k=0;k<=vf2;k++)
if(stop[k]!=0)
stchar[vf]=stop[k];
/*
for(i=0;i<=vf;i++)
{
if(stchar[i]!=0)
{
if(stchar[i]=='*' || stchar[i]=='/' || stchar[i]=='-' || stchar[i]=='+')
cout<<stchar[i]<<" ";
else
cout<<int(stchar[i])<<" ";
}
}*/
k=0;
for(i=0;i<=vf;i++)
{
if(stchar[i]!=0)
{
rez[k]=int(stchar[i]);
k++;
}
}
vf=0;
for(i=0;i<k;i++)
{
if(rez[i]!='+' && rez[i]!='-' && rez[i]!='*' && rez[i]!='/')
{
vf++;
var[vf]=int(rez[i]);
var[vf+1]=0;
}
if(rez[i]=='+')
{
vf--;
var[vf]=var[vf+1]+var[vf];
var[vf+1]=0;
}
if(rez[i]=='-')
{
vf--;
var[vf]=var[vf+1]-var[vf];
var[vf+1]=0;
}
if(rez[i]=='*')
{
vf--;
var[vf]=var[vf+1]*var[vf];
var[vf+1]=0;
}
if(rez[i]=='/')
{
vf--;
var[vf]=var[vf+1]/var[vf];
}
}
g<<var[vf]*(-1);
return 0;
}