Pagini recente » Cod sursa (job #578079) | Cod sursa (job #1258910) | Cod sursa (job #2183946) | Cod sursa (job #2232098) | Cod sursa (job #763018)
Cod sursa(job #763018)
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>
using namespace std;
std::string a;
long termen(string c,int &it,int * arg);
long factor(string c,int &it,int * arg);
long exeval(string c,int &it,int * arg)
{
long r = termen(c,it,arg);
while(c[it] == '+' || c[it] == '-')
{
if(c[it] == '+')
{
++it;
r+=termen(c,it,arg);
}
else if(c[it] == '-')
{
++it;
r-=termen(c,it,arg);
}
}
return r;
}
long termen(string c,int &it,int * arg)
{
long r = factor(c,it,arg);
while(c[it] == '*' || c[it] == '/')
{
if(c[it] == '*')
{
++it;
r*=factor(c,it,arg);
}
else if(c[it] == '/')
{
++it;
r/=factor(c,it,arg);
}
}
return r;
}
long factor(string c,int &it,int * arg)
{
long r = 0;
if(c[it] == '(')
{
++it;
r = exeval(c,it,arg);
++it;
}
else if(c[it] >= 'a' && c[it] <= 'z')
r = arg[c[++it-1]-'a'];
else
{
while(c[it] >= '0' && c[it] <= '9')
{
r = r*10 + c[it] - '0';
++it;
}
}
return r;
}
int main()
{
std::ifstream in("evaluare.in");
in >> a;
int arg[10];
arg[0] = 5;
arg[1] = 3;
int it = 0;
std::ofstream out("evaluare.out");
out << exeval(a,it,arg);
return 0;
}