Cod sursa(job #1020042)

Utilizator yololy97Olaru Bogdan-Ioan yololy97 Data 1 noiembrie 2013 15:53:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <cstdio>

char a[100001], *p;

// pt ca avem apel din factor in eval
// si din eval in termen si din termen in factor (ciclu)
// compilatorul nu stie ordinea
// asa ca trebuie sa declaram ordinea
int eval();
int termen();
int factor();

int factor() {
// factorul e un numar
    int t = 0; 
    if (*p == '(') {
        // daca avem (, apelam eval 
        ++p;
        t = eval();
        ++p;
    }
    else {
        // parsam numarul
        for (; *p >= '0' && *p <= '9'; ++p)
            t = t * 10 + *p - '0';
    }
    return t;
}

int termen() {
    int t = factor(); // luam primul factor
    while (1) {
        if (*p == '*') {
            ++p;
            t *= factor();
        }
        else if (*p == '/') {
            ++p;
            t /= factor();
        }
        else break;
    }
    return t;
}

// returneaza raspunsul
int eval() {
    int t = termen(); // termen e o fctie care o obtine un factor
    while (1) {
        if (*p == '+') {// avem +
            ++p;// trecem la urmatorul caracter
            t += termen(); // adaugam noul termen
        }
        else if (*p == '-') {
            ++p;
            t -= termen();
        }
        else break;
    }
    return t;
}

// ( termen + termen + termen)
// un termen poate avea factori , termen = (factor * factor * factor...)
// si poate fi pozitiv sau negativ nu? cred ca numerele sunt pozitive din enunt
// si mai ai paranteze
int main() {
    freopen ("evaluare.in", "r", stdin);
    freopen ("evaluare.out", "w", stdout);
    // trimite sa vedem ca ia 100 si pe urma vedem
    scanf ("%s", &a);
    p = a;
    printf ("%d\n", eval());
}