Cod sursa(job #610936)

Utilizator alinhAlin H alinh Data 29 august 2011 19:34:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>
#include <string>

using namespace std;

ifstream fi;    // input
ofstream fo;    // output

string expresie;
string::iterator it;

long suma();
long prod();
long par();

long ctol(char c)
{
    return (c - 48);
}

long suma()
{
    long rez = prod();

    while ((*it == '+') || (*it == '-'))
    {
        switch (*it)
        {
            case '+':
                ++it;
                rez += prod();
            break;
            case '-':
                ++it;
                rez -= prod();
            break;
        }
    }

    return rez;
}

long prod()
{
    long rez = par();

    while ((*it == '*') || (*it == '/'))
    {
        switch (*it)
        {
            case '*':
                ++it;
                rez *= par();
            break;
            case '/':
                ++it;
                rez /= par();
            break;
        }
    }

    return rez;
}

long par()
{
    long rez = 0;

    if (*it == '(')
    {
        ++it;
        rez = suma();
        ++it;   // sare peste ')'
    }
    else
        while ((*it >= '0') && (*it <= '9'))
        {
            rez = rez*10 + ctol(*it);
            ++it;
        }

    return rez;
}

int main()
{
    fi.open("evaluare.in");
    getline(fi, expresie);
    fi.close();

    it = expresie.begin();

    fo.open("evaluare.out");
    fo << suma();
    fo.close();
    return 0;
}