Cod sursa(job #2297833)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 6 decembrie 2018 18:07:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>

using namespace std;

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

string s;

int termen(int&);
int expresie(int&);
int factor(int&);
int numar(int&);

int expresie(int &p)
{
    int rasp=termen(p);
    while(p<s.size() and (s[p]=='-' or s[p]=='+'))
    {
        p++;
        if(s[p-1]=='-') rasp-=termen(p);
        else rasp+=termen(p);
    }
    return rasp;
}

int termen(int &p)
{
    int rasp=factor(p);
    while(p<s.size() and (s[p]=='*' or s[p]=='/'))
    {
        p++;
        if(s[p-1]=='*') rasp*=factor(p);
        else rasp/=factor(p);
    }
    return rasp;
}

int factor(int &p)
{
    int rasp=0;
    if(s[p]=='(')
    {
        p++;
        rasp=expresie(p);
        if(s[p]==')') p++;
    }
    else rasp=numar(p);
    return rasp;
}

int numar(int &p)
{
    int rasp=0;
    if(p==6)
    {
        int ok=1;
    }
    while(p<s.size() and s[p]>='0' and s[p]<='9')
    {
        rasp*=10;
        rasp+=(s[p]-'0');
        p++;
    }
    return rasp;
}

int main()
{
    int p=0;
    fin >> s;
    fout << expresie(p);
    return 0;
}


/// O expresie este un termen sau o suma de termeni.
/// Un termen este un factor sau un produs de factori.
/// Un factor este un numar sau o expresie intre paranteze.