Pagini recente » Borderou de evaluare (job #1661549) | Cod sursa (job #2508586) | Cod sursa (job #2341046) | Cod sursa (job #2510453) | Cod sursa (job #3237818)
#include <fstream>
#include <string>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string e;
int i, j;
int inside_expresie();
void second_ops(int& x);
int getnumber();
int inside_expresie()
{
int x;
if (e[i] == '(')
{
i++;
x = inside_expresie();
}
else
x = getnumber();
while (e[i] != ')' && i < e.size())
{
second_ops(x);
if (e[i] == '+' || e[i] == '-')
{
int bs = e[i] == '+';
i++;
int y = getnumber();
second_ops(y);
if (bs == 1)
x += y;
else
x -= y;
}
}
i++;
return x;
}
void second_ops(int& x)
{
if (e[i] != '*' && e[i] != '/')
return;
bool b = e[i] == '*';
i++;
int y;
if (e[i] == '(')
y = inside_expresie();
else
y = getnumber(); ///getnumber e caz special al inside_expresie(), cand expresia este denaturalizata (are un singur termen - variabila)
if (b == 0)
x = x / y;
else
x = x * y;
second_ops(x);
}
int getnumber()
{
int x = 0;
while (e[i] >= '0' && e[i] <= '9')
{
x = x * 10 + (e[i] - '0');
i++;
}
return x;
}
int main()
{
in >> e;
out << inside_expresie();
}