Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Demeta
0 / 0 / 0
Регистрация: 13.11.2016
Сообщений: 12
#1

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

14.05.2017, 17:35. Просмотров 345. Ответов 1

Нужно создать калькулятор, который сможет выполнять вычисление выражения 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2017, 17:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Стековый калькулятор (C++):

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

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

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

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

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

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

1
lawr
372 / 266 / 125
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2017, 00:27
Привет! Вот еще темы с ответами:

Калькулятор - C++
Строковый калькулятор методом обратной польской нотации, со скобками. Есть у кого нить код? Заранее спасибо.

Калькулятор на С++ - C++
калькулятор в принципе готов, надо только сделать запрет деления на 0, помогите кто чем может #include&lt;stdio.h&gt; #include&lt;conio.h&gt; ...

Калькулятор - C++
Подскажите, что мне сделать с операндом Result чтобы функция main запускалась заново после того как есть Result. #include &lt;iostream&gt; ...

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


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

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

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