Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Использование стека


Автор: SVlexs510 12.5.2007, 20:53
Задача: Дано арифметическое выражение с операциями сложения и вычитания в скобочной записи. Используя стек, вычислить его значение. Если оно неправильное, выдать сообщение.

Комментарий: Не могу разобраться со стеком. Дали только эту теорию:  http://www.citforum.ru/programming/c/h21.shtml#2

Автор: Kuvaldis 12.5.2007, 21:07
http://algolist.manual.ru/syntax/revpn.php

Автор: SVlexs510 13.5.2007, 07:47
Спасибо за ссылку, стало понятней.
Попытался проверить пример. Компилятор выдал ошибку в строчке:

Код

/* Выделение памяти */
  if((PTR=malloc(sizeof(struct st)))==NULL)


Подправил на: 
Код

/* Выделение памяти */
if (PTR=(struct st *)malloc(sizeof(struct st)==NULL))  


Программа запускается, но не понял, как вводить данные. 
По моей задачи, как я понял, должно быть так: (5+6)-(7+9)=
Или я не правильно ввожу данные?

Добавлено через 2 минуты и 45 секунд
Мой cpp файл

Автор: dizzy1984 14.5.2007, 13:50
Ваш исходник у меня не скомпилировался на строке
Код

if  PTR=(struct st *)malloc(sizeof(struct st))

Ее нужно поменять на 
Код

if ((PTR=(struct st *)malloc(sizeof(struct st)))==NULL)

,тогда программа запустится, но смысл ее полезного действия был не так вами понят.
Если я не ошибаюсь, то она всего лишь записывает введенное выражение в таком виде (называемом обратная польская запись), что его можно вычислить путем однократного прохода.
В качестве элементов в строке используются символы, а не цифры, как вы предположили.
Скажем если ввести a+b, будет выведено ab+.
Т.е будет получена строка, разбор которой вам и предстоит написать.

Автор: SVlexs510 17.5.2007, 21:32
Спасибо за помощь! Разобрался 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)