Déduction du Résultat d’une Expression Arithmétique

12
Déduction du Résultat d¶une Expression Arithmétique Programme en Pascal Mohamed Ennahdi El Idrissi [email protected]

description

Ce document a été réalisé durant l'été 2005. Je ne l'ai malheureusement pas complété à l'époque.J'ai décidé comme même de le partager tel qu'il a été fait, avec de petites corrections de forme.Programme effectué en langage Pascal, en utilisant les listes chainées et les piles LIFO pour la gestion de parenthèses, non décrite dans le document.NB. La structure de données est la "liste chainée". Pour une meilleure performance, il fallait passer par la structure de données "arbre binaire".Bonne lecture.

Transcript of Déduction du Résultat d’une Expression Arithmétique

Page 1: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 1/12

 

Déduction du Résultat

d¶une ExpressionArithmétique

Programme en Pascal

Mohamed Ennahdi El Idrissi

[email protected]

Page 2: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 2/12

 

I. Introduction

Entre la période Juillet ± Août 2005, je me suis posé des questions sur le fonctionnement d¶une calculatrice.

Alors, j¶ai décidé de réaliser un programme qui permet à l¶utilisateur defournir des données (opérateurs et opérandes) pour obtenir le mêmerésultat que celui d¶une calculatrice (simple).

Ce programme permet de faire des calculs en utilisant une expression

arithmétique fournit par l¶utilisateur et stockée dans une chaîne decaractères.

Pour cela, ce programme : Accepte l¶introduction de plusieurs opérandes (réel ou entier,

 positif ou négatif) et plusieurs opérateurs (unaires ou binaires) dansl¶expression.

Utilise les parenthèses qui offrent la possibilité de distribuer la priorité des opérations à effectuer.

Page 3: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 3/12

 

II. Grandes Lignes

1. La chaîne à traiter

a- la saisie:

L¶utilisateur est invité à saisir l¶expression arithmétique désirée interprétéecomme chaîne de caractères par le programme.Le programme de lecture de la chaîne permet :

� D¶insérer, de supprimer ou d¶ajouter un caractère;� De parcourir la chaîne;� De fournir que des chiffres et des opérandes;

La saisie se termine en appuyant sur µ=µ ou bien sur Entrée <;

Page 4: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 4/12

 

II. Grandes Lignes (suite)

1. La chaîne à traiter (suite)

 b- L¶analyse de l¶Expression:

Le programme de saisie ne peut forcer l¶utilisateur à tapez une expressioncorrecte, puisque le nombre de combinaisons possible est gigantesque, pour ne pas dire illimité.

L¶une des façons les plus simples est d¶analyser l¶expression après la finde la saisie.

Si l¶expression n¶a pas de sens, (un opérateur à la fin, 2 opérateurs qui sesuivent, expression ayant un opérateur ou parenthèse ouvrante à la fin«), lasaisie ne se termine pas: il doit donc corriger l¶erreur avant de valider.

Page 5: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 5/12

 

Exemple:

ERREUR

La saisie ne se terminera pas car c¶est une expression

syntaxiquement fausse (opérateur de plus), et qu¶ilfaut corriger avant de pouvoir continuer.

II. Grandes Lignes (suite)

Page 6: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 6/12

 

2. Exploitation de la chaîne saisie

1.1. Cas généralCas général

Le parcours de la chaîne se fait depuis la fin, puisqu¶il s¶agitd¶éléments insérés. Cela permet d¶obtenir l¶ordre naturel deséléments importés depuis la chaîne de caractères, et donc,l¶exploitation des éléments dans les listes se fera dans l¶ordre voulu,et le résultat ne risque pas d¶être ambiguë.

Le parcours de la chaîne principale se fait tant que l¶indice deséléments de la chaîne n¶a pas encore atteint le 1er élément. Le

traitement de stockage (des opérateurs et opérandes) commence désqu¶un opérateur est rencontré.

L¶opérande se trouvant avant l¶opérateur en question estconverti en tant que réel, après être stocké dans une chaînetemporaire, et puis inséré dans la liste des opérandes.(Voir schémaci-dessous)

II. Grandes Lignes (suite)

Page 7: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 7/12

List

opérateur  Tête + - +

Liste

opérandeTête 1 2 1 5

Dernier élément inséré 1er élément inséré

Schéma Explicatif : Procédure de MàJ des Listes

Chaînées (opérandes et opérateurs).

Chaîne pr incipale:

Dernier élément inséré 1er élément inséré

 

Page 8: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 8/12

b) Cas particulier b) Cas particulier(Les Parenthèses)

Lorsqu¶on rencontre une parenthèse fermante, on fait appel à une

chaîne temporaire qui lui est affecté une sous chaîne, qui exclue la

parenthèse fermante et ouvrante(1ére parenthèse fermante et dernière

parenthèse ouvrante).On initialise 2 têtes de 2 listes temporaires différentes, et on fait un

appel récursif de la fonction en cours d¶exécution.

( Voir Schéma ci-dessous)

 

Page 9: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 9/12

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

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

 Y=2*(4+5)/3

Z=4+5

 Y=2*Z/3

X=3+Y+2*4

 W=1+2-X-1

Schéma Descriptif Montrant les Différentes Etapes de

Calcul Grâce aux Parenthèses (ce schéma explique le rôle des

parenthèses)

Etat initiale

Appel récursifN°1

Appel récursifN°2

Appel récursifN°3

Fin de l·appel

récursif N°3,retour durésultat déduispour Z dans W

Fin de l·appelrécursif N°2,retour durésultat déduispour Y dans Z

Résultat finalDéduis dans Y

Z

 Y 

X

 W 

Page 10: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 10/12

  

Page 11: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 11/12

2) Division par Zéro

La division par zéro n¶est pas une erreur syntaxique, mais

interrompe d¶une façon brutale l¶exécution du programme. 

Pour éviter tout cela, le programme lui-même affichera un

message d¶erreur, et permettra à l¶utilisateur de corriger l¶erreur 

avant de continuer .

Le message d¶erreur généré est

 

Page 12: Déduction du Résultat d’une Expression Arithmétique

5/6/2018 Déduction du Résultat d’une Expression Arithmétique - slidepdf.com

http://slidepdf.com/reader/full/deduction-du-resultat-dune-expression-arithmetique 12/12

A suivre«