Cod sursa(job #1174030)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 21 aprilie 2014 18:27:29
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <fstream>
#include <string>

using namespace std;

string Expression;
int Parser;

inline int GetValue() {
    int sign = 1, value = 0;
    if (Parser < int(Expression.length()) && Expression[Parser] == '-') {
        sign = -1;
        ++Parser;
    }
    while (Parser < int(Expression.length()) && '0' <= Expression[Parser] && Expression[Parser] <= '9') {
        value = value * 10 + int(Expression[Parser] - '0');
        ++Parser;
    }
    return value * sign;
}

int GetFactor();
int GetTerm();
int GetExpression();

int GetFactor() {
    if (Expression[Parser] == '(') {
        ++Parser;
        int value = GetExpression();
        ++Parser;
        return value;
    }
    return GetValue();
}

int GetTerm() {
    int factor = GetFactor();
    while (Parser < int(Expression.length()) && (Expression[Parser] == '*' || Expression[Parser] == '/')) {
        if (Expression[Parser] == '*') {
            ++Parser;
            factor *= GetFactor();
        } else if (Expression[Parser] == '/') {
            ++Parser;
            factor /= GetFactor();
        }
    }
    return factor;
}

int GetExpression() {
    int term = GetTerm();
    while (Parser < int(Expression.length()) && (Expression[Parser] == '+' || Expression[Parser] == '-')) {
        if (Expression[Parser] == '+') {
            ++Parser;
            term += GetTerm();
        } else if (Expression[Parser] == '-') {
            ++Parser;
            term -= GetTerm();
        }
    }
    return term;
}

int main() {
    ifstream cin("evaluare.in");
    ofstream cout("evaluare.out");
    cin >> Expression;
    Parser = 0;
    cout << GetExpression() << "\n";
    cin.close();
    cout.close();
    return 0;
}