Попытка выполнить вычисления для полностью круглых (инфиксных) уравнений, которые считываются в стек и конвертируются в постфикс. Я могу вывести правильную запись постфикса после чтения из массива уравнений, но мои вычисления не верны, когда я пытаюсь запустить свои функции в стеках. Включенный код выглядит как вывод окончательного числа из уравнения по всем трем уравнениям вместо выполнения каких-либо вычислений. Нам были даны все функции push и pop, но мы должны были написать экспоненциальную часть стека «save», где, я думаю, что-то не так. Ответы по модулю 10 по какой-то причине неверны.
Я подумал, что, возможно, он не выполняет вычисления, потому что стек - это набор символов, поэтому я попытался преобразовать в тип int, но не думаю, чтоделаю это правильно, или если в этом и заключается моя проблема.
class STACK
{
private:
char *s;
int N;
public:
STACK(int maxN) {
s = new char[maxN];
N = 0;
}
int empty() {
return N ==0;
}
void push(char item) {
s[N++] = item;
}
char pop() {
return s[--N];
}
};
Дополнение стека для одного из трех уравнений
STACK operation(aSize);
for (int i = 0; i < aSize; i++)
{
if (a[i] == ')') {
cout << operation.pop() << "";
}
if ((a[i] == '+') || (a[i] == '*') || (a[i] == '^')) {
operation.push(a[i]);
}
if ((a[i] >= '0') && (a[i] <= '9')) {
cout << a[i] << "";
}
}
cout << endl;
// evalutates infix notation in modulo 10
for (int i = 0; i < aSize; i++)
{
if (a[i] == '+') {
operation.push((operation.pop() + operation.pop()) % 10);
}
if (a[i] == '*') {
operation.push((operation.pop() * operation.pop()) % 10);
}
if ((a[i] >= '0') && (a[i] <= '9')) {
operation.push(a[i]);
}
if (a[i] == '^') {
exponent = operation.pop();
base = operation.pop();
result = pow(base, exponent);
result = result % 10;
operation.push(result);
}
}
cout << operation.pop() << " in modulo 10." << endl;
operation.empty();
Входные уравнения 1, 2 и 3:
((2+(5^2))+7)
((((2+5)*7)+((9*3)*2))^2)
((((2*3)*(4*6))*7)+(((7+8)+9)*((2+4)*((7+8)+9))))
Требуемый выход:
252^+7+
4 in modulo 10
25+7*93*2*+2^
9 in modulo 10
23*46*7*789++24+78+9+**+
4 in modulo 10
Фактический вывод:
252^+7+
7 in modulo 10.
25+7*93*2*+2^
2 in modulo 10.
23*46**7*78+9+24+78+9+**+
9 in modulo 10.