Cod sursa(job #1897865)

Utilizator vladavladaa vlada Data 1 martie 2017 18:51:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>

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

int get_number(string &expr,int &ind);
int get_expr_val(string &expr,int &ind);
int get_term(string &expr,int &ind);
int get_factor(string &expr,int &ind);
int get_number(string &expr,int &ind)
{
    int res=0;
    while('0'<=expr[ind] && expr[ind]<='9')
    {
        res=res*10+expr[ind]-'0';
        ind++;

    }
    return res;
}
int get_expr_val(string &expr,int &ind)
{
    int res=get_term(expr,ind);
    while(expr[ind]=='+' or expr[ind]=='-')
    {
        ++ind;
        if(expr[ind-1]=='+')
            res=res+get_term(expr,ind);
        else
            res=res-get_term(expr,ind);
    }

    return res;
}
int get_term(string &expr,int &ind)
{
    int res=get_factor(expr,ind);
    while(expr[ind]=='*' or expr[ind]=='/')
    {
        ++ind;
        if(expr[ind-1]=='*')
            res=res*get_factor(expr,ind);
        else
        if(expr[ind-1]=='/')
            res=res/get_factor(expr,ind);

    }
    return res;
}

int get_factor(string &expr,int &ind)
{
    int res;
    if(expr[ind]!='(')
      {
           res=get_number(expr,ind);
      }
    else
    {
        ++ind;
       res=get_expr_val(expr,ind);
        ++ind;
    }
    return res;
}
int main()
{
    string exp;
    fin>>exp;
    int i=0;
    fout<<get_expr_val(exp,i);
    return 0;
}