Cod sursa(job #1889511)

Utilizator vasi461Vasiliu Dragos vasi461 Data 22 februarie 2017 19:11:10
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
using namespace std;

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

int p;
string s;

int termeni();
int factori();
int expresii();

///paranteze si numere
int expresii() 
{
    if(s[p] == '(')
    {
        p++;
        int nr = termeni();
        p++;
        return nr;
    }
    else
    {
        int nr = 0;
        while(s[p] >= '0' and s[p] <= '9')
        {
            nr = nr * 10 + (s[p] - '0');
            p++;
        }
        return nr;
    }
}

///inmultiri si impartiri
int factori()
{
    int r = expresii();
    while(s[p] == '*' or s[p] == '/')
    {
        p++;
        if(s[p - 1] == '*')
        {
            r *= expresii();
        }
        else
        {
            r /= expresii();
        }
    }
    return r;
}

///adunari si scaderi
int termeni()
{
    int r = factori();
    while(s[p] == '+' or s[p] == '-')
    {
        p++;
        if(s[p - 1] == '+')
        {
            r += factori();
        }
        else
        {
            r -= factori();
        }
    }
    return r;
}

int main()
{
    p = 0;
    cin >> s;
    cout << termeni() << '\n';
    return 0;
}