Odwrotna Notacja Polska – prezentacja
Download
Report
Transcript Odwrotna Notacja Polska – prezentacja
UNIWERSYTET PEDAGOGICZNY IM. KOMISJI EDUKACJI NARODOWEJ
W KRAKOWIE
ODWROTNA
NOTACJA POLSKA
W prezentacji:
Ojcowie i idea ONP
Algorytmy:
- zamiany postaci infiksowej wyrażenia na postać
ONP;
- obliczania wartości wyrażeń w postaci ONP;
- zamiany postaci ONP wyrażenia na postać
infiksową.
Coś dla głowy
Pojęcia użyte w prezentacji
Podsumowanie
Ojcowie i idea ONP
Lata 20-te ubiegłego wieku:
Polski filozof i matematyk Jan Łukasiewicz (1878-1956)
opracowuje prefiksowy sposób zapisywania wyrażeń
(arytmetycznych, algebraicznych i logicznych): najpierw
operator, a potem argumenty, np. +23 oznacza 2+3.
Nazywa go Notacją Polską.
Lata 50-te ubiegłego wieku:
Australijski filozof i pionier informatyki Charles Hamblin
(1922-1985) proponuje odwrócenie Notacji Polskiej – tak
powstaje postfiksowy zapis wyrażeń: najpierw argumenty,
a potem operator. Tak powstaje Odwrotna Notacja
Polska (ONP), z ang. Reverse Polish Notation (RPN).
Powrót
Przykłady zapisu wyrażeń algebraicznych w ONP
Zapis infiksowy (tradycyjny)
Zapis postfiksowy (ONP)
a+b
ab+
a+b+c
a b + c + (ab+ stanowi pierwszy
argument drugiego dodawania)
(a + b) * c
ab+c*
c * (a + b)
cab+*
(a + b) * c + d
ab+c*d+
(a + b) * c + d * a
ab+c*da*+
(a + b) * c + d * (a + c)
ab+c*dac+*+
(a + b) * c + (a + c) * d
ab+c*ac+d*+
(2 + 5) / 7 + 3 / 5
25+7/35/+
Można sprawdzić poprawność ich obliczania na
rzeczywistym kalkulatorze wykorzystującym ONP
(wystarczy nacisnąć na pingwinka)
Powrót
Korzyści stosowania notacji ONP
• ONP oszczędza czas i naciśnięcia klawiszy. Nie trzeba
się martwić o nawiasy podczas obliczeń. Cały proces
liczenia jest podobny do sposobu, w jakim się liczy na
papierze.
• Pośrednie wyniki pozwalają użytkownikowi na
ich sprawdzenie i poprawienie błędów. Łatwiej jest
kontrolować przebieg obliczeń. Użytkownik określa
priorytet operatorów.
• Ponieważ podwyrażenia są obliczane w miarę jak są
wpisywane, błędy wprowadzenia są bardziej oczywiste
przy ONP. W kalkulatorach algebraicznych, opuszczenie
nawiasu otwierającego może prowadzić do błędu
obliczeń, który ujawni się dużo później, dopiero, gdy całe
wyrażenie zostanie obliczone.
Przykłady
Powrót
Nie tylko kompetencja, ale i elegancja
Operacje konieczne do obliczenia wartości wyrażenia
Wyrażenie
(8 + 6)(7 - 5)
[(8 + 6)(7 - 5)] / (9 - 7)
2 sin(45+2^3)
na standardowym kalkulatorze
[8] [+] [6] [=] [M+] [7] [-] [5] [x] [MR] [=]
na kalkulatorze ONP (RPN)
[8] [ENTER] [6] [+] [7] [ENTER] [5] [-] [x]
11 naciśnięć klawiszy
9 naciśnięć klawiszy
[8] [+][6] [=] [M+] [7] [-] [5] [x] [MR] [=]
[MC] [M+] [9] [-] [7] [/] [MR] [=] [MC] [M+]
[1] [/] [MR] [=]
25 naciśnięć klawiszy i pomysłowość
[8] [ENTER] [6] [+] [7] [ENTER] [5] [-] [x]
[9] [ENTER] [7] [-] [/]
[4] [5] [+] [2] [^] [3] [=] [sin] [*] [2] [=]
[2] [ENTER] [3] [^] [4] [5] [+] [sin] [2] [x]
11 naciśnięć klawiszy
14 naciśnięć klawiszy
10 naciśnięć klawiszy
Powrót
Algorytm zamiany postaci infiksowej wyrażenia
na postać ONP
START
Pobierz symbol
z lewej ku prawej
Argument
T
WYJŚCIE
N
T
(
STOS
N
T
)
Zawartość stosu
aż do „(”
na wyjście
N
Operator
T
Czy wyższy
w stosie do
„(” lub dna
T
STOS
N
N
Φ
T
N
Zawartość stosu
do „(” lub do dna
na wyjście
Stos na wyjście
BŁĄD
KONIEC
Powrót
Przykład zamiany postaci infiksowej wyrażenia
na postać ONP
Dokonać konwersji wyrażenia typu: (a + b) * c + d * a
Wyjście
Stos
(
Wyjście
Stos
*
(
ab +
*
Wyjście
Stos
*
*
+
ab + c * d
a
c
a
a
(
ab + c
*
+
*
+
ab + c * da
+
a
(
+
+
*
ab + c *
+
*
ab + c * da *
+
ab + c * da * +
b
+
(
ab
d
+
)
+
ab + c * d
ab +
Wynik konwersji: ab
+ c * da * +
Powrót
Algorytm obliczania wartości wyrażeń
w postaci ONP
START
Pobierz
symbol z lewej
ku prawej
Argument
T
STOS
N
N
N
BŁĄD
Φ
Operator
T
Pobierz argumenty
ze stosu, wykonaj
działanie,
wynik na stos
T
KONIEC
Powrót
Przykład obliczania wartości wyrażeń
w postaci ONP
59+2*65*+
Obliczyć wartość wyrażenia:
5
9
9
5
5
6
*
28
5
6
28
+
5
6
28
2
2
14
14
+
*
Wartość wyrażenia:
30
28
58
58
Powrót
Algorytm zamiany postaci ONP wyrażenia
na postać infiksową
START
Pobierz
symbol z lewej
ku prawej
Argument
T
N
N
N
Φ
Operator
T
T
STOS
Zbierz ze stosu dwa
ostatnio podane
argumenty i wstaw
między nie operator
(argumentem może
być utworzone
wcześniej wyrażenie
ujęte w nawias)
Stos na
wyjście
BŁĄD
KONIEC
Powrót
Przykład zamiany postaci ONP wyrażenia
na postać infiksową
Dokonać konwersji wyrażenia typu: ab
a
÷
b
d
c
b
a
a
/ cd – c * +
c
÷
÷
÷
a
d
c
a
b
a
b
b
*
-
d c
c
c
d *
c
÷
a
-
c
÷
b
a
c
d
Wynik konwersji: a
a
÷
+
a
÷
b
+
b
/ b + (c - d) * c
*
b
c
c
d
Powrót
A teraz coś dla głowy
1. Zamień na ONP:
• a/c/d+b/c/d
• a / (c * d) + b / (c * d)
• (a + b) / c / d
• (a + b) / (c * d)
2. Zamień z ONP na zapis infiksowy (^ oznacza potęgowanie):
• ab*cd*e/–
• a5/c7/ed–9/*+
• a3+b/de+6^–
• dc–7b*2^/
Dla leniwych lub niedowiarków – odpowiedzi
Powrót
Odpowiedzi:
1. Postać ONP:
• ac/d/bc/d/+
• acd */bcd */+
• ab+c/d
• ab+cd*/
2. Zapis infiksowy:
• a*b–c*d/e
• a / 5 + c / 7 * ((e – d) / 9)
• (a + 3) / b – (d + e) ^ 6
• (d – c) / (7 * b) ^ 2
lub: http://scriptasylum.com/tutorials/infix_postfix/infix_postfix.html
Powrót
Pojęcia użyte w prezentacji
ONP
- Odwrotna Notacja Polska
RPN
- Reverse Polish Notation
postać
infiksowa
- tradycyjny zapis wyrażeń
postać
prefiksowa
- zapis wyrażenia w Notacji Polskiej (najpierw operator,
potem argumenty)
postać
postfiksowa
- zapis wyrażenia w Odwrotnej Notacji Polskiej (najpierw
argumenty, potem operator)
stos
- bufor, który rządzi się zasadą LIFO (Last In First Out),
czyli ostatni przyszedł, pierwszy wychodzi. Inaczej
mówiąc, tylko element dodany do stosu jako ostatni
możemy pobrać jako pierwszy.
Powrót
Podsumowanie
Wymyślenie Odwrotnej Notacji Polskiej to kolejny przykład na to, że
czasem warto utrudnić życie studentom (muszą zgłębić wiedzę na jej
temat), żeby ułatwić życie wszystkim.
ŹRÓDŁA:
http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/
mini przewodnik
http://scriptasylum.com/tutorials/infix_postfix/infix_postfix.html
postfix to infix i odwrotnie – zamiana
i obliczanie wartości
http://www.qiksearch.com/javascripts/postfix-to-infix.htm
postfix to infix – zamiana
http://www.brpreiss.com/books/opus4/html/page295.html
postfix to infix
http://www.brpreiss.com/books/opus4/html/page145.html#SE
CTION007131000000000000000
obliczanie ONP
http://main.linuxfocus.org/~guido/javascript/rpnjcalc.html
rzeczywisty kalkulator (można liczyć
w ONP)
http://www.arachnoid.com/lutusp/calc/
rzeczywisty kalkulator (można liczyć
w ONP)
Powrót
DZIĘKUJĘ
ZA UWAGĘ
Powrót