Cod sursa(job #449166)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[1009];
int val[30],pos;
void citire();
int eval_exp(int&);
int eval_termen(int&);
int eval_factor(int&);
int main()
{
citire();
g<<eval_exp(pos);
f.close();
g.close();
return 0;
}
int eval_factor(int &pos)
{
int v=0;
if (s[pos]>='a'&&s[pos]<='z')
{
v=val[s[pos]-'a'+1];
++pos;
return v;
}
if (s[pos]>='0'&&s[pos]<='9')
{
while (s[pos]>='0'&&s[pos]<='9')
{
v=v*10+(s[pos]-'0');
++pos;
}
return v;
}
++pos;
v=eval_exp(pos);
++pos;
return v;
}
int eval_termen(int &pos)
{
int f1=eval_factor(pos),f2;
if (s[pos]=='*')
while (s[pos]=='*')
{
++pos;
f2=eval_factor(pos);
f1*=f2;
}
if (s[pos]=='/')
while (s[pos]=='/')
{
++pos;
f2=eval_factor(pos);
f1/=f2;
}
return f1;
}
int eval_exp(int &pos)
{
int t1=eval_termen(pos),t2;
if(s[pos]=='+')
while (s[pos]=='+')
{
++pos;
t2=eval_termen(pos);
t1+=t2;
}
if(s[pos]=='-')
while (s[pos]=='-')
{
++pos;
t2=eval_termen(pos);
t1-=t2;
}
return t1;
}
void citire()
{
char x;
int v,pos;
f.getline(s,1000);
while (f.get(x))
{
f.get();
f>>v;
f.get();
pos=x-'a'+1;
val[pos]=v;
}
}