În urma parcurgerii acestui articol studentul va fi capabil să:
Forma poloneză inversă este o notație matematică în care fiecare operator urmează dupa toți operanzii săi.
Cel mai simplu exemplu de notație postfixată este cel pentru doi operanzi și un operator:
5 + 4 | se scrie sub forma | 5 4 + |
---|
În cazul în care există mai multe operații, operatorul apare imediat după cel de-al doilea operand:
2 + 4 - 5 | se scrie sub forma | 2 4 + 5 - |
---|
Avantajul major al formei poloneze inverse este faptul că elimină parantezele din cadrul expresilor:
5 + (1 + 4) | se scrie sub forma | 5 1 4 + + |
---|
1. cât timp există elemente de citit 1.1 citește un element 1.2 dacă elementul este un număr, afișare (se adaugă la forma postfixată) 1.3 dacă elementul este o paranteză stângă, adaugă-l în stivă 1.4 dacă elementul este o paranteză dreaptă, extrage operatorii din stivă și adaugă-i la forma postfixată până când vârful stivei ajunge o paranteză stângă (care este extrasă, dar nu este adăugată la forma postfixată). !!! dacă stiva s-a golit fără să fie găsită o paranteză stângă, înseamnă că expresia inițială avea paranteze greșite 1.5 dacă elementul este un operator (fie el O1) 1.5.1 cât timp există un alt operator în vârful stivei (fie el O2) ȘI precedența lui O1 este MAI MICA SAU EGALA decât cea a lui O2, extrage O2 din stivă, afișare (se adaugă la forma postfixată) 1.5.2 adaugă O1 în stivă 2. când nu mai există elemente de citit, extrage toate elementele rămase în stivă și adaugă-le la forma postfixată (elementele trebuie să fie numai operatori; dacă este extrasă o paranteză stângă expresia inițială avea parantezele greșite).
Fie expresia:
1 - 7 * 2 /(3 + 5)^2^5
Element | Acțiune | Forma postfixată | Stiva | Observaţii |
---|---|---|---|---|
1 | Adaugă element la forma postfixată | 1 | ||
- | Pune elementul în stivă | 1 | - | |
7 | Adaugă element la forma postfixată | 1,7 | - | |
* | Pune elementul în stivă | 1,7 | * - | * are precedență mai mare decât - |
2 | Adaugă element la forma postfixată | 1,7,2 | * - | |
/ | Extrage element din stivă | 1,7,2* | - | / și * au aceeași prioritate |
Pune elementul în stivă | / - | / are precedență mai mare decât - | ||
( | Pune elementul în stivă | 1,7,2* | ( / - | |
3 | Adaugă element la forma postfixată | 1,7,2*3 | ( / - | |
+ | Pune elementul în stivă | 1,7,2*3 | + ( / - | |
5 | Adaugă element la forma postfixată | 1,7,2*3,5 | + ( / - | |
) | Extrage element din stivă | 1,7,2*3,5+ | ( / - | Se repeta până când se întâlnește ( |
repetă | / - | ( a fost ignorat | ||
^ | Pune elementul în stivă | 1,7,2*3,5+ | ^ / - | ^ are precedență mai mare decât / |
2 | Adaugă element la forma postfixată | 1,7,2*3,5+2 | ^ / - | |
^ | Pune elementul în stivă | 1,7,2*3,5+2 | ^ ^ / - | ^ este considerat asociativ-dreapta |
5 | Adaugă element la forma postfixată | 1,7,2*3,5+2,5 | ^ ^ / - | |
Final | Extrage toate elementele din stivă | 1,7,2*3,5+2,5^^/- |
1. cât timp există elemente de citit 1.1 citește un element 1.2 dacă elementul este o valoare 1.2.1 pune elementul în stivă altfel (elementul este un operator) 1.2.2 extrage 2 operanzi din stivă 1.2.3 dacă nu există 2 operanzi în stivă EROARE: forma postfixată nu este corectă 1.2.4 evaluează rezultatul aplicării operatorului asupra celor doi operanzi 1.2.5 pune rezultatul în stivă 2. dacă există o singură valoare în stivă 2.1 afișează valoarea ca rezultat final al evaluării expresiei altfel EROARE: forma postfixată nu este corectă