Cod sursa(job #2852386)

Utilizator matei.tudoseMatei Tudose matei.tudose Data 19 februarie 2022 12:41:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>
using namespace std;

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

int contor;
string operatii;

int concat(int &poz);
int termen1(int &poz);
int termen2(int &poz);
int evaluare(int &poz);

int concat(int &poz)
{
    int numar0 = 0;
    while (isdigit(operatii[poz]))
        numar0 = (operatii[poz++] -'0') + numar0 * 10;
    return numar0;
}

int termen1(int &poz)
{
    int numar1 = 0;
    if (operatii[poz] == '(')
    {
        poz++;
        numar1 = evaluare(poz);
        poz++;
    }
    else
        numar1 = concat(poz);
    return numar1;
}

int termen2(int &poz)
{
    int numar2 = termen1(poz);
    while (operatii[poz] == '*' || operatii[poz] == '/')
    {
        if (operatii[poz] == '*')
        {
            poz++;
            numar2 *= termen1(poz);
        }
        else if (operatii[poz] == '/')
        {
            poz++;
            numar2 /= termen1(poz);
        }
    }
    return numar2;
}

int evaluare(int &poz)
{
    int rezultat = termen2(poz);
    while (operatii[poz] == '-' || operatii[poz] == '+')
    {
        if (operatii[poz] == '+')
        {
            poz++;
            rezultat += termen2(poz);
        }
        else if (operatii[poz] == '-')
        {
            poz++;
            rezultat -= termen2(poz);
        }
    }
    return rezultat;
}

int main()
{
    fin >> operatii;
    int rasp = evaluare(contor);
    fout << rasp << "\n";
    return 0;
}