0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 12
1

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

14.05.2017, 17:35. Показов 11349. Ответов 1

Author24 — интернет-сервис помощи студентам
Нужно создать калькулятор, который сможет выполнять вычисление выражения a+b-c*d/e. Т.е. без скобок, степеней и прочего.
Калькулятор должен представлять собой два стека, в один помещаются значения, в другой - операторы +-/*
Есть прога, которую заявили, как "шаблон" для калькулятора

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
#include <iostream>
 
struct stek
{
    int value;
    struct stek *next; // указатель на следующий элемент списка (стека)
};
 
void push(stek* &NEXT, const int VALUE)
{
    stek *MyStack = new stek; // объявляем новую динамическую переменную типа stek
    MyStack->value = VALUE; // записываем значение, которое помещается в стек
    MyStack->next = NEXT; // связываем новый элемент стека с предыдущим
    NEXT = MyStack; // новый элемент стека становится его вершиной
}
 
int pop(stek* &NEXT)
{
    int temp = NEXT->value; // извлекаем в переменную temp значение в вершине стека
    stek *MyStack = NEXT; // запоминаем указатель на вершину стека, чтобы затем
    // освободить выделенную под него память
    NEXT = NEXT->next; // вершиной становится предшествующий top элемент
    delete MyStack; // освобождаем память, тем самым удалили вершину
    std::cout<<temp; //Вывод текущего элемента на экран
    return temp; // возвращаем значение, которое было в вершине
}
 
int main()
{
    stek *p=0;
 
    push(p,100); //Положили в стек 100
    push(p,200); //Положили в стек 200
 
    pop(p); //вывели на экран текущий элемент стека = 200
    pop(p); //вывели на экран текущий элемент стека = 100
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2017, 17:35
Ответы с готовыми решениями:

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

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

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

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

1
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
16.05.2017, 00:27 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
#include <iostream> 
#include <string> 
#include <stack> 
int priority(char oper){ 
if (oper == '+' || oper == '-') 
return 1; 
if (oper == '*' || oper == '/') 
return 2; 
} 
int main(){ 
std::string pharse, prn; 
std::cin » pharse; 
std::stack<char> tmp; 
std::stack <double> result; 
for (int i = 0; i < pharse.size(); i++) 
{ 
if (isdigit(pharse[i])) 
prn.push_back(pharse[i]); 
else{ 
prn.push_back(' '); 
while (!tmp.empty() && priority(pharse[i]) <= priority(tmp.top())) 
{ 
prn.push_back(tmp.top()); 
tmp.pop(); 
} 
tmp.push(pharse[i]); 
} 
} 
while (!tmp.empty()){ 
prn.push_back(tmp.top()); 
tmp.pop(); 
} 
for (int i = 0; i < prn.size(); i++) 
{ 
if (isdigit(prn[i])) 
{ 
double num = double(prn[i] - '0'); 
for (++i; isdigit(prn[i]) && i < prn.size(); i++){ 
num *= 10; num += double(prn[i] - '0'); 
} 
result.push(num); 
if (prn[i] != ' ') 
i--; 
} 
else{ 
double r = result.top(); 
result.pop(); 
double l = result.top(); 
result.pop(); 
switch (prn[i]){ 
case'+': 
result.push(l + r); 
break; 
case'-': 
result.push(l - r); 
break; 
case'*': 
result.push(l * r); 
break; 
case'/': 
result.push(double(l / r)); 
break; 
} 
} 
} 
std::cout«'=' « result.top() « std::endl; 
}
библиотечный стек меняешь на самописный и вуаля.
1
16.05.2017, 00:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2017, 00:27
Помогаю со студенческими работами здесь

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

Как преобразовать обычный калькулятор в калькулятор использующий класс стек?
#include &lt;iostream&gt; int main(){ int a = 0; int b = 0; char operation; ...

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

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


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

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

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