Algorithmique. Évaluation d expressions. Luc Brun. luc.brun@greyc.ensicaen.fr. Évaluation d expressions p.1/38



Documents pareils
Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Théorie des Langages

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Les structures de données. Rajae El Ouazzani

Initiation à la Programmation en Logique avec SISCtus Prolog

2.4 Représentation graphique, tableau de Karnaugh

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits


Cours d Informatique

Algorithme. Table des matières

Algorithmique et Programmation, IMA

Algèbre binaire et Circuits logiques ( )

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Génie Logiciel avec Ada. 4 février 2013

CORRECTION EXERCICES ALGORITHME 1

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Initiation à LabView : Les exemples d applications :

STAGE IREM 0- Premiers pas en Python

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Débuter avec Excel. Excel

Algorithmique, Structures de données et langage C

Conversion d un entier. Méthode par soustraction

Les chaînes de caractères

Adama MBODJI MBODJ.SYSTEM

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Algorithmique et programmation : les bases (VBA) Corrigé

Informatique Générale

Cours d algorithmique pour la classe de 2nde

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Cours d Algorithmique et de Langage C v 3.0

EXCEL TUTORIEL 2012/2013

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Rappels sur les suites - Algorithme

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Chapitre 2. Eléments pour comprendre un énoncé

INF601 : Algorithme et Structure de données

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Note de cours. Introduction à Excel 2007

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Initiation. àl algorithmique et à la programmation. en C

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

M é ca n ism e Pr o lo g. Ex e m p le

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Calculabilité Cours 3 : Problèmes non-calculables.

Le théorème de Thalès et sa réciproque

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

ARBRES BINAIRES DE RECHERCHE

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

V- Manipulations de nombres en binaire

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

Les Angles. I) Angles complémentaires, angles supplémentaires. 1) Angles complémentaires. 2 Angles supplémentaires. a) Définition.

Organigramme / Algorigramme Dossier élève 1 SI

Chapitre 10 Arithmétique réelle

Structure d un programme

Les opérations binaires

Licence Sciences et Technologies Examen janvier 2010

Algorithmes récursifs

Les droites (d 1 ) et (d 2 ) sont sécantes en A Le point A est le point d intersection des 2 droites

Cours 1 : La compilation

Représentation des Nombres

MANUEL UTILISATEUR BALADEUR SANTÉ AUXILIAIRES MÉDICAUX ET SAGES-FEMMES C.D.C 1.40

Sommaire de la séquence 8

TP1 - Prise en main de l environnement Unix.

Programmation en langage C

Vecteurs. I Translation. 1. Définition :

Logique : ENSIIE 1A - contrôle final

Représentation d un entier en base b

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

EXCEL PERFECTIONNEMENT CALCULS AVANCES

Boîte électronique. Découverte des principales fonctions d une messagerie électronique. (et les pièces jointes)

Excel 2007 Niveau 3 Page 1

Algorithmique avec Algobox

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Algorithmique avec Algobox

Programmation assembleur : aperçu

DOCM Solutions officielles = n 2 10.

Logiciel de Base. I. Représentation des nombres

TP 1. Prise en main du langage Python

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

Introduction à l algorithmique et à la programmation M1102 CM n 3

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

VOS PREMIERS PAS AVEC TRACENPOCHE

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

Tp 1 correction. Structures de données (IF2)

Programmation Par Contraintes

Microsoft Excel. Tableur

Les arbres binaires de recherche

Chapitre 1 I:\ Soyez courageux!

1 Introduction et installation

Chap III : Les tableaux

Codage d information. Codage d information : -Définition-

TP1 : Initiation à l algorithmique (1 séance)

Transcription:

Algorithmique Évaluation d expressions Luc Brun luc.brun@greyc.ensicaen.fr Évaluation d expressions p.1/38

Plan Les différents types d expressions Expression complètement parenthésée (ECP), Expression préfixée (EPRE), Expression postfixée (EPOST), Expression infixée (EINF). Évaluation d expressions postfixée, complètement parenthésée, Conversion d expressions ECP à postfixée, infixée à postfixée. Évaluation d expressions p.2/38

Définition d une expression Définition : Une expression est une suite de variables combinées par un ensemble d opérateurs avec éventuellement un jeux de parenthèses ouvrantes et fermantes. Exemple : X (A + B) (C + D) NB : On ne fait pas intervenir de constantes ou de fonctions (petite simplification). L évaluation d une expression implique la définition d un environnement (affectation de chaque variable à une valeur). Évaluation d expressions p.3/38

Les opérateurs Opérateurs binaires opérateurs arithmétiques opérateurs logiques Opérateurs unaires opérateurs arithmétiques NB : +,. opérateurs logiques {+,,,/}, {<,>,,,, =,et,ou}, {, } non. Évaluation d expressions p.4/38

Expression complètement parenthésée Une expression complètement parenthésée se construit à partir des règles suivantes : 1. Une variable est une ECP, 2. si x et y sont des ECP et β un opérateur binaire, alors (x β y) est une ECP, 3. si x est une ECP et α un opérateur unaire alors (α x) est une ECP, 4. Il n y a pas d autre ECP que celles formées par les 3 règles précédentes. Évaluation d expressions p.5/38

Grammaire des ECP Grammaire BNF (Backus-Naur Form) <ecp> ( <ecp><optbin><ecp>) (<optun><ecp>) <variable> <optbin> + / < = > et ou <optun> non <variable> A B C... Z Évaluation d expressions p.6/38

Exemples d ECP ECP conformes : ((A+B)*C) (((A/B)=C)et(E<F)) ( A) ECP non conformes : (A) ((A+B)) A B Évaluation d expressions p.7/38

Expressions préfixées Les expressions préfixées (EPRE) se construisent à partir des 4 règles suivantes : 1. une variable est une EPRE, 2. si x et y sont des EPRE et β un opérateur binaire alors β x y est une EPRE, 3. Si x est une EPRE et α un opérateur unaire, alors α x est une EPRE, 4. il n y a pas d autres EPRE que celles formées à partir des 3 règles précédentes. Évaluation d expressions p.8/38

Grammaire des EPRE Règles : <epre> <optbin> <epre> <epre> <optun><epre> <variable> <optbin> + / < = > et ou <optun> non <variable> A B C... Z NB : Seule la première règle a été changée. Évaluation d expressions p.9/38

Exemples d EPRE Expressions correctes : EPRE ECP + - A B C ((A-B)+C) et non < A B C ((non(a<b))et C) non = + A B C (non ((A+B)=C)) Expressions incorrectes A - + B C non B C Évaluation d expressions p.10/38

Expressions postfixées Expressions utilisées par les calculatrices HP (cf TP Web) et données par les 4 règles : 1. une variable est une EPOST, 2. si x et y sont des EPOST et β un opérateur binaire alors x y β est une EPOST, 3. Si x est une EPOST et α un opérateur unaire, alors x α est une EPOST, 4. il n y a pas d autres EPOST que celles formées à partir des 3 règles précédentes. Évaluation d expressions p.11/38

Grammaire des EPOST Règles : <epost> <epost> <epost> <optbin> <epost> <optun> <variable> <optbin> + / < = > et ou <optun> non <variable> A B C... Z NB : Seule la première règle a été changée. Évaluation d expressions p.12/38

Exemples d EPOST ECP EPRE EPOST (((A+B)-C)/D) / - + A B C D A B + C - D / ((A < B) et (non C)) et < A B non C A B < C non et ((non (A < B)) et (C>D)) et non < A B > C D A B < non C D > et Évaluation d expressions p.13/38

Expressions Infixées Écriture ECP sans ambiguï té mais parfois un peu lourde. Suppressions de certaines parenthèses par 2 données implicites : 1. Priorité des opérateurs A B + C ((A B) + C) 2. Priorité à gauche pour les opérateurs de même priorité A + B C ((A + B) C) Les parenthèses imposent des priorités A B C ((A B) C) A (B C) (A (B C)) Évaluation d expressions p.14/38

Priorité des opérateurs Opérateur Priorité ( 0 <,, =,,<,,> 1 ou, +, - 2 et, *, / 3,, non 4 Évaluation d expressions p.15/38

Grammaire des EINF {expr} : expression éventuellement présente un nombre quelconque de fois. <einf> <esimple> {<op1> <esimple>} <esimple> <terme>{<op2><terme>} <terme> <facteur>{<op3><facteur>} <facteur> <variable> <op4><facteur> (<einf>) <op1> < = > <op2> + ou <op3> / et <op4> non <variable> A B C... Z Évaluation d expressions p.16/38

Exemples d EINF EINF ECP A*B+C-D (((A * B) +C)-D) A+B*C (A+(B * C)) A=B et C>D ((A=(B et C))> D) A et B ou C et D ((A et B) ou (C et D)) A et (B ou C) et D ((A et (B ou C)) et D) non A et B ou C et non D (((non A) et B) ou (C et (non D))) Évaluation d expressions p.17/38

Évaluation d expression L évaluation s effectue par rapport à un environnement (affectation des variables). Idée : Ordonnancer l évaluation de façon à ce que l évaluation d une opération s effectue sur des variables ou des expressions déjà évaluées. Soit S appliquant β sur x et y. evaluation(s) = opération(β, si variable(x) alors valeur(x) sinon evaluation(x), si variable(y) alors valeur(y) sinon evaluation(y)) Évaluation d expressions p.18/38

Exemple d évaluation Soit à évaluer S=(A+(B*C)) avec A = 2,B = 3,C = 4. evaluation(s) = opération(+,a,évaluation(b*c)) = opération(+,a,opération(*,b,c)) = opération(+,2,opération(*,3,4)) = opération(+,2,12) = 14 Évaluation d expressions p.19/38

Évaluation d une expression postfixée Les opérandes apparaissent avant l opération. L évaluation d une opération fournie soit le résultat soit un nouvel opérande. 10 3 + 5 6 - - = 13 5 6 - - = 13-1 - = 14 Idée : empiler les opérandes, dépiler pour effectuer une opération. Évaluation d expressions p.20/38

Exemple d évaluation d une EPOST évaluons A B * C D + / avec A=2,B=3,C=2,D=1 2 3 2 6 pile vide empiler A empiler B evaluer * AB*CD+/# AB*CD+/# AB*CD+/# AB CD+/# 2 6 1 2 6 empiler C empiler D évaluer + evaluer / AB*CD+/# AB*CD+/# AB*CD+ /# AB*CD+/ # 3 6 2 Évaluation d expressions p.21/38

Évaluation d EPOST : Énumération des cas Soit epost[1..max] une chaîne de caractères contenant une EPOST et i une position dans la chaîne. Si epost[i]= # : l évaluation est terminé. Résultat en sommet de pile. Si epost[i] # Si epost[i] est une variable : empiler sa valeur Si epost[i] est un opérateur : 1. on dépile son (ou ses 2 opérandes), 2. on effectue l opération et 3. on empile le résultat. Évaluation d expressions p.22/38

Évaluation d EPOST : l algorithme fonction evalpost (epost : Tableau[1...MAX] decaratère ) : Réel Déclaration i :Entier,valG,valD :Réel,p : Pile début p creer() i 1 tant que epost[i] # faire si variable(epost[i]) alors empiler(epost[i],p) sinon si unaire(epost[i]) alors vald dépiler(p) vald oper1(epost[i],vald) empiler(vald,p) sinon vald dépiler(p) valg dépiler(p) vald oper2(valg,epost[i],vald) empiler(vald,p) finsi finsi i i+1 fintantque retourner sommet(p)évaluation d expressions p.23/38

Évaluation d ECP Utilisation d une pile à travers trois types d actions : 1. Si le symbole lu est un opérateur : on l empile 2. si c est une variable : on empile sa valeur, 3. Si c est une parenthèse droite : (a) on dépile une sous expression et (b) on empile le résultat. Évaluation d expressions p.24/38

Évaluation d ECP : Exemple évaluons (A * (B+C)) avec A=2,B=3,C=1. 2 * 2 (A*(B+C))# (A (B+C))# (A*( B+C))# * 2 3 * 2 (A*(B+C))# + 3 * 2 1 + 3 * 2 4 * 2 8 (A*(B+C))# (A*(B+C ))# (A*(B+C))# (A*(B+C))# Évaluation d expressions p.25/38

Évaluation d ECP : l algorithme fonction evalecp (ecp : Tableau[1...MAX] decaratère ) : Réel Déclaration i :Entier,op :Caratère,valG,valD :Réel,p : Pile début p creer() i 1 tant que ecp[i] # faire si variable(ecp[i]) alors empiler(valeur(ecp[i]),p) continuer finsi si operateur(ecp[i]) alors empiler(ecp[i],p) continuer finsi vald dépiler(p) op dépiler(p) si unaire(op) alors empiler(oper1(op,vald),p) sinon valg dépiler(p) emp.(op2(valg,op,vald),p) finsi finsi i i+1 fintantque Évaluation d expressions p.26/38

Conversion ECP à EPOST ECP lisibles, tapé par exemple dans un code source, EPOST directement interprétable par une machine. Nécessité de convertir. Remarque : Lors de la lecture d une ECP on rencontre les opérandes dans le même ordre que dans l EPOST. Seul l opérateur est placé à la fin. (A + B) AB+ Idée : Empiler les opérateurs et les dépiler sur les parenthèses fermantes. Opérateur : empiler, variable : écrire dans chaî ne résultat. parenthèse fermante : dépiler un opérateur parenthèse ouvrante : ne rien faire. Évaluation d expressions p.27/38

Exemple de conversion Convertissons (A * (B+C)) * * * A A A A B (A*(B+C))# (A (B+C))# (A*( B+C))# (A*(B+C))# + * + * A B A B C A B C + A B C + * (A*(B+ C))# (A*(B+C))# (A*(B+C))# (A*(B+C))# * Évaluation d expressions p.28/38

Conversion ECP à EPOST : l algorithme procédure convecpepost ( E ecp : Tableau[1... M AX] decaratère, S epost : Tableau[1... M AX] decaratère ) Déclaration indecp,indepost :Entier,p : Pile début p creer() indecp 1 indepost 1 tant que ecp[indecp] # faire si operateur(ecp[i]) alors empiler(ecp[i],p) continuer finsi si variable(ecp[i]) alors epost[indepost] ecp[indecp] indepost indepost+1 continuer finsi si ecp[i]= ) alors epost[indepost] dépiler(p) indepost indepost+1 finsi indecp indecp+1 fintantque epost[indepost] # Évaluation d expressions p.29/38

Conversion ECP/EPOST : Amélioration Détection d erreurs de syntaxe dans l ECP. La pile ne doit pas être vide avant la fin (trop de parenthèses fermantes) et vide à la fin (pas assez). Un caractère d ECP est soit : un opérateur, une variable, une parenthèse fermante, une parenthèse ouvrante. Évaluation d expressions p.30/38

Conversion EINF à EPOST Problème compliqué par l absence de parenthèses. On applique les règles suivantes : variable : empiler. opérateur : empiler. Il faut dépiler auparavant tous les opérateurs de priorité supérieure ou égale. parenthèse gauche : empiler. Délimite une sous expression. parenthèse droite : dépiler jusqu à une parenthèse gauche. Évaluation d expressions p.31/38

Exemple de conversion (1/2) Convertissons A*B+C/(D+E) * * + A A A B A B* A*B+C/(D+E)# A B+C/(D+E)# A*B+C/(D+E)# A*B+ C/(D+E)# + / + A B *C A B *C A B* C + A B* C D A*B+C/(D+E)# A*B+C/ (D+E)# A*B+C/( D+E)# A*B+C/(D+E)# ( / + ( / + Évaluation d expressions p.32/38

Exemple de conversion (2/2) A*B+C/(D+E) ( / + + ( / + A B *C D A B *C D A B* C D E A*B+C/(D+E)# A*B+C/(D+ E)# A*B+C/(D+E)# / + A B* C D E + A B* C D E + / + A*B+C/(D+E)# A*B+C/(D+E)# Évaluation d expressions p.33/38 + ( / +

Conversion EINF/EPOST : Points délicats Trois points délicats : Empilement d une opération, Rencontre d une parenthèse fermante, Fin de l algorithme et vidage de la pile. Évaluation d expressions p.34/38

Empilement d une opération procédure traiteropt ( E op :Caratère, S epost : Tableau[1...MAX] decaratère E/S p : Pile,indpost : Naturel ) Déclaration dépil : Booléen,élément : Caratère début dépil non vide(p) tant que dépil faire si priorité(sommet(p)) priorité(op) alors élément depiler(p) epost[indpost] élément indpost indpost+1 dépil non vide(p) sinon dépil faux finsi fintantque empiler(op) Évaluation d expressions p.35/38

Rencontre d une parenthèse fermante procédure traiterpf ( S epost : Tableau[1...MAX] decaratère, E/S indpost : Naturel,p : Pile ) Déclaration élément : Caratère début élément dépiler(p) tant que élément ( faire epost[indpost] élément indpost indpost+1 élément depiler(p) fintantque fin Évaluation d expressions p.36/38

Vidage de la pile procédure traiterfin ( S epost : Tableau[1...MAX] decaratère, E/S indpost : Naturel,p : Pile ) Déclaration élément : Caratère début tant que non vide(p) faire epost[indpost] depiler(p) indpost indpost+1 fintantque epost[indpost] # fin Évaluation d expressions p.37/38

Conversion EINF/EPOST : l algorithme procédure conveinfepost ( E einf : Tableau[1... M AX] decaratère, S epost : Tableau[1... M AX] decaratère ) Déclaration indinf,indpost :Entier,p : Pile début p creer() indinf 1 indpost 1 tant que einf[indinf] # faire si operateur(einf[indinf]) alors indpost indpost+1 continuer finsi si einf[i]= ) alors traiterpf(epost,indpost,p) sinon traiteropt(einf[indinf],epost,indpost,p) empiler( ( ) ; continuer finsi si variable(einf[indinf]) alors epost[indpost] einf[indinf] finsi indinf indinf+1 fintantque Évaluation d expressions p.38/38 traiterfin(epost,indpost,p)