Cod sursa(job #2295540)

Utilizator daru06Daria Culac daru06 Data 3 decembrie 2018 18:50:21
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>

using namespace std;

string s;
int p = 0;

int expresie();

int factor() { // Un factor este un numar sau o expresie intre paranteze.
    int r;

    if(s[p] == '(') {
        p++; // Trecem in dreapta parantezei deschise.
        r = expresie();
        p++; // Trecem in dreapta parantezei inchise.
    }
    else // Determinam valoarea numarului.
        for (r = 0; '0' <= s[p] and s[p] <= '9'; p++)
          r = 10 * r + s[p] - '0';
    return r;
}

int termen() { // Un termen este un factor sau un produs de factori.
    int r = factor();

    while (s[p] == '*' or s[p] == '/')
        if (s[p] == '*') {
          p++; r *= factor();
        }
        else {
          p++; r /= factor();
        }
    return r;
}

int expresie() { // O expresie este un termen sau o suma de termeni.
    int r = termen();

    while (s[p] == '+' or s[p] == '-')
        if(s[p] == '+') {
            p++; r += termen();
        }
        else {
            p++; r -= termen();
        }
    return r;
}

int main() {
  ifstream fi("evaluare.in");
  ofstream fo("evaluare.out");
  fi >> s;
  fo << expresie();
}

// a*b*c+e - f*g
// a*(x+y)*c + d*e - f*g

// O expresie este o suma de termeni.
// Un termen este un produs de factori.
// Un factor poate fi o expresie.