Форум программистов, компьютерный форум CyberForum.ru

Постфиксный (стековый) калькулятор (Рекурсия) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.98
killer007
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 18
01.06.2010, 20:53     Постфиксный (стековый) калькулятор (Рекурсия) #1
Задание:
Реализовать постфиксный (стековый) калькулятор, 4 действия, вещественные числа, ввод выражений в цикле.

Я вообще не могу понять какой калькулятор мне нужно сделать. Помогите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2010, 20:53     Постфиксный (стековый) калькулятор (Рекурсия)
Посмотрите здесь:

Переопределение операции: постфиксный унарный + C++
Префиксный и постфиксный инкремент C++
Постфиксный и префиксный декремент C++
C++ Стековый калькулятор
Стековый калькулятор - успешная компиляция и неуспешная работа C++
C++ Как выполняется постфиксный и префиксный инкремент?
Перегруженный постфиксный оператор ++ C++
C++ постфиксный инкремент
Инкремент постфиксный и префиксный - принцип работы C++
Стековый калькулятор, как подправить код? C++
C++ Суффиксальный и постфиксный инкремент/дикремент
C++ Указатель на постфиксный инкремент x

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
01.06.2010, 22:35     Постфиксный (стековый) калькулятор (Рекурсия) #2
нужно сделать что бы на вход подавалось арефмитическое выражение а твоя программа считала результат.
например:
8*4+2(5-1) в постфиксной нотации будет 8 4 * 2 5 1- * +
это подается на вход, если непонятки с постфиксной нотацией - на википедии все очень четко расписано.
Алгоритм такой:
Считываем один символ, если это операнд то кладем его в стек, если это знак арифметической операции то вынимаем два операнда из стека и производим над ними эту операцию и кладем результат в стек. и так пока символы не закончатся во входном потоке. в конце работы результат будудет лежать на вершине стека.
должно быть, что-то вроде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void stackmachine(stack<int>& S)
{
     char c;
     while (cin >> c,c!='\n')
     {
         switch(c)
         {
              case '+':{ // если операция сложения
                      int op1=S.top();
                      S.pop();
                      int op2=S.top();
                      S.pop();
                      int result=op1 + op2;
                      S.push(result);
              }
              // ...
              default: // если цифра
                         S.push(c-'0');
         }
     }
}
типа того. осталось тлько сделать чтобы цифры были многорадными и чтобы функция пропускала пробелы
killer007
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 18
01.06.2010, 23:01  [ТС]     Постфиксный (стековый) калькулятор (Рекурсия) #3
Спасибо большое!!! Я вообще ничего не понял.)) Буду разбираться.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
02.06.2010, 12:33     Постфиксный (стековый) калькулятор (Рекурсия) #4
чтобы цифры были многорадными
я опечатался, хотел написать "многоразрядными"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <stack>
using namespace std;
void stackmachine(stack<double>& S)
{
    char c;
    while (cin.get(c),c!='\n')
    {
        switch(c)
        {
            case '+':{ // если операция сложения
                double op1=S.top();
                S.pop();
                double op2=S.top();
                S.pop();
                double result=op2 + op1;
                S.push(result);
            }break;
            case '-':{ // если операция вычитания
                double op1=S.top();
                S.pop();
                double op2=S.top();
                S.pop();
                double result=op2 - op1;
                S.push(result);
            }break;
            case '*':{ // если операция умножения
                double op1=S.top();
                S.pop();
                double op2=S.top();
                S.pop();
                double result=op2 * op1;
                S.push(result);
            }break;
            case '/':{ // если операция деления
                double op1=S.top();
                S.pop();
                double op2=S.top();
                S.pop();
                double result=op2 / op1;
                S.push(result);
            }break;
            default: // если цифра
                S.push(c-'0');
        }
    }
}
int main()
{
    stack<double> Stack;
    stackmachine(Stack);
    cout << Stack.top() << '\n';
    return 0;
}
вот, приведи к приличному виду. сделай пропуск разделителей (пробел, табуляция) и обработку ошибок, сделай так чтобы действительные числа считывались (подсказка, в switch(c) после default: надо вставить функцию, которая будет считывать число), сделай функцию stackmachine рекурсивной, если в задании требуется, хотя помоему это глупость.
Марта_киска
 Аватар для Марта_киска
-2 / 0 / 0
Регистрация: 29.05.2010
Сообщений: 76
09.06.2010, 15:38     Постфиксный (стековый) калькулятор (Рекурсия) #5
скажите а в Pascal-е можите сделать ,


пмогите пожалуйста
Yandex
Объявления
09.06.2010, 15:38     Постфиксный (стековый) калькулятор (Рекурсия)
Ответ Создать тему
Опции темы

Текущее время: 03:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru