Pagini recente » Cod sursa (job #2574462) | Cod sursa (job #2481459) | Cod sursa (job #2554265) | Cod sursa (job #1596605) | Cod sursa (job #1897865)
#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;
}