Mai intai trebuie sa te autentifici.

Cod sursa(job #1556146)

Utilizator cristina_borzaCristina Borza cristina_borza Data 24 decembrie 2015 11:25:16
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>

using namespace std;

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

char sir[100005];

int solve(string exp , int &p);
int getnr(string exp , int &p);
int fact(string exp , int &p);
int term(string exp , int &p);

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

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

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

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

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

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

        ++p;

        int f2 = fact(exp , p);

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

        else {
            f1 /= f2;
        }
    }

    return f1;
}

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

    else {
        rez = getnr(exp , p);
    }

    return rez;
}

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

    return sol;
}