Vous êtes sur la page 1sur 12

Dduction du Rsultat dune Expression Arithmtique

Programme en Pascal Mohamed Ennahdi El Idrissi mohamed.ennahdi@yahoo.com

I.

Introduction

Entre la priode Juillet Aot 2005, je me suis pos des questions sur le fonctionnement dune calculatrice. Alors, jai dcid de raliser un programme qui permet lutilisateur de fournir des donnes (oprateurs et oprandes) pour obtenir le mme rsultat que celui dune calculatrice (simple). Ce programme permet de faire des calculs en utilisant une expression arithmtique fournit par lutilisateur et stocke dans une chane de caractres. Pour cela, ce programme :  Accepte lintroduction de plusieurs oprandes (rel ou entier, positif ou ngatif) et plusieurs oprateurs (unaires ou binaires) dans lexpression.  Utilise les parenthses qui offrent la possibilit de distribuer la priorit des oprations effectuer.

II.

Grandes Lignes

1. La chane traiter
a- la saisie:
Lutilisateur est invit saisir lexpression arithmtique dsire interprte comme chane de caractres par le programme. Le programme de lecture de la chane permet : Dinsrer, de supprimer ou dajouter un caractre; De parcourir la chane; De fournir que des chiffres et des oprandes; La saisie se termine en appuyant sur = ou bien sur Entre < ;

II.

Grandes Lignes (suite)

1. La chane traiter (suite)


b- Lanalyse de lExpression:
Le programme de saisie ne peut forcer lutilisateur tapez une expression correcte, puisque le nombre de combinaisons possible est gigantesque, pour ne pas dire illimit. Lune des faons les plus simples est danalyser lexpression aprs la fin de la saisie. Si lexpression na pas de sens, (un oprateur la fin, 2 oprateurs qui se suivent, expression ayant un oprateur ou parenthse ouvrante la fin), la saisie ne se termine pas: il doit donc corriger lerreur avant de valider.

II.

Grandes Lignes (suite)

Exemple:
ERREUR

La saisie ne se terminera pas car cest une expression syntaxiquement fausse (oprateur de plus), et quil faut corriger avant de pouvoir continuer.

II.

Grandes Lignes (suite)

2. Exploitation de la chane saisie


1. Cas gnral

 

Le parcours de la chane se fait depuis la fin, puisquil sagit dlments insrs. Cela permet dobtenir lordre naturel des lments imports depuis la chane de caractres, et donc, lexploitation des lments dans les listes se fera dans lordre voulu, et le rsultat ne risque pas dtre ambigu. Le parcours de la chane principale se fait tant que lindice des lments de la chane na pas encore atteint le 1er lment. Le traitement de stockage (des oprateurs et oprandes) commence ds quun oprateur est rencontr. Loprande se trouvant avant loprateur en question est converti en tant que rel, aprs tre stock dans une chane temporaire, et puis insr dans la liste des oprandes.(Voir schma ci-dessous)

Schma Explicatif : Procdure de MJ des Listes Chanes (oprandes et oprateurs).

Dernier lment insr

1er lment insr

Liste oprande

Tte

Chane principale:

List oprateur

Tte

+
Dernier lment insr

+
1er lment insr

b) Cas particulier particulier(Les Parenthses)


Lorsquon rencontre une parenthse fermante, on fait appel une chane temporaire qui lui est affect une sous chane, qui exclue la parenthse fermante et ouvrante(1re parenthse fermante et dernire parenthse ouvrante). On initialise 2 ttes de 2 listes temporaires diffrentes, et on fait un appel rcursif de la fonction en cours dexcution. ( Voir Schma ci-dessous)

Schma Descriptif Montrant les Diffrentes Etapes de Calcul Grce aux Parenthses (ce schma explique le rle des
parenthses)
Z Y X W

Etat initiale

W=1+2-(3+(2*(4+5)/3)+2*4)-1

W=1+2-X-1

Rsultat final Dduis dans Y Fin de lappel rcursif N2, retour du rsultat dduis pour Y dans Z Fin de lappel rcursif N3, retour du rsultat dduis pour Z dans W

X=3+(2*(4+5)/3)+2*4

X=3+Y+2*4

Appel rcursif N1
Y=2*(4+5)/3 Y=2*Z/3

Appel rcursif N2 Appel rcursif N3


Z=4+5

Lgende
MJ listes Appel rcursif Retour du rsultat Borne entre les appels(Niveaux rcursifs)

Schma explicatif plus dtaill = -11.0


Z X W Ttet Tted Y

Ttet Tted Chtemp=X

+ 2

-17 5

RET(-11)

Ttet2 Tted2 Chtemp2=Y

+ 1

Ttet2 Tted2 Chtemp2=Z

* 3

+ 6 1

RET(-17)

Ttet2 Tted2

* 3

+ 6 1

Chtemp2=Z

RET(9)

Ttet Tted

Ttet

+ 4 5

RET(6)
4 2 Tted

2) Division par Zro


La division par zro nest pas une erreur syntaxique, mais interrompe dune faon brutale lexcution du programme. Pour viter tout cela, le programme lui-mme affichera un message derreur, et permettra lutilisateur de corriger lerreur avant de continuer.

Le message derreur gnr est

A suivre