:: Enseignements :: Licence :: L2 :: 2008-2009 :: Programmation Avancée en C ::
[LOGO]

Calculatrice polonaise inversée


Ecriture d'une calculatrice polonaise inversée (à pile).
Pour ce projet, nous réalisons une calculatrice utilisant la notation polonaise inversée (ou notation suffixe) popularisée par les calculatrices HP. À cet effet, nous implantons une structure de pile statique pour stocker les opérandes. Ce projet est relativement simple à réaliser mais nécessite néanmoins une certaine attention sur la gestion des erreurs (division par zéro, entrées invalides, ...). On pourra l'étendre par l'ajout de nouveaux opérateurs ou la gestion des flottants.

Note sur la forme

Pour faciliter la vie du correcteur, le projet sera rendu dans le dossier votrenom-calculette, lui-même compressé dans l'archive votrenom-calculette.tar.gz, et le mail aura le mot "calculette" dans le sujet.

Exemple

On cherche à imiter au mieux la commande dc : si on veut calculer (10+2)*(6-2), on tapera
~$ dc
10
2
+
6
2
-
*
p
48
      

Pile

La structure de donnée est une pile (FIFO). On peut l'implémenter de plusieurs manières :
  • soit avec un tableau et un marqueur de fin de pile,
  • soit avec une liste chaînée (on insère et on retire au début de la liste).
Quels sont les avantages de chaque implémentation? En choisir une et la justifier en commentaire. Quel est le type de données data à l'intérieur de la pile? Ecrire les fonctions suivantes :
	int nouvelle_pile(pile *p);       /* renvoie 0 en cas de probleme */
	void liberer_pile(pile p);      
	int empiler(pile *p, data d);
	data depiler(pile *p);
	int est_vide(pile p);
      
Pourquoi a-t-on parfois besoin d'un pointeur pile* p, et parfois simplement pile p?

La calculatrice elle-même