Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Алгоритм вычисления выражения в польской форме записи



Читайте также:
  1. I. О ФОРМЕ ДУШ 1 страница
  2. I. О ФОРМЕ ДУШ 2 страница
  3. I. О ФОРМЕ ДУШ 3 страница
  4. I. О ФОРМЕ ДУШ 4 страница
  5. I. О ФОРМЕ ДУШ 5 страница
  6. I. О ФОРМЕ ДУШИ 1 страница
  7. I. О ФОРМЕ ДУШИ 2 страница

1. Просматриваем префиксное (постфиксное) запись справа налево (слева направо)

2. Если встречаем операнд, то помещаем его в стек

3. Если встречаем знак операции,

то выполняем эту операцию, используя в качестве операндов два числа с вершины стека.

Результат помещаем в стек.

4. Если польская запись не закончена, то переходим к 1., иначе к 5.

5. Результат вычисления извлекаем из стека

 

Примеры

Префиксная форма записи Инфиксная форма записи Постфиксная форма записи
     
  (1)  
+ 1 2 1 + 2 1 2 +
+ 1 2 (1 + 2) 1 2 +
+ – 1 2 3 1 – 2 + 3 1 2 – 3 +
* 2 + 3 4 2 * (3 + 4) 2 3 4 + *
– + 1 / * 2 3 4 5 1 + (2 * 3) / 4 – 5 1 2 3 * 4 / + 5 –

Реализация на Паскале

Постфиксное выражение

{Перевод}

Var stek: array [1..100] of char;

 

Procedure push(c:char);

Begin

m:=m+1;

stek[m]:=c;

End;

 

Procedure pop (var c:char);

Begin

c:=stek[m];

m:=m-1;

End;

 

Procedure inf_to_post(s:string);

{Вычисление}

Uses crt;

Var stek: array [1..100] of real;

 

Procedure push(c:real);

 

Procedure pop (var c:real);

 

Function calc_post(s:string):real;

Var

i,code:integer;

Begin

m:=length(s);

n:=m;

for i:=1 to n do

case s[i] of

'0'..'9': begin

val(s[i],x,code);

push(x);

end;

'+': begin

pop(x); pop(y);

res:=x+y;

push(res);

end;

'-': begin

pop(x); pop(y);

res:=x-y;

push(res);

end;

'*': begin

pop(x); pop(y);

res:=x*y;

push(res);

end;

'/': begin

pop(x); pop(y);

res:=x/y;

push(res);

end;

end;

pop(res);

calc_post:=res;

End;

 


Дата добавления: 2015-07-10; просмотров: 202 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.005 сек.)