Cod sursa(job #1556153)

Utilizator cristina_borzaCristina Borza cristina_borza Data 24 decembrie 2015 11:39:30
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>

using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char exp[100005];

int solve(int &p);
int getnr(int &p);
int fact(int &p);
int term(int &p);

int main() {
    f >> exp;
    int pos = 0;

    g << solve( pos);
    return 0;
}

int solve(int &p) {
    int t1 = term(p);
    while(exp[p] == '+' || exp[p] == '-') {
        int semn;
        if(exp[p] == '+') {
            semn = 1;
        }
        else {
            semn = -1;
        }

        ++p;
        int t2 = term(p);

        t1 += semn * t2;
    }
    return t1;
}

int term(int &p) {
    int f1 = fact(p);
    while(exp[p] == '*' || exp[p] == '/') {
        int semn;
        if(exp[p] == '*') {
            semn = 1;
        }
        else {
            semn = -1;
        }

        ++p;

        int f2 = fact(p);

        if(semn == 1) {
            f1 *= f2;
        }

        else {
            f1 /= f2;
        }
    }

    return f1;
}

int fact(int &p) {
    int rez;
    if(exp[p] == '(') {
        ++p;
        rez = solve(p);
        ++p;
    }

    else {
        rez = getnr(p);
    }

    return rez;
}

int getnr(int &p) {
    int sol = 0;
    while(exp[p] >= '0' && exp[p] <= '9') {
        sol = sol * 10 + exp[p] - '0';
        ++p;
    }

    return sol;
}