CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Notation polonaise inverse - Wikipédia

Notation polonaise inverse

Un article de Wikipédia, l'encyclopédie libre.

Vous avez de nouveaux messages (diff ?).

La notation polonaise inverse (NPI), également connue sous le nom de notation post-fixée, permet de noter les formules arithmétiques sans utiliser de parenthèses. Dérivée de la notation polonaise présentée en 1920 par le mathématicien polonais Jan Łukasiewicz, elle s’en différencie par l’ordre des termes : les opérandes y sont présentés avant les opérateurs et non l’inverse. (Voir aussi l'article notations préfixée, infixée et postfixée).

Cette notation est en fait très proche de celle utilisée dans le calcul écrit.

Quels sont ses avantages ?

  • En programmation, chaque paire de parenthèses correspond à un calcul intermédiaire qu’il faudrait stocker quelque part. La NPI permet de gérer ces calculs intermédiaires sous forme de pile (alias LIFO pour last in, first out). Le passage par la NPI permet donc d’organiser plus facilement le travail d’optimisation du compilateur.
  • Dans le cas d’une calculette, elle diminue le nombre de caractères à frapper, au prix d’un léger effort d’abstraction (écrire 2 2 + au lieu de 2 + 2 =). Accessoirement, à l’époque des premiers circuits intégrés, cela en diminuait aussi la complexité.

NPI a été inventé par le philosophe australien et informaticien Charles Hamblin dans le milieu des années 1950, pour permettre les calculs sans adresse mémoire (à vérifier).

Elle a été utilisée pour la première fois comme interface utilisateur par les calculateurs de bureau d’Hewlett-Packard à la fin des années 1960, puis dans la calculatrice scientifique HP-35 lancée en 1972. Avec la NPI les opérandes précèdent l’opérateur, cette notation permet donc de se passer des parenthèses.

Par exemple, l’expression :
3 * (4 + 7)
s’écrira :
4 7 + 3 *
En pratique sur une calculatrice de NPI le calcul sera saisi en tant que :
« 4 », « entrée », « 7 », « + », « 3 », « * ».

La réalisation de calculatrices NPI est basée sur l’utilisation d’une pile; c’est-à-dire, que les opérandes sont ajoutés en haut de la pile, et les résultats des calculs sont retournés en haut de la pile. Bien que ce concept puisse sembler inutilement compliqué au début, l’analyse d’une expression sous forme NPI a l’avantage de la concision. Sur un ordinateur, elle se prête d’ailleurs bien aux transformations en raison de sa grammaire simple.


Sommaire

[modifier] Implications pratiques

  • l’ordre des opérandes est préservé. Les calculs se font de gauche à droite ,
  • les opérandes précèdent l’opérateur; ils sont enlevés lorsque l’opération est évaluée.

[modifier] Avantages

  • il n’y a plus de parenthèses, devenues inutiles.
  • quand une opération est faite, le résultat devient un opérande lui-même ( pour les opérateurs suivants )
  • il n’y a pas d’état caché. L’utilisateur n’a pas besoin de se demander s’il frappait un opérateur ou pas : chaque frappe d’un opérateur déclenche une exécution immédiate.
  • un résultat intermédiaire peut resservir facilement. Exemple "sin(3*pi/4) / (3*pi/4)" : ici 3*pi/4 est calculé une fois puis est dupliqué dans la pile, ce qui donne : 3 [entrée] pi * 4 / DUP SIN SWAP / (ici DUP et SWAP sont des opérateurs de pile pour dupliquer et intervertir).

N.B. : sur les calculatrices HP à notation polonaise inverse, il y a également une touche « Last x », très commode, qui permet de rappeler dans le registre X de la pile ( qui correspond à ce qui est affiché à l'écran ) la valeur qu'il contenait avant l'application du dernier opérateur. Dans l'exemple ci-dessus, à la place de DUP SIN SWAP /, on ferait plus simplement SIN LastX / ( ce qui permet de faire économiser une instruction : cela peut sembler minime, mais sur des calculatrices dont la capacité mémoire est relativement limitée, toutes les optimisations sont bonnes à prendre ).

[modifier] Inconvénients

  • On ne peut exécuter un opérateur que s’il est de façon univoque binaire ou unaire (alias dyadique ou monadique), c’est-à-dire opère sur deux arguments ou un. Il faut donc différencier l’opérateur binaire de soustraction (10 - 2 devient 10 2 -) de l’opérateur unaire de négation (- 2 devient 2 NEG).
  • la gymnastique intellectuelle à effectuer grimpe en complexité en même temps que la taille de l’équation. Selon qu’on est habitué à la NPI ou pas, l’exercice peut paraître ludique ou contraignant.

[modifier] Exemple

Le calcul :
((1 + 2) * 4) + 3
peut être noté en NPI comme ceci :
1 2 + 4 * 3 +
ou
3 4 1 2 + * +

L’expression est évaluée de la façon suivante (la pile est montrée après chaque opération) :

Entrée Pile Opération
1 1 Pousser l’opérande
2 1,2 Pousser l’opérande
+ 3 Addition
4 3,4 Pousser l’opérande
* 12 Multiplication
3 12,3 Pousser l’opérande
+ 15 Addition

Le résultat final 15 se trouve en haut de la pile à la fin du calcul.

+---------------+
+             1 + [ 1 ] [ entrez ]
+               +
+               +
+---------------+

+---------------+
+             2 + [ 2 ]
+             1 +
+               +
+---------------+

+---------------+
+             3 + [ + ]
+               +
+               +
+---------------+

+---------------+
+             4 + [ 4 ]
+             3 +
+               +
+---------------+

+---------------+
+            12 +  [*] 
+               +
+               +
+---------------+

+---------------+
+             3 +  [3]
+            12 +
+               +
+---------------+

+---------------+
+            15 +  [+] 
+               +
+               +
+---------------+

[modifier] Méthode pour apprendre la NPI facilement

En fait, c'est plus simple qu'il n'y paraît, le calcul : ((1 + 2) * 4) + 3 peut se lire facilement :

  • je mets 1, (1)
  • j'ajoute 2, ( 2 + )
  • je multiplie par 4, (4 *)
  • j'ajoute 3. (3 +)

ce qui donne simplement 1 2 + 4 * 3 +
La notation polonaise inverse est très intuitive, sa difficulté relève d'un manque d'habitude (la plupart des calculatrices ne l'utilisent pas). Pour traduire une expression algébrique (telle que ((1+2)*4)+3 ) il suffit de la lire en se disant ce que l'on doit faire, c'est-à-dire comprendre l'expression algébrique, faire les operations dans le bon ordre (commencer ici par l'addition de 1 et 2).

[modifier] Conversion à partir de la notation infixée

Comme l'évaluation de NPI, la conversion de la notation d'infixe en NPI est basée sur l’utilisation d’une pile. Les expressions d’infixe sont la forme de mathématique que la plupart des personnes utilisent, par exemple : 3+4 ou 3+4*(2-1).

Pour la conversion il y a 2 variables texte (chaîne de caractères), l’entrée et la sortie. Il y a également une pile pour empiler les opérateurs pas encore ajoutés à la chaîne de sortie. Pour convertir, le programme lit chaque lettre dans l’ordre et réalise l’opération liée à cette lettre.

[modifier] Une conversion simple

l’entrée: 3+4
ajouter 3 à la sortie
ajouter + sur la pile des opérateurs
ajouter 4 à la sortie
à la fin de la lecture de l’entrée dépiler la pile des opérateurs dans la sortie
la sortie : 3 4 +

Ce simple exemple nous montre les règles suivantes :

  • Tous les nombres sont directement ajoutés à la sortie,
  • À la fin de la lecture de l’entrée dépiler la pile des opérateurs dans la sortie

[modifier] Description de l’algorithme

  • tant qu’il y a des tokens à lire:
lire le token.
  • si c’est un nombre l’ajouter à la sortie.
  • si c'est une fonction, le mettre sur la pile.
  • si c'est un séparateur d'arguments de fonction (par exemple une virgule) :
jusqu'à ce que l'élément au sommet de la pile soit une parenthèse gauche, retirer l'élément du sommet de la pile et l'ajouter à la sortie. Si toute la pile est dépilée sans touver de parenthèse gauche c’est qu’il y a un mauvais parenthésage.
  • si c’est un opérateur o1 alors
1) s’il y a un opérateur o2 sur le haut de la pile et si l’une des conditions suivantes est remplie.
o1 est associatif ou associatif à gauche et sa priorité est inférieure ou égale à celle d’o2, ou
o1 est associatif à droit et sa priorité est inférieure à celle d’o2,
retirer o2 de la pile pour le mettre dans la sortie
2) mettre o1 sur la pile
  • si le token est une parenthèse gauche, le mettre sur la pile.
  • si le token est une parenthèse droite, alors dépiler les opérateurs et les mettant dans la sortie jusqu’à la parenthèse gauche qui elle aussi sera dépilée, mais pas mise dans la sortie. Àprès celà, si le token au sommet de la pile est une fonction, le dépiler également pour l'ajouter à la sortie. Si toute la pile est dépilée sans trouver de parenthèse gauche c’est qu’il y a un mauvais parenthésage.
  • après la lecture du dernier token, s'il reste des éléments dans la pile il faut tous les dépiler pour les mettre dans la sortie (il ne doit y avoir que des opérateurs. Si on trouve une parenthèse gauche c’est qu’il y a eu un mauvais parenthésage).

[modifier] Quelques utilisations réelles de la NPI

[modifier] Voir aussi

[modifier] Référence

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com