Pagini recente » Cod sursa (job #2788566) | Cod sursa (job #1907037) | Cod sursa (job #1008476) | Cod sursa (job #2659883) | Cod sursa (job #2190642)
#include <fstream>
#include <string.h>
using namespace std;
#define Dim 100005
ifstream fin("evaluare.in"); ofstream fout("evaluare.out");
int i,Nr[Dim],X,Vfnr,Vfop,N;
short int Prioritate[Dim];
char Sir[Dim],Oper[Dim];
int operatie(int A,int B,char Op)
{
if(Op=='+') return A+B;
if(Op=='-') return B-A;
if(Op=='*') return A*B;
return B/A;
}
void evaluare()
{
while(Oper[Vfop]!='(' and Vfnr>1 and Prioritate[Oper[Vfop]]>=Prioritate[Oper[Vfop-1]])
{Nr[Vfnr-1]=operatie(Nr[Vfnr],Nr[Vfnr-1],Oper[Vfop]); --Vfnr; --Vfop;}
if(Oper[Vfop]=='(' and Sir[i]==')') --Vfop;
}
int main()
{
fin>>Sir; N=strlen(Sir);
Prioritate['(']=-1;
Prioritate['+']=Prioritate['-']=0;
Prioritate['*']=Prioritate['/']=1;
i=0;
while(i<=N-1)
{
if(Sir[i]>='0' and Sir[i]<='9')
{
X=0;
while(i<=N-1 and Sir[i]>='0' and Sir[i]<='9') {X=X*10+(Sir[i]-'0'); ++i;}
++Vfnr; Nr[Vfnr]=X;
continue;
}
if(Sir[i]=='(') {Oper[++Vfop]=Sir[i++]; continue;}
if(Sir[i]==')') {evaluare(); ++i; continue;}
if(Vfop==0 or Prioritate[Sir[i]]>Prioritate[Oper[Vfop]]) {Oper[++Vfop]=Sir[i++]; continue;}
evaluare(); Oper[++Vfop]=Sir[i++];
}
evaluare();
fout<<Nr[1];
fin.close (); fout.close();
return 0;
}