Pagini recente » Cod sursa (job #1692525) | Cod sursa (job #2426135) | Cod sursa (job #2860788) | Cod sursa (job #2814226) | Cod sursa (job #3264882)
#include <fstream>
#include <iostream>
#include <stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
stack<char> semne;
int ordine(char c)
{
switch (c)
{
case '+':
case '-':
return 1;
break;
case '*':
case '/':
return 2;
break;
case '(':
return 0;
}
}
int main()
{
string s;
stack<string> f;
fin >> s;
for (int i = 0; i < s.size(); i++)
{
char c = s[i];
// cout << semne.size();
if (isdigit(c))
{
string nr;
while (isdigit(s[i]) && i < s.size())
{
nr += s[i];
i++;
}
i--;
// cout << i << " ";
f.push(nr);
// f.push_back(' ');
}
else
{
if (s[i] == '(')
{
semne.push('(');
}
else if (s[i] == ')')
{
cout << semne.size() << "<< " << '\n';
while (semne.top() != '(')
{
string sa = f.top();
int a = stoi(sa);
f.pop();
string sb = f.top();
int b = stoi(sb);
f.pop();
int r;
if (semne.top() == '+')
{
r = a + b;
}
if (semne.top() == '-')
{
r = a - b;
}
if (semne.top() == '/')
{
r = a / b;
}
if (semne.top() == '*')
{
r = a * b;
}
f.push(to_string(r));
// f += semne.top();
semne.pop();
}
semne.pop();
}
else
{
while (!semne.empty() && ordine(s[i]) <= ordine(semne.top()))
{
string sa = f.top();
int a = stoi(sa);
f.pop();
string sb = f.top();
int b = stoi(sb);
f.pop();
int r;
if (semne.top() == '+')
{
r = a + b;
}
if (semne.top() == '-')
{
r = a - b;
}
if (semne.top() == '/')
{
r = a / b;
}
if (semne.top() == '*')
{
r = a * b;
}
f.push(to_string(r));
// f += semne.top();
semne.pop();
}
semne.push(s[i]);
}
}
}
while (!semne.empty())
{
cout << semne.top() << " ";
string sa = f.top();
int a = stoi(sa);
f.pop();
string sb = f.top();
int b = stoi(sb);
f.pop();
int r;
if (semne.top() == '+')
{
r = a + b;
}
if (semne.top() == '-')
{
r = b - a;
}
if (semne.top() == '/')
{
r = b / a;
}
if (semne.top() == '*')
{
r = a * b;
}
cout << a << " " << b << " " << r << " ";
f.push(to_string(r));
// f += semne.top();
semne.pop();
}
while (!f.empty())
{
fout << f.top() << " ";
f.pop();
}
// fout << f;
return 0;
}