Cod sursa(job #1883055)

Utilizator ReeeBontea Mihai Reee Data 17 februarie 2017 18:09:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 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] == '+' || 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;
}