Cod sursa(job #2870098)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 12 martie 2022 08:59:02
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>

using namespace std;

const string filename = "evaluare";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");

int ind;
string s;

int prio1();
int prio2();
int prio3();
int getnr();
bool cifra(char c);

int main()
{
    fin >> s;
    fout << prio3();
    return 0;
}

int prio3()
{
    //fout << 3;
    int nr = prio2();
    while(s[ind] == '+' || s[ind] == '-')
    {
        ind++;
        if(s[ind - 1] == '+')
            nr += prio2();
        if(s[ind - 1] == '-')
            nr -= prio2();
    }
    return nr;
}

int prio2()
{
    //fout << 2;
    int nr = prio1();
    while(s[ind] == '*' || s[ind] == '/')
    {
        ind++;
        if(s[ind - 1] == '*')
            nr *= prio1();
        if(s[ind - 1] == '/')
            nr /= prio1();
    }
    return nr;
}

int prio1()
{
    //fout << 1;
    int nr = 0;
    if(s[ind] == '(')
    {
        ind++;
        nr = prio3();
        ind++;
    }
    else
        nr = getnr();
    return nr;
}

bool cifra(char c)
{
    return '0' <= c && c <= '9';
}

int getnr()
{
    //fout << "G";
    int nr = 0;
    while(cifra(s[ind]))
    {
        nr = nr * 10 + (s[ind] - '0');
        ind++;
    }
    return nr;
}