Pagini recente » Cod sursa (job #196532) | Cod sursa (job #196530) | Cod sursa (job #860592) | Cod sursa (job #786153) | Cod sursa (job #1883055)
#include <fstream>
#include <string.h>
#define NMAX 100001
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char e[NMAX];
int lg, i = 0;
int EvaluareExpresie(), EvaluareTermen(), EvaluareFactor();
void Citire();
int main()
{
Citire();
fout << EvaluareExpresie();
return 0;
}
void Citire()
{
fin.getline(e, NMAX);
lg = strlen(e);
fin.close();
}
int EvaluareExpresie()
{
int t;
t = EvaluareTermen();
while ( i < lg && ( e[i] == '+' || e[i] == '-' ) )
{
if ( e[i] == '+' )
{
++i; // trec peste '+'
t += EvaluareTermen();
}
else
{
++i; // trec peste '-'
t -= EvaluareTermen();
}
}
return t;
}
int EvaluareTermen()
{
int t = EvaluareFactor();
while ( i < lg && ( e[i] == '*' || e[i] == '/' ) )
{
if ( e[i] == '*' )
{
++i; // trec peste '*'
t *= EvaluareFactor();
}
else
{
++i; // trec peste '/'
t /= EvaluareFactor();
}
}
return t;
}
int EvaluareFactor()
{
int t;
if ( e[i] == '(' )
{
++i; // trecem peste '('
t = EvaluareExpresie();
++i; // trecem peste ')'
}
else
{
if ( e[i] >= '0' && e[i] <= '9' )
t = e[i] - '0';
++i; // trecem peste prima cifra din numar
while ( e[i] >= '0' && e[i] <= '9' )
{
t = t * 10 + (e[i] - '0');
++i; // trecem peste cifra
}
}
return t;
}