Cod sursa(job #1911430)

Utilizator BourucLiviuBouruc Petru Liviu BourucLiviu Data 7 martie 2017 20:26:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>

using namespace std;

int poz;
char s[100005];

int eval();
int termen();
int factor();

int eval() /// va aduna termenii, adunarea fiind de gradul 1
{
    int sol = termen();
    while(s[poz] == '+' || s[poz] == '-')
        if(s[poz] == '+')
        {
            poz++;
            sol += termen();
        }
        else
        {
            poz++;
            sol -= termen();
        }
    return sol;
}
int termen() /// continutul unui termen care poate fi la randul lui compus din factorii inmultirii
{
    int sol = factor();
    while(s[poz] == '*' || s[poz] == '/')
        if(s[poz] == '*')
        {
            poz++;
            sol *= factor();
        }
        else
        {
            poz++;
            sol /= factor();
        }
    return sol;
}
int factor() /// valoarea unui singur factor     (...) - factor
{
    int sol = 0;
    if(s[poz] == '(')
    {
        poz++;
        sol = eval();
        poz++;
    }
    while(s[poz] >= '0' && s[poz] <= '9')
    {
        sol = sol * 10 + (s[poz] - '0');
        poz++;
    }
    return sol;
}

int main()
{
    ifstream fin ("evaluare.in");
    fin.getline(s, 100005);
    fin.close();
    ofstream fout ("evaluare.out");
    fout << eval();
    fout.close();
    return 0;
}