Cod sursa(job #2832713)

Utilizator monicab_Balan Monica monicab_ Data 14 ianuarie 2022 10:51:06
Problema Evaluarea unei expresii Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>

using namespace std;

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

string expresie;
int pozitie;

double EvalExpresie();

double EvalFactor()
{
    return EvalExpresie();
}

double EvalTermen()
{
    double val = EvalFactor();

    while (expresie[pozitie] == '*' || expresie[pozitie] == '/')
    {
        char op = expresie[pozitie++];
        double factor = EvalFactor();
        if (op == '*')
            val *= factor;
        else
            val /= factor;
    }
    return val;
}

double EvalExpresie()
{
    // cazul in care expresia este facuta dintr-un numar
    if (expresie[pozitie]>='0' && expresie[pozitie]<='9')
    {
        double val = 0;
        while (expresie[pozitie]>='0' && expresie[pozitie]<='9')
        {
            val = 10 * val + expresie[pozitie] - '0';
            pozitie++;
        }
        return val;
    }

    if(expresie[pozitie] != '(')
        return 0;

    pozitie++;

    // luam primul termen din expresie
    double val = EvalTermen();

    while (expresie[pozitie] != ')') {
        char op = expresie[pozitie++];
        double termen = EvalTermen();
        if (op == '+')
            val += termen;
        else if (op == '-')
            val -= termen;
        else
            return 0;
    }

    // trecem de ')'
    pozitie++;
    return val;
}

int main()
{
    in >> expresie;
    pozitie = 0;

    expresie = "(" + expresie + ")";
    double rezultat = EvalExpresie();

    out << rezultat << '\n';
}