Cod sursa(job #879194)

Utilizator raluca_vacaruVacaru Raluca-Ioana raluca_vacaru Data 15 februarie 2013 08:13:10
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
#include <cstring>
#include <ctype.h>
#define MAXN 256

using namespace std;

int n, i;
char e[MAXN];

void read ();
void write (int);
int eval (int);
int expresie ();
int termen ();
int factor ();

int main () {
    read ();
    write (expresie ());
    return 0;
}


void read () {
    freopen ("evaluare.in", "r", stdin);
    gets (e);
    fclose (stdin);
    n = strlen (e);
}

void write (int k) {
    freopen ("evaluare.out", "w", stdout);
    printf ("%d\n", k);
    fclose (stdout);
}

int eval () {
    int nr = 0;
    while (isdigit(e[i]))
        nr = nr*10 + (e[i++]-'0');
  //  printf ("%d ", nr);
    return nr;
}

int factor () {
    int f;
    if (e[i] == '(') {
        ++i;
        f = expresie ();
        ++i;
    }
    else f = eval ();
    return f;
}

int termen () {
    int f = factor ();
    while (i<n && (e[i]=='*' || e[i]=='/')) {
        ++i;
        f = (e[i-1]=='*') ? (f*factor()) : (f/factor()) ;
    }
    return f;
}

int expresie () {
    int t = termen ();
    while (i<n && (e[i]=='+' || e[i]=='-')) {
        ++i;
        t = (e[i-1]=='+') ? (t+termen()) : (t-termen());
    }
    return t;
}