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

Стековый калькулятор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
antizeroNk
Сообщений: n/a
18.10.2013, 14:45     Стековый калькулятор #1
Помогите пожалуйста, есть калькулятор стековый который работает со сложением вычитанием умножением и делением.
Нужно сделать, чтоб он считал со скобками еще, т.е. то что в скобках считается в первую очередь и только потом все остальное.
Помогите пожалуйста!
Сдавать зачет нужно, буду очень благодарен за помощь!

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 14:45     Стековый калькулятор
Посмотрите здесь:

Постфиксный (стековый) калькулятор (Рекурсия) C++
Калькулятор C++
Калькулятор C++
Калькулятор C++
C++ Калькулятор
калькулятор C++
C++ Калькулятор
Стековый калькулятор - успешная компиляция и неуспешная работа C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
18.10.2013, 14:52     Стековый калькулятор #2
Смотрите обратную польскую нотацию.
Мой код с первого семестра, сейчас я его не проверял и в суть не вникал.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include<iostream>
#include<conio.h>
#include<clocale>
using namespace std;
 
struct st
{
       char c;
       struct st *next;
};
struct st *push (struct st *, char);
char DEL (struct st **);
int PRIOR (char);
 
int main()
{
    setlocale(LC_ALL,"Russian");
    struct st *OPERS = NULL;
    char a[80], outstring[80];
    int k, point;
    do
    {
        cout<<"Введите выражение (в конце поставьте '=') : ";
        fflush (stdin);
        cin.getline (a, 80);
        k=point=0;
        while (a[k]!= '\0' && a[k]!= '=')
        {
              if (a[k] == ')') //выталкиваем из стека все знаки операций до ближ. 
              {                //открывающей скобки
                       while ((OPERS->c)!= '(')
                           outstring[point++] = DEL(&OPERS);
                       DEL(&OPERS); // удаляем из стека саму открыв. скобку
              }
              if (a[k]>= 'a' && a[k] <= 'z')
                  outstring[point++] = a[k];
              if (a[k] == '(')
                  OPERS = push(OPERS, '(');
              if (a[k] == '+' || a[k] == '-' || a[k] == '/' || a[k] == '*')
              {
                       if (OPERS == NULL) // если стек пуст - записываем в него операцию
                           OPERS = push(OPERS, a[k]);
                       else
                       if (PRIOR(OPERS->c) < PRIOR(a[k]))
                           OPERS = push(OPERS, a[k]);
                       else
                       {
                           while ((OPERS!= NULL) && (PRIOR(OPERS->c) >= PRIOR(a[k])))
                               outstring[point++] = DEL(&OPERS);
                           OPERS = push(OPERS, a[k]);
                       }
              }
              k++;
        }
        while (OPERS!= NULL)
            outstring[point++] = DEL(&OPERS);
        outstring[point] = '\0';
        cout<<endl;
        for (int i=0; i<point; i++)
            cout<<outstring[i];
        cout<<endl;
        fflush(stdin);
        cout<<"Повторить (y/n)? ";
    }
    while (getch() != 'n');
    return 0;
}
 
struct st *push (struct st *HEAD, char a)
{
       st* PTR = new st;
       PTR->c = a; // Инициализация созданной вершины
       PTR->next = HEAD; // Подключение её к стеку
       return PTR; // PTR - новая вершина
}
 
char DEL (struct st **HEAD)
{
     struct st *PTR;
     char a;
     if (*HEAD == NULL)
     return '\0';
     PTR = *HEAD; // адрес вершины стека
     a = PTR->c;
     *HEAD = PTR->next;
     free(PTR);
     return a;
}
 
int PRIOR (char a)
{
    switch(a)
    {
             case '*':
             case '/':
                  return 3;
             case '-':
             case '+':
                  return 2;
             case '(':
                  return 1;
    }
}
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,919
Записей в блоге: 1
18.10.2013, 15:19     Стековый калькулятор #3
EVAL.C - A simple mathematical expression evaluator in C
Yandex
Объявления
18.10.2013, 15:19     Стековый калькулятор
Ответ Создать тему
Опции темы

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