Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Calculate() {
- // операции в стеке закончились - завершаем вычисление
- // в стеке чисел останется последнее число - результат всех вычислений
- if (operations.empty())
- return;
- // получаем следующее число сверху, удаляем его оттуда
- double number = numbers.top();
- numbers.pop();
- // аналогично с символом операции
- char operation = operations.top();
- operations.pop();
- if (operation == '*' || operation == '/') {
- // если это первичные операции (умножение или деление),
- // то сначала получаем следующее число, производим вычисление, затем
- // записываем результат на место этого числа
- double next = numbers.top();
- numbers.pop();
- double result = operation == '*' ? next * number : next / number;
- numbers.push(result);
- // только после этого переходим к следующей операции
- Calculate();
- }
- else {
- // иначе мы имеем дело со вторичными операциями (сумма и разность)
- // далее может быть первичная - сначала производим следущее вычисление
- Calculate();
- // только затем получаем следующее число, которое также
- // может быть результатом следующих выполненных первичных операций
- double next = numbers.top();
- numbers.pop();
- // аналогично записываем результат вычисления вместо него
- double result = operation == '+' ? next + number : next - number;
- numbers.push(result);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement