#
# NPI - Calculatrice en Notation Polonaise Inverse.
# Copyright (C) 2000-2017 MiKael NAVARRO
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

NPI
===

Ce petit logiciel est une calculatrice, pour l'interpreteur Python, en Notation 
Polonaise Inverse.

Dans les annes 20, Jan Lukasiewicz a dvelopp un systme de logique formelle
permettant aux expressions mathmatiques d'tre indiques sans parenthses en
plaant les oprateurs avant (notation de prfixe) ou aprs (notation de
suffixe) les oprandes.  
La notation de prfixe est galement connue en tant que notation polonaise en
l'honneur de Lukasiewicz. 
Et la notation de suffixe est nomm notation polonaise inverse (RPN = Reverse
Polish Notation) galement en l'honneur de Lukasiewicz.

Algorithme NPI :
================

En notation polonaise inverse, chaque operateur suit ses operandes; 
une expression infixee comme ::

  (1 - 2) * (4 + 5)

se note ::

  1 2 - 4 5 + *

Il n'y a plus besoin de parentheses; cette notation ne presente pas 
d'ambiguite, du moment que l'on connait le nombre d'operandes que necessite 
chaque operateur.

L'implementation est simple. On place chaque operande sur une pile; lorsqu'un
operateur arrive, on depile le nombre d'operandes approprie, on leur applique
l'operateur, et on empile le resultat. Ainsi dans l'exemple ci-dessus, on 
empile 1 et 2, puis on les remplace par leur difference, -1. Ensuite, on 
empile 4 et 5, puis on les remplace par leur somme, 9. Enfin on remplace -1 
et 9 par leur produit, -9, sur la pile. Lorsqu'on arrive a la fin de la ligne 
d'entree, on extrait la valeur qui se trouve au sommet de la pile et on 
l'affiche.

La structure du programme est donc une boucle qui realise l'operation 
appropriee a chacun des operateurs et operandes, au fur et a mesure qu'ils 
apparaissent ::

  tant que (l'operateur ou l'operande suivant 
            n'est pas l'indicateur de fin de fichier)
    si (c'est un nombre)
      l'empiler
    sinon, si (c'est un operateur)
      depiler les operandes
      effectuer l'operation
      empiler le resultat
    sinon, si (c'est un caractere de fin de ligne)
      depiler la valeur du sommet et l'afficher
    sinon
      erreur

Licence
=======

Le logiciel est fourni sous licence GPL, sans aucune garantie de fonctionnement.
De mme, les corrections de bugs et mises  jour ne sont pas garanties.
Referez vous au fichier LICENCE (qui doit etre inclus dans cette distribution)
pour plus de details sur les termes de la licence.

lments requis
===============

Python 2.3 ou plus doit tre install sur votre systme.

Thoriquement ce logiciel doit fonctionner sur toutes les plates-formes.

Usage
=====

Simplement taper ::

  $ python -O npi.py

Pour plus de dtails rfrez-vous  la documentation fournie dans le
sous rpertoire doc/.

--
MiKael NAVARRO
