Pagini recente » Cod sursa (job #427670) | Cod sursa (job #3279213) | Cod sursa (job #2237422) | Cod sursa (job #2774993) | Cod sursa (job #688482)
Cod sursa(job #688482)
#include <iostream>
#include <fstream>
#include <string>
#define NMAX 1002
using namespace std;
// nivel maxim de prioritate
#define LMAX 2
// operatori pe niveluri de prioritate
char OP[4][4] = {"+-", "*/", "^", ""};
char S[NMAX], *p = S;
/**
* evalueaza o expresie simpla de forma a operator b
*/
int evalueaza(int a, int b, int op)
{
switch(op)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
}
int expresie(int nivel)
{
int x, y;
if(nivel == LMAX)
{
if(*p == '(')
{
p++;
x = expresie(0);
p++;
}
else // preiau numarul - citesc caracter cu caracter
for(x = 0; *p >= '0' && *p <= '9'; ++p)
// salvez numarul
x = x * 10 + (*p - '0');
}
else
for(x = expresie(nivel+1); strchr(OP[nivel], *p); x = y)
y = evalueaza(x, expresie(nivel+1), *p++);
return x;
}
int main()
{
ifstream fin ("evaluare.in");
ofstream fout("evaluare.out");
fin.getline(S, NMAX);
fout<<expresie(0);
}