Pagini recente » Cod sursa (job #3131577) | Cod sursa (job #3249443) | Cod sursa (job #2559499) | Cod sursa (job #861226) | Cod sursa (job #3271530)
#include <fstream>
using namespace std;
const int DMAX = 100001;
char S[DMAX], *p = S;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int expresie();
int termen();
int factor();
/**
Functia expresie() va "aduna" toti termenii unei expresii/subexpresii.
*/
int expresie()
{
int r = termen();
while(*p == '+' || *p == '-')
{
if(*p == '+')
{
++p; ///trecem peste '+'
r += termen();
}
else //if(*p == '-')
{
++p; ///trecem peste '-'
r -= termen();
}
}
return r;
}
/**
Functia termen() se ocupa de continutul unui termen.
Acesta este compus la randul lui din factori.
*/
int termen()
{
int r = factor();
while(*p == '*' || *p == '/')
{
if(*p == '*')
{
++p; ///trecem peste '*'
r *= factor();
}
else //if(*p == '/')
{
++p; ///trecem peste '/'
r /= factor();
}
}
return r;
}
/**
Functia factor() va returna valoarea unui singur factor,
care poate fi o subexpresie sau un numar natural
*/
int factor()
{
int r = 0;
if(*p == '(') ///avem o subexpresie
{
++p; ///trecem peste '('
r = expresie();
++p; ///trecem peste ')'
}
else ///avem un numar (o constanta)
{
while(*p >= '0' && *p <= '9')
{
r = r * 10 + *p - '0';
++p;
}
}
return r;
}
int main()
{
f.getline(S, DMAX);
g << expresie();
f.close();
g.close();
return 0;
}