Cod sursa(job #1883018)

Utilizator ReeeBontea Mihai Reee Data 17 februarie 2017 17:42:43
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#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] == '+')
    {
        ++i; // trecem peste semn
        t += EvaluareTermen();
    }
    while (i < lg && e[i] == '-')
    {
        ++i; // trecem peste semn
        t -= EvaluareTermen();
    }
    return t;
}

int EvaluareTermen()
{
    int t = EvaluareFactor();
    while ( i < lg && e[i] == '*' )
    {
        ++i; // trecem peste semn
        t *= EvaluareFactor();
    }
    while ( i < lg && e[i] == '/' )
    {
        ++i; // trecem peste semn
        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;
}