![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
алекс |
![]()
Сообщение
#1
|
Гость ![]() |
как вычислить значение выражения, записанного в префиксной форме с использованием стека (дека, очереди). есть влом писать код, мона ссылкой на сайт какой кинуться ;)
|
trminator |
![]()
Сообщение
#2
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
Предположим, что у тебя уже есть класс-стек с операциями push, pop, volume (volume говорит, сколько элементов в стеке). А выражение пусть записано как массив таких записей:
Код type TElem = record is_sign : boolean; {Является ли знаком операции} value : integer {Если операция, то 1 = + 2 = - 3 = * 4 = /, иначе само значениечисла} end; Массив назовем, например, A. Заведем два стека - ops и nums. В первом храним операции, во втором - операнды. Дальше делаем что-то такое: Код for i:=1 to N do if A[i].is_sign then nums.push(A[i].value) else begin nums.push(A[i].value); if nums.volume = 2 then begin y:=nums.pop; x:=nums.pop; op:=pos.pop; nums.push(calc(x, y, op)) end; end; Функция calc просто считает значение x <op> y (х [+-*/] y) -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 20:34 |