Pagini recente » dk | Cod sursa (job #469581)
Cod sursa(job #469581)
#include <fstream>
#include <iostream>
#include <string.h>
#define NM 2
#define DN 100007
using namespace std;
char op[4][4] = { "+-", "*/", "^", "" };
char S[DN], *p=S;
class exp {
private:
int ex(int a,int b, char op) {
if(op=='+') return a + b;
else if(op=='-') return a - b;
else if(op=='*') return a * b;
else if(op=='/') return a / b;
}
public:
int expr( int lev ) {
int x, y;
if( lev == NM )
if( *p == '(' )
++p, x = expr(0), ++p;
else
for( x = 0; *p >= '0' && *p <= '9'; ++p )
x = x * 10 + *p - '0';
else
for( x = expr(lev+1); strchr(op[lev], *p); x = y )
y = ex( x, expr(lev+1), *p++ );
return x;
}
}Ex;
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f.get(S,DN);
int zz=strlen(S);
S[zz]='\n';
g<<Ex.expr(0);
f.close();
g.close();
//fgets( S, DN, fopen( "evaluare.in", "r" ) );
//fprintf( fopen( "evaluare.out", "w" ), "%d\n", Ex.expr(0) );
return 0;
}