Pagini recente » Cod sursa (job #696228) | Cod sursa (job #380459) | Cod sursa (job #1351139) | Cod sursa (job #2329903) | Cod sursa (job #2197723)
#include <iostream>
#include <fstream>
#include <cstring>
#define NUM 100005
char sir[NUM];
char aux[10];
int lng, i;
using namespace std;
int eval(char *a);
int EvaluareExpresie();
int EvaluareFactor();
int EvaluareTermen();
int e_cif(char a)
{
if(a <= '9' && a >= '0')
return 1;
return 0;
}
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f >> sir;
lng = strlen(sir);
aux[0] = 0;
g << EvaluareExpresie();
f.close();
g.close();
}
int eval(char *a)
{
int v = 0;
for(int j = 0; j < strlen(a); ++j)
v = v * 10 + a[j] - '0';
return v;
}
int EvaluareFactor()
{
int f = 0;
if(sir[i] == '(')
{
i++;
f = EvaluareExpresie();
i++;
}
else
{
int j = 0;
for( ; e_cif(sir[i]); ++i)
aux[j++] = sir[i];
aux[j] = 0;
f = eval(aux);
aux[0] = 0;
}
//cout << f << "\n";
return f;
}
int EvaluareTermen()
{
int f = EvaluareFactor();
while(i < lng && (sir[i] == '*' || sir[i] == '/'))
{
if(sir[i] == '*')
{
i++;
f *= EvaluareFactor();
}
else
{
i++;
f /= EvaluareFactor();
}
}
return f;
}
int EvaluareExpresie()
{
int t = EvaluareTermen();
//cout << t << " ";
while(i < lng && (sir[i] == '+' || sir[i] == '-'))
{
if(sir[i] == '+')
{
i++;
t += EvaluareTermen();
//cout << t << "\n";
}
else
{
i++;
t -= EvaluareTermen();
}
}
//cout << t << "\n";
return t;
}