Pagini recente » Cod sursa (job #1433021) | Cod sursa (job #2375369) | Cod sursa (job #3196655) | Cod sursa (job #557276) | Cod sursa (job #3000546)
#include <iostream>
#include <fstream>
#include <stack>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char expresie[100002];
stack<int> nr;
stack<char> op;
int prioritate(char opr)
{
if (opr == '+' || opr == '-')
{
return 1;
}
if (opr == '*' || opr == '/')
{
return 2;
}
return 0;
}
int operatii(int nr1, int nr2, int opr)
{
if (opr == '+')
{
return nr1 + nr2;
}
if (opr == '-')
{
return nr2 - nr1;
}
if (opr == '*')
{
return nr1 * nr2;
}
if (opr == '/')
{
return nr2 / nr1;
}
}
void solveopr()
{
char opr = op.top();
op.pop();
int nr1 = nr.top();
nr.pop();
int nr2 = nr.top();
nr.pop();
int res = operatii(nr1, nr2, opr);
nr.push(res);
}
void solveparanteze()
{
while (op.top() != '(')
{
solveopr();
}
op.pop();
}
int main()
{
f >> expresie;
int len = strlen(expresie);
expresie[len] = ')';
expresie[len + 1] = NULL;
op.push('(');
for (int i = 0; i <= len; i++)
{
if (expresie[i] == '(')
{
op.push(expresie[i]);
}
else if (expresie[i] == ')')
{
solveparanteze();
}
else if (isdigit(expresie[i]))
{
if (i > 0 && isdigit(expresie[i-1]))
{
int st = nr.top();
nr.pop();
int numar = st * 10 + (expresie[i] - '0');
nr.push(numar);
}
else
{
nr.push(expresie[i] - '0');
}
}
else
{
while (prioritate(expresie[i]) <= prioritate(op.top()))
{
solveopr();
}
op.push(expresie[i]);
}
}
g << nr.top();
return 0;
}