Cod sursa(job #472390)

Utilizator ilie.danilaIlie Teodor Danila ilie.danila Data 24 iulie 2010 14:27:48
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>

using namespace std;

char expression[100001];

char* charIndex = expression;

long  evaluate();

long factor();

long termen();

int main()
{
    ifstream f("evaluare.in");
    ofstream g("evaluare.out");

    f >> expression;

    f.close();

    g << evaluate() << "\n";

    g.close();

    return 0;
}

long factor()
{
    long r = 0;
    if ( *charIndex == '(' )
    {
        ++charIndex;
        r = evaluate();
        ++charIndex;
    }
    else
    {
        while( *charIndex >= '0' && *charIndex <= '9' )
        {
            r = r * 10 + *charIndex - '0';
            ++charIndex;
        }
    }
    return r;
}

long termen()
{
    long result = factor();
    while (*charIndex == '*' || *charIndex == '/')
    {
        switch (*charIndex)
        {
            case '*':
                ++charIndex;
                result *= factor();
                break;
            case '/':
                ++charIndex;
                result /= factor();
                break;
        }
    }
    return result;
}

long  evaluate()
{
    long  result = termen();
    while( *charIndex == '+' || *charIndex == '-' )
    {
        switch (*charIndex)
        {
            case '+':
                ++charIndex;
                result += termen();
                break;
            case '-':
                ++charIndex;
                result -= termen();
                break;
        }
    }
    return result;
}