Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ префиксна форма записи

Автор: алекс 26.12.2003 22:09

как вычислить значение выражения, записанного в префиксной форме с использованием стека (дека, очереди). есть влом писать код, мона ссылкой на сайт какой кинуться ;)

Автор: trminator 26.12.2003 22:54

Предположим, что у тебя уже есть класс-стек с операциями 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)