Pagini recente » Cod sursa (job #673149) | Cod sursa (job #666258) | Cod sursa (job #531434) | Cod sursa (job #549276) | Cod sursa (job #2358657)
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
const int dim = 100005;
char s[dim];
int operant(char a)
{
if (a == '+' || a == '-')
{
return 1;
}
if (a == '*' || a == '/')
{
return 2;
}
return 0;
}
int AplicareOp(int a,int b,char op)
{
switch (op)
{
case '+' :
return a+b;
case '-' :
return a-b;
case '*' :
return a*b;
case '/' :
return a/b;
}
}
int Evalueaza()
{
int i = 0;
stack <int> val;
stack <char> op;
while (s[i] != NULL)
{
if (s[i] == '(')
{
op.push(s[i]);
}
else if (s[i] >= '0' && s[i] <= '9')
{
int valu = 0;
while (s[i]!= NULL && s[i] >= '0' && s[i] <= '9')
{
valu = valu*10 + s[i] - '0';
i++;
}
i--;
val.push(valu);
}
else if (s[i] == ')')
{
while (!op.empty() && op.top() != '(')
{
int val2 = val.top();
val.pop();
int val1 = val.top();
val.pop();
char op1 = op.top();
op.pop();
val.push(AplicareOp(val1,val2,op1));
}
op.pop();
}
else
{
while (!op.empty() && operant(op.top()) >= operant(s[i]))
{
int val2 = val.top();
val.pop();
int val1 = val.top();
val.pop();
char op1 = op.top();
op.pop();
val.push(AplicareOp(val1,val2,op1));
}
op.push(s[i]);
}
i++;
}
while (!op.empty())
{
int val2 = val.top();
val.pop();
int val1 = val.top();
val.pop();
char op1 = op.top();
op.pop();
val.push(AplicareOp(val1,val2,op1));
}
return val.top();
}
int main()
{
in >> s;
out << Evalueaza();
return 0;
}