Cod sursa(job #3294059)

Utilizator avadaravaRares Avadanei avadarava Data 15 aprilie 2025 15:17:00
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.07 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>

using namespace std;

string s;  // șirul ce conține expresia
int pos;   // poziția curentă în șir

// Parsează un factor: fie număr, fie expresie între paranteze
int parseFactor() {
    int result = 0;
    if (s[pos] == '(') {
        pos++; // sare peste '('
        result = parseExpression();
        pos++; // sare peste ')'
        return result;
    } else {
        // Verifică semnul negativ
        bool neg = false;
        if (s[pos] == '-') {
            neg = true;
            pos++;
        }
        // Construiește numărul din cifre
        while (pos < s.size() && isdigit(s[pos])) {
            result = result * 10 + (s[pos] - '0');
            pos++;
        }
        return neg ? -result : result;
    }
}

// Parsează termeni: factori separați prin '*' sau '/'
int parseTerm() {
    int result = parseFactor();
    while (pos < s.size() && (s[pos] == '*' || s[pos] == '/')) {
        char op = s[pos++];
        int nextFactor = parseFactor();
        if (op == '*')
            result = result * nextFactor;
        else // op == '/'
            result = result / nextFactor; // împărțire întreagă
    }
    return result;
}

// Parsează întreaga expresie: termeni separați prin '+' sau '-'
int parseExpression() {
    int result = parseTerm();
    while (pos < s.size() && (s[pos] == '+' || s[pos] == '-')) {
        char op = s[pos++];
        int nextTerm = parseTerm();
        if (op == '+')
            result = result + nextTerm;
        else // op == '-'
            result = result - nextTerm;
    }
    return result;
}

int main() {
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");

    // Se citește expresia din fișierul de intrare
    getline(fin, s);
    pos = 0;  // inițializare poziție

    // Evaluează expresia
    int result = parseExpression();

    // Scrie rezultatul în fișierul de ieșire
    fout << result;

    fin.close();
    fout.close();
    return 0;
}