Pagini recente » Borderou de evaluare (job #2001821) | Cod sursa (job #2712515) | Borderou de evaluare (job #1566128) | Borderou de evaluare (job #1344172) | Cod sursa (job #351810)
Cod sursa(job #351810)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 100100
#define fin "evaluare.in"
#define fout "evaluare.out"
char buff[NMAX];
int p, rang[257];
int eval();
int termen()
{
int ret = 0;
if ( buff[p] == '(' )
++p, ret = eval();
else
{
while ( '0' <= buff[p] && buff[p] <= '9' )
ret = ret * 10 + buff[p] - '0', ++p;
}
return ret;
}
int eval()
{
int ret = termen();
char currRang = rang[ buff[p] ];
while ( buff[p] != NULL && buff[p] != ')' )
{
if ( rang[ buff[p] ] != currRang )
{
if ( buff[p] == '+' )
++p, ret += eval();
else
if ( buff[p] == '-' )
++p, ret -= eval();
else
if ( buff[p] == '/' )
++p, ret /= eval();
else
++p, ret *= eval();
}
else
{
if ( buff[p] == '+' )
++p, ret += termen();
else
if ( buff[p] == '-' )
++p, ret -= termen();
else
if ( buff[p] == '/' )
++p, ret /= termen();
else
++p, ret *= termen();
}
}
++p;
return ret;
}
int main()
{
ifstream f1(fin);
ofstream f2(fout);
f1.getline(buff, NMAX);
p = 0;
rang[ '+' ] = rang[ '-' ] = 1;
rang[ '/' ] = rang[ '*' ] = 2;
f2 << eval() << endl;
return 0;
}