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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.98
killer007
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 18
#1

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

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

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

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

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

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

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

постфиксный инкремент - C++
class Inkrement { Inkrement(){}; Inkrement &operator++(int) { Inkrement temp = *this; ++*this; return temp; ...

Постфиксный и префиксный декремент - C++
#include <iostream> using std::cout; int main() { int a=5; cout << (--a)-- << " "; cout << a << " "; cout << (--a)-- <<...

Префиксный и постфиксный инкремент - C++
#include <iostream> using namespace std; int main() { int c=0; cout<<с++<<++с<<++с<<с++<<endl; return 0; ...

Перегруженный постфиксный оператор ++ - C++
Есть задание: Создать класс "нота": название, октава, продолжительность звучания. Производные: "звук" (частота) и "изображение"...

Указатель на постфиксный инкремент x - C++
Почему так нельзя делать? int *p = &(x++); Вроде же все ясно должно быть компилятору

Суффиксальный и постфиксный инкремент/дикремент - C++
Числа везде равны. Такой вопрос: Сначала с обоих сторон в скобках выполняется суффиксальный и постфиксный инкремент/дикремент и потом уже...

Переопределение операции: постфиксный унарный + - C++
Привет. Делаю переопределение операции для стека, нужно сделать постфиксный +, как добавление нового элемента. stack& operator+() { ...

Как выполняется постфиксный и префиксный инкремент? - C++
Растолкуйте! Обычно, а = с++ толкуется как а = с+1 тогда а = ++с есть а = 1+с Если использовать последнюю запись (а = 1+с),верно...

Инкремент постфиксный и префиксный - принцип работы - C++
Hello World! Нужна ваша помощь, мозг отказывается понимать :wall:! Набрал код: #include <iostream> using namespace std; int...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
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     Постфиксный (стековый) калькулятор (Рекурсия)
Ответ Создать тему
Опции темы

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