Pagini recente » Cod sursa (job #2780545) | Cod sursa (job #563398) | Cod sursa (job #2456995) | Cod sursa (job #2596956) | Cod sursa (job #2190664)
#include <fstream>
#include <string.h>
using namespace std;
#define Dim 100005
int N,Vfnr,Vfop,Nr[Dim],X,i;
short Prioritate[260];
char Sir[Dim],Oper[Dim];
void evaluare()
{
if(Oper[Vfop]=='+') Nr[Vfnr-1]+=Nr[Vfnr];
else
if(Oper[Vfop]=='-') Nr[Vfnr-1]-=Nr[Vfnr];
else
if(Oper[Vfop]=='*') Nr[Vfnr-1]*=Nr[Vfnr];
else
Nr[Vfnr-1]/=Nr[Vfnr];
--Vfnr; --Vfop;
}
int main()
{
ifstream fin("evaluare.in"); ofstream fout("evaluare.out");
fin>>Sir; N=strlen(Sir);
i=0;
Prioritate['(']=0;
Prioritate['+']=Prioritate['-']=1;
Prioritate['*']=Prioritate['/']=2;
while(i<=N-1)
{
if(Sir[i]>='0' and Sir[i]<='9')
{
X=0;
while(Sir[i]>='0' and Sir[i]<='9') X=X*10+(Sir[i++]-'0');
Nr[++Vfnr]=X;
continue;
}//if
if(Sir[i]=='(') {Oper[++Vfop]=Sir[i++]; continue;}
if(Sir[i]==')')
{
while(Oper[Vfop]!='(') evaluare();
--Vfop; ++i; continue;
}
while(Vfop>=1 and Oper[Vfop]!='(' and Prioritate[Sir[i]]<=Prioritate[Oper[Vfop]]) evaluare();
Oper[++Vfop]=Sir[i++];
}
while(Vfop>=1) evaluare();
fout<<Nr[1];
fin.close (); fout.close();
return 0;
}