Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/74: Рейтинг темы: голосов - 74, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 18
1

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

01.06.2010, 20:53. Показов 15449. Ответов 4
Метки нет (Все метки)

Задание:
Реализовать постфиксный (стековый) калькулятор, 4 действия, вещественные числа, ввод выражений в цикле.

Я вообще не могу понять какой калькулятор мне нужно сделать. Помогите пожалуйста.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2010, 20:53
Ответы с готовыми решениями:

Стековый калькулятор
Помогите пожалуйста, есть калькулятор стековый который работает со сложением вычитанием умножением...

Стековый калькулятор
Нужно создать калькулятор, который сможет выполнять вычисление выражения a+b-c*d/e. Т.е. без...

Стековый калькулятор, как подправить код?
Всем доброго времени суток. Написал стековый калькулятор,который принимает строку в виде обратной...

Стековый калькулятор - успешная компиляция и неуспешная работа
Пытаюсь написать стековый калькулятор работающий с введенной строкой(курсач такой). До скобок пока...

4
372 / 286 / 97
Регистрация: 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');
         }
     }
}
типа того. осталось тлько сделать чтобы цифры были многорадными и чтобы функция пропускала пробелы
0
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 18
01.06.2010, 23:01  [ТС] 3
Спасибо большое!!! Я вообще ничего не понял.)) Буду разбираться.
0
372 / 286 / 97
Регистрация: 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 рекурсивной, если в задании требуется, хотя помоему это глупость.
0
-2 / 0 / 0
Регистрация: 29.05.2010
Сообщений: 76
09.06.2010, 15:38 5
скажите а в Pascal-е можите сделать ,


пмогите пожалуйста
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2010, 15:38

Реализовать постфиксный (стековый) калькулятор
помогите (вопрос жизни и смерть!!!!!!!!!!!!!) :cry:Реализовать постфиксный (стековый)...

Стековый калькулятор
Здравствуйте! Прошу помощи в изменении стекового калькулятора на Ruby. Необходимо, чтобы...

Стековый калькулятор
Помогите сделать стековый калькулятор. У меня есть обычный , нужно переделать в стековый. ...

Стековый калькулятор
Здравствуйте! Пытаюсь реализовать стековый калькулятор, вот мой код: import...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru