Cod sursa(job #2048966)

Utilizator osiaccrCristian Osiac osiaccr Data 26 octombrie 2017 18:54:30
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>

using namespace std;

ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");

char c[100002];
int i = 1;

int evaluare ();

int termen ();

int factor ();

int evaluare () { //se ocupa de adunare si scadere
    int r = termen ();
    while (c[i] == '+' || c[i] == '-') {
        if (c[i] == '+') {
            ++ i;
            r += termen ();
        }
        else {
            r -= termen ();
        }
    }
    return r;
}

int termen () { //se ocupa de inmultire si impartire
    int r = factor ();
    while (c[i] == '*' || c[i] == '/') {
        if (c[i] == '*') {
            ++ i;
            r *= factor ();
        }
        else {
            ++ i;
            r /= factor ();
        }
    }
    return r;
}

int factor () { //se ocupa de paranteze si creerea numerelor in baza 10
    int r = 0;
    if (c[i] == '(') {
        ++ i;
        r = evaluare (); //daca se deschide o paranteza, evaluam ce este in interiorul
        ++ i;            //acelei paranteze prima data, apoi adaugam 1 la i sa trecem peste ')'
    }
    else {
        while (c[i] >= '0' && c[i] <= '9') {
            r = r * 10 + c[i] - '0';
            ++ i;
        }
    }
    return r;
}

int main () {
    fin >> c + 1;
    fout << evaluare ();
    return 0;
}