Cod sursa(job #3210246)

Utilizator David_PirvuPirvu David David_Pirvu Data 5 martie 2024 17:41:29
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

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

char s[100005];
char* p;

int eval();
int termen();
int factor();

int main() {
    f >> s;
    p = s;
    g << eval();
    return 0;
}

int eval() {
    int rez = termen();
    while (*p == '+' || *p == '-') {
        if (*p == '+') {
            p++;
            rez += termen();
        } else {
            p++;
            rez -= termen();
        }
    }
    return rez;
}

int termen() {
    int rez = factor();
    while (*p == '*' || *p == '/') {
        if (*p == '*') {
            p++;
            rez *= factor();
        } else {
            p++;
            int temp = factor();
            if (temp != 0) {
                rez /= temp;
            } else {
                cerr << "Eroare: Divizare la zero!" << endl;
                exit(1);
            }
        }
    }
    return rez;
}

int factor() {
    int rez = 0;
    if (*p == '(') {
        p++;
        rez = eval(); // Modificarea necesară pentru tratarea corectă a parantezelor
        p++;
    } else {
        while (*p >= '0' && *p <= '9') {
            rez = rez * 10 + (*p - '0');
            p++;
        }
    }
    return rez;
}