12 PP ONP

background image

Podstawy programowania

wykład 13

Dr inż. Jakub Bauman

jakub.bauman@gmail.com

background image

Odwrotna notacja polska

Dr inż. Jakub Bauman

jakub.bauman@gmail.com

background image

Odwrotna notacja polska

Odwrotna notacja polska (ONP, ang. Reverse Polish
Notation
, RPN) – jest sposobem zapisu wyrażeń
arytmetycznych, w którym znak wykonywanej operacji
umieszczony jest po operandach (zapis postfiksowy), a nie
pomiędzy nimi jak w konwencjonalnym zapisie
algebraicznym (zapis infiksowy) lub przed operandami jak w
zwykłej notacji polskiej (zapis prefiksowy). Zapis ten
pozwala na całkowitą rezygnację z użycia nawiasów w
wyrażeniach, jako że jednoznacznie określa kolejność
wykonywanych działań.

background image

Zalety ONP

ONP bardzo ułatwia wykonywanie na komputerze obliczeń
z nawiasami i zachowaniem kolejności działań. Zarówno
algorytm konwersji notacji konwencjonalnej (infiksowej) na
odwrotną notację polską (postfiksową), jak i algorytm
obliczania wartości wyrażenia danego w ONP są bardzo
proste i wykorzystują stos.

background image

Historia ONP

Odwrotna notacja polska została opracowana przez
australijskiego naukowca Charlesa Hamblina jako
„odwrócenie” beznawiasowej notacji polskiej Jana
Łukasiewicza na potrzeby zastosowań informatycznych.

background image

Zastosowania ONP

Jest używana w niektórych językach programowania (np.
FORTH, Postscript) oraz w niektórych kalkulatorach
naukowych (np. Hewlett-Packard, National Semiconductor).
Programy komputerowe kompilujące program dokonują
analizy wyrażenia arytmetycznego, przekształcając je na ciąg
instrukcji odpowiadający odwrotnej notacji polskiej.
Wyrażenie to jest obliczane podczas wykonywania programu.

background image

Przykłady wyrażeń w ONP

a+b a b +

(a+b)*d a b+d *

(a+(b*c)≡ abc*+

(a+b)*(c+d)≡ a b +c d +*

((a+b)*((c+(d+e))

(e+ f )

)))≡ a b +c d e++ e f + ^*

background image

1. Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub ograniczniku).

2. Jeśli ten element jest:

a) stałą lub nazwą zmiennej – przekaż go na wyjście;

b) operatorem:

− jeśli priorytet badanego operatora jest wyższy od priorytetu operatora zajmującego szczyt stosu lub jeśli stos
jest pusty – dopisz go na stos;

− jeśli na szczycie stosu znajduje się operator o wyższym lub równym priorytecie – odczytaj ze stosu i prześlij na
wyjście wszystkie operatory o priorytecie wyższym bądź równym aż do wystąpienia na szczycie stosu operatora o
priorytecie niższym od priorytetu operatora nadchodzącego z wejścia; element badany dopisz na stos;

c) nawiasem:

− jeśli trafiłeś na nawias otwierający – dopisz go na stos;

− jeśli trafiłeś na nawias zamykający: zdejmij wszystkie operatory ze stosu i przekaż je na wyjście aż do trafienia na
nawias otwierający; nawiasów nie wypisuj na wyjście.

3. Jeśli badane wyrażenie

a) nie zostało wyczerpane – wróć do punktu pierwszego;

b) zostało wyczerpane – odczytaj wszystkie operatory ze stosu i przekaż je na wyjście
automatu.

Algorytm konwersji na ONP

background image

operator

priorytet

funkcja

lg,sin, exp

5

potęgowanie

4

* ÷ ~

3

+ -

2

= (przypisanie)

1

(

0

Priorytety operatorów

background image

Przykład zamiany na ONP

Krok

Wejście

Stos

Wyjście

1

x

x

2

+

+

3

3

+

3

4

*

+ *

5

z

+ *

z

6

* +

7

2

2

8

*

– *

9

3

– *

3

10

/

– /

*

11

k

– /

k

12

koniec

/ –

Wyrażenie arytmetyczne: x + 3 * z – 2 * 3 / k

Wyrażenie w notacji ONP: x 3 z * + 2 3 * k / –

background image

Do czego to potrzebne?

Na przykład po to, żeby móc na swoje potrzeby
stworzyć bardziej zaawansowany kalkulator. Trudno
by nam było obliczyć zadanie zapisane nie w RPN.
Musielibyśmy szukać, które zadania mają wyższy
priorytet i je najpierw przeliczać (trzeba by najpierw
obliczyć wszystko w nawiasach).
Natomiast zadania zapisane w ONP w takim
przypadku łatwiej się oblicza.

background image

Obliczanie wyrażenia zapisanego

w ONP

1. Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub

ograniczniku).

2. Jeśli ten element jest:

a) stałą lub nazwą zmiennej – dopisz go na stos;
b) operatorem – zdejmij ze stosu właściwą dla danego operatora

ilość argumentów, wykonaj na nich obliczenia, uzyskany wynik
dopisz na stos;

3. Jeśli badane wyrażenie

a) nie zostało wyczerpane – wróć do punktu pierwszego;
b) zostało wyczerpane – wartość znajdująca się na stosie to wynik

obliczeń.

background image

Przykład

Krok

Wejście

Operacja

Stos

1

6

6

2

3

6 3

3

/

6 / 3

2

4

2

2 2

5

5

2 2 5

6

+

2 + 5

2 7

7

*

2 * 7

14

Wyrażenie: 6 3 / 2 5 + *

Wartość wyrażenia: 14

background image

Zamień następujące wyrażenia na notację ONP, a
następnie oblicz wartość wyrażenia:

(10+2)*5+(3-1)/2

7*(10-(1 +4)*2)-1

8+3+1-4*(12 +2*2)/2

(9*9-1)/10-2*3

4-5+6*2-8*(1+3)

Zadania do rozwiązania

background image

Pytania

Dyskusja

background image

Dziękuję za uwagę!

Dr inż. Jakub Bauman

jakub.bauman@gmail.com


Wyszukiwarka

Podobne podstrony:
Cielebon Siwiec Michał Przed godziną próby 12 PP Ziemi Wadowickiej
Lekcja 12 pp
12 BO 2 1 PP Segregator Polityka Odnawiania Zasobów w Stacji Paliw s p [v2]
Fak 1 PP'16 10'12'2008
procesy poznawcze ćw pp zaj 12
PP 2008 12
M PP 2004 12 arkusz CKE
pp zaj 12
pp domy energooszczedne 13 09 12
PP 12
1933 12 19 Rozp RM zaszeregowanie funkcjonariuszy PP
ZHP PP 1
Firma PP

więcej podobnych podstron