Cod sursa(job #1570884)

Utilizator AndreiFlorescuAndrei Florescu AndreiFlorescu Data 16 ianuarie 2016 21:54:35
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>

#define MAX_N 100000

using namespace std;

ifstream file_in ("evaluare.in");
ofstream file_out ("evaluare.out");

char sir[MAX_N + 1];
int poz;

int expresie();
int termen();
int factor();

int expresie() {
    int sum = termen();
    if (sir[poz] == '+' || sir[poz] == '-') {
        if (sir[poz] == '+') {
            poz++;
            sum += termen();
        }
        if (sir[poz] == '-') {
            poz++;
            sum -= termen();
        }
    }
    return sum;
}

int termen() {
    int prod = factor();
    if (sir[poz] == '*' || sir[poz] == '/') {
        if (sir[poz] == '*') {
            poz++;
            prod *= factor();
        }
        if (sir[poz] == '/') {
            poz++;
            prod /= factor();
        }
    }
    return prod;
}

int factor() {
    int val = 0, semn = 1;
    while (sir[poz] == '-') {
        poz++;
        semn = -semn;
    }
    if (sir[poz] == '(') {
        poz++;
        val = expresie();
        poz++;
        return val * semn;
    }
    while (sir[poz] >= '0' && sir[poz] <= '9') {
        val = val * 10 + (sir[poz++] - '0');
    }
    return val * semn;
}

int main()
{
    int rasp;
    // Citirea datelor
    file_in >> sir;

    // Calcularea solutiei
    rasp = expresie();

    // afisarea solutiei
    file_out << rasp;

    return 0;
}