Odwrotna Notacja Polska - ONP
... czyli zapis kolejności wykonywanych działań bez nawiasów
Zapis ten wymyślił Polak - Łukasiewicz. Jednak stawiał operator przed operandami. W praktyce pomysł zmodyfikowano i stawia się go PO operandach.
Np. zamiast:
2+3: 2 3 +
4-1: 4 1 -
Jak procesor wykona takie działanie? Po kolei :)
2 3 +
2 na stos, 3 na stos, operator "+" potrzebuje dwóch argumentów. Zatem ściąga je ze stosu, pierwszy jako prawy argument! Wynik zapisz na stos.
Sam sprawdź dla minusa.
To teraz ciekawiej. Zapiszmy w ONP:
(2 - 3) * 5
2 3 - 5 *
(Zauważ, że tworząc ONP, nie zmieniasz kolejności operandów)
I wykonajmy:
Teraz ten sam wynik, ale inne działanie:
5 * (2 - 3)
5 2 3 - *
Pewna uwaga: jeśli jakaś funkcja potrzebuje więcej lub mniej argumnetów niźli 2, to ściąga sobie ze stosu tyle ile trzeba. Np. sin() pobierze jeden argument.
Zadania:
1) Notacja z nawiasami to notacja infixowa, notacja polska - prefixowa, ONP - postfixowa. Dlaczego?
2) Zamień na ONP
(3+4) / (3-3!)
sin( 3 - pi + 15 / (4 + 1) )
3) Wykonaj działania utworzone w 2)