Pagini recente » Cod sursa (job #2445029) | Cod sursa (job #1614613) | Cod sursa (job #2102587) | Cod sursa (job #401196) | Cod sursa (job #2047474)
#include <fstream>
#include <string.h>
using namespace std;
int Calcul(int X,int Y,char Op)
{
if(Op=='+')
return X+Y;
if(Op=='-')
return X-Y;
if(Op=='*')
return X*Y;
return X/Y;
}
int N,i,j,Vf1,Vf2,Termeni[100000],Nr;
char Sir[100005],Operatori[100005],Prioritate[260];
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.get(Sir,100001,'\n');
N=strlen(Sir);
Vf1=0;
Vf2=0;
Prioritate['+']=1;
Prioritate['-']=1;
Prioritate['*']=2;
Prioritate['/']=2;
for(i=0;i<N;i++)
if(Sir[i]=='(')
{
Vf1++;
Operatori[Vf1]='(';
}//if
else
if(Sir[i]==')')
{
while(Vf1>0 and Operatori[Vf1]!='(')
{
Nr=Calcul(Termeni[Vf2-1],Termeni[Vf2],Operatori[Vf1]);
Vf1--;
Vf2--;
Termeni[Vf2]=Nr;
}//while
Vf1--;//sar (
}//if
else
if(Sir[i]>='0' and Sir[i]<='9')
{
Nr=0;
j=i;
while(j<N and Sir[j]>='0' and Sir[j]<='9')
{
Nr=Nr*10+(Sir[j]-'0');
j++;
}//while
if(i==1 and Sir[i-1]=='-')
Nr=-Nr;
Vf2++;
Termeni[Vf2]=Nr;
i=j-1;
}//if
else
{
while(Vf1>0 and Prioritate[Sir[i]]<=Prioritate[Operatori[Vf1]])
{
Nr=Calcul(Termeni[Vf2-1],Termeni[Vf2],Operatori[Vf1]);
Vf1--;
Vf2--;
Termeni[Vf2]=Nr;
}//while
Vf1++;
Operatori[Vf1]=Sir[i];
}//else
while(Vf1>0)
{
Nr=Calcul(Termeni[Vf2-1],Termeni[Vf2],Operatori[Vf1]);
Vf1--;
Vf2--;
Termeni[Vf2]=Nr;
}//while
fout<<Termeni[1];
fin.close ();
fout.close();
return 0;
}