:: Enseignements :: Licence :: L2 :: 2008-2009 :: Programmation Avancée en C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | 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
- Ecrire la fonction est_operateur(char *s)
(penser à utiliser la fonction isdigit...).
- Faire attention à l'ordre pour les opérateurs non symétriques.
- Utiliser fgets plutôt que gets.
© Université de Marne-la-Vallée