Pagini recente » Cod sursa (job #1017533) | Cod sursa (job #1830481) | Cod sursa (job #125020) | Cod sursa (job #698495) | Cod sursa (job #2190600)
#include <fstream>
#include <string.h>
using namespace std;
#define Dim 100005
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 A-B;
if(Op=='*') return A*B;
return B/A;
}
void evaluare()
{
if(Sir[i]==')')
{
while(Oper[Vfop]!='(') {Nr[Vfnr-1]=operatie(Nr[Vfnr],Nr[Vfnr-1],Oper[Vfop]); --Vfnr; --Vfop;}
--Vfop;
}
else
while(Vfnr>1)
{Nr[Vfnr-1]=operatie(Nr[Vfnr],Nr[Vfnr-1],Oper[Vfop]); --Vfnr; --Vfop;}
}
int main()
{
ifstream fin("evaluare.in"); ofstream fout("evaluare.out");
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;
}