Pagini recente » Cod sursa (job #565859) | Cod sursa (job #295947) | Cod sursa (job #2551295) | Cod sursa (job #934045) | Cod sursa (job #1896998)
#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;
}