Pagini recente » Cod sursa (job #2577263) | Cod sursa (job #487894) | Cod sursa (job #3032081) | Cod sursa (job #541735) | Cod sursa (job #2190613)
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
#include <cctype>
using namespace std;
ifstream f("evaluare.in");
ofstream o("evaluare.out");
string s;
stack <int> s_nr;
stack <char> s_sm;
int grad(char c)
{
switch (c)
{
case '(':
return 0;
case ')':
return 0;
case '+':
return 1;
case '-':
return 1;
case '*':
return 2;
case '/':
return 2;
default:
return 0;
}
}
int operatie(int nr1, int nr2, char c)
{
switch(c)
{
case '+':
return nr1 + nr2;
case '-':
return nr1 - nr2;
case '*':
return nr1 * nr2;
case '/':
return nr1 / nr2;
default:
return 0;
}
}
void do_operation()
{
int nr2 = s_nr.top();
s_nr.pop();
int nr1 = s_nr.top();
s_nr.pop();
char semn = s_sm.top();
s_sm.pop();
int dbg = operatie(nr1,nr2,semn);
s_nr.push(dbg);
return;
}
int main()
{
f >> s;
s += ')';
int len = s.size(), i = 0;
s_sm.push('(');
while(i < len)
{
if(isdigit(s.at(i)))
{
int nr = 0;
while(i < len && isdigit(s.at(i)))
{
nr = nr * 10 + (int)(s.at(i)) - '0';
i++;
}
s_nr.push(nr);
}
else
{
if(s.at(i) == '(')
{
s_sm.push('(');
}
else if(s.at(i) == ')')
{
while(grad(s_sm.top()) > grad(s.at(i)))
{
do_operation();
}
s_sm.pop();
}
else
{
while(grad(s_sm.top()) >= grad(s.at(i)))
{
do_operation();
}
s_sm.push(s.at(i));
}
i++;
}
}
o << s_nr.top();
return 0;
}