Pagini recente » Cod sursa (job #515752) | Cod sursa (job #2202977) | Cod sursa (job #2513094) | Cod sursa (job #938776) | Cod sursa (job #3228666)
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int exprs(int &pos);
int term(int &pos);
int constn(int &pos);
char sir[100010];
int main()
{
fin>>sir;
int pos=0;
fout<<exprs(pos);
return 0;
}
int exprs(int &pos)
{
int vp=term(pos);
char op;
//fout<<vp<<'\n';
while(sir[pos]=='+' || sir[pos]=='-')
{
//fout<<vp<<'\n';
op=sir[pos];
pos++;
vp=vp+(op=='+' ? term(pos) : -term(pos));
}
return vp;
}
int term(int &pos)
{
int vp=0, tmv=0;
char op;
if(sir[pos]=='(')
{
pos++;
vp=exprs(pos);
pos++;
}
else
vp=constn(pos);
while(sir[pos]=='*' || sir[pos]=='/')
{
op=sir[pos];
pos++;
if(sir[pos]=='(')
{
pos++;
tmv=exprs(pos);
pos++;
}
else
tmv=constn(pos);
if(op=='*')
vp*=tmv;
else
vp/=tmv;
}
return vp;
}
int constn(int &pos)
{
int nr=0;
while(isdigit(sir[pos]))
nr=nr*10+sir[pos]-'0', pos++;
return nr;
}