Cod sursa(job #1896998)

Utilizator vladavladaa vlada Data 1 martie 2017 08:49:31
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>

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

string expr;
int ind;
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(isdigit(expr[ind]))
    {
        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()
{
    fin>>expr;
    fout<<get_expr_val(expr,0);
    return 0;
}