Une calculatrice rudimentaire
Une calculatrice rudimentaire
Notions utilisées
- La compilation séparée
- Les chaînes de caractères
Cahier des charges
L'objectif est de faire une calculatrice très simple.
Après avoir lancé la commande du programme, l'utilisateur sera invité à donner sa formule avec les conditions suivantes :
- la formule sera indiquée sous forme polonaise inverse
- les opérandes seront des nombres décimaux, écrits si nécessaire avec un point pour séparer la partie entière et la partie décimale
- les opérateurs appartiendront à l'ensemble {+, -, *, /}
- les différents opérateurs et opérandes seront obligatoirement séparés par un ou plusieurs espaces ; aucun autre séparateur ne sera utilisé
- la formule devra tenir sur une seule ligne, la fin de la formule ne sera pas signalée par un caractère particulier (sauf le caractère de fin de ligne)
Exemple d'exécution
Après avoir envoyé la commande du programme, les exécutions pourraient être :
Exemple 1
Votre formule ?
8 3 -
Le resultat : 5.000000
Exemple 2
Votre formule ?
2 3.5 * 4 -3 + /
Le resultat : 7.000000
Exemple 3
Votre formule ?
1 6 3 / 2 - /
division par 0
Exemple 4
Votre formule ?
6 2 + -
erreur sur la formule
Spécifications
Le programme se composera de trois fichiers séparés et utilisera le fichier d'en-tête calculatrice.h et le fichier d'en-tête pile.h.
- Un premier fichier, nommé pile.c, représentera une pile de "double"(s). Il incluera le fichier d'en-tête pile.h. Il contiendra trois fonctions, les fonctions empiler, depiler et estVide prototypées dans le fichier d'en-tête pile.h. Cette pile pourra être implémentée avec un tableau ou bien avec une liste chaînée.
- Un second fichier, nommé decoupe.c, servira à lire la formule indiquée par l'utilisateur ; il incluera le fichier d'en-tête calculatrice.h ; il contiendra uniquement la fonction prochainTerme prototypée dans le fichier d'en-tête calculatrice.h.
- Un dernier fichier, nommé calcul.c incluera les fichiers d'en-tête pile.h et calculatrice.h ; il contiendra la fonction principale. Celle-ci répondra au cahier des charges et utilisera l'algorithme décrit ci-dessous. Elle se servira des fonctions prototypées dans les fichiers d'en-tête. Il pourra être utile d'y définir une fonction de prototype
- double operer(double, double, char);
qui prend deux opérandes (de type double) et un opérateur en paramètres et retourne le résultat correspondant.
L'algorithme
L'algorithme pour évaluer la formule est le suivant :
Tant que la formule n'est pas finie, lire le terme suivant.
- S'il s'agit d'un opérande, l'empiler.
- S'il s'agit d'un opérateur, dépiler le second opérande puis le premier opérande. Empiler le résultat de la composition des deux opérandes par l'opérateur.
Dépiler et afficher le résultat.
Le travail à faire
Si possible, trois personnes (ou groupes) travailleront sur cet exercice. Une personne s'occupera du fichier decoupe.c, une seconde du fichier pile.c et une troisième du fichier calcul.c.
L'ensemble des trois fichiers sera alors utilisé pour obtenir l'exécutable de la calculatrice.
Si vous êtes sous Unix, vous pouvez :
- emprunter ce Makefile et vérifier la correspondance entre les noms de vos fichiers et les noms que nous avons prévus pour ceux-ci
- copier les fichiers testés d'un compte à l'autre pour les regrouper avec le Makefile
- taper la commande make, puis la commande calcul
Corrigé
Après avoir réussi votre propre programme, vous pourrez consulter :
Irène Charon
Last modified: Tue Sep 7 16:06:29 MET DST 1999