UE MAREP Cours 10 : Projet Patricia Renault UPMC 2005/2006.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Chapitre annexe. Récursivité
Introduction au Langage C,C++
Rappels C.
Structures de données et complexité LIFO – FILO – FIFO – etc…
Introduction à l’Algorithmique
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Structures et unions types énumérés Qu'est-ce qu'une structure
Introduction : Compilation et Traduction
5. Les structures répétitives
Points importants de la semaine Les types arithmétiques. Les opérateurs.
Partie 1 Etude de l'existant
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Cours d’Algorithmique
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Chapitre IV LES STRUCTURES SIMPLES. Plan I- Les entrées II- Laffectation III- Les sorties.
Algorithmique et Programmation
Expressions et assignations
Les structures de données arborescentes
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Points importants de la semaine Les enregistrements.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Question Comment le compilateur fait-il pour évaluer une expression telle que : A + B lorsque A et B sont des données de types arithmétiques différents.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Points importants de la semaine Les allocations programmées de mémoire. Les enregistrements.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Points importants de la semaine La représentation cachée. Les enregistrements.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
8PRO100 Éléments de programmation Les types composés.
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Plan troisième cours Instruction sélective Instruction répétitive
Structures de données IFT-10541
Algorithmique et structures de données en C
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
L’essentiel du langage C
Le langage C Structures de données
LES PILES ET FILES.
INTRODUCTION.
SIF-1053 Architecture des ordinateurs
ALGORITHMIQUE ET PROGRAMMATION C
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Sémantique des expressions arithmétiques pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Arbres binaires et tables de hachage
ETNA – 1ème année Guillaume Belmas –
Les surcharges d'opérateurs
B.Shishedjiev - Affectation1 Expressions et affectation Comment produire des nouvelles valeurs.
Introduction au langage C Les entrées-sorties
Système d’exploitation : Assembleur Semaine 01 Introduction.
UE MAREP Cours 12 : Révisions
UE MAREP Cours 9 : Tableaux
UE MAREP Cours 1 : Algèbre de Boole et entiers naturels
Patricia Renault UPMC 2005/2006
Patricia Renault UPMC 2005/2006
Cours 5 - Trois algorithmes de tri d'un tableau
PRO-1027 Programmation Scientifique en C
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.
Introduction au langage C
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
Transcription de la présentation:

UE MAREP Cours 10 : Projet Patricia Renault UPMC 2005/2006

2/28 Plan Introduction Objectifs Complexité Présentation

3/28 Plan Introduction Durée Méthodologie Objectifs Complexité Présentation

4/28 Durée 4 semaines 2 cours - C 10, C 11 2 TD - TD 9, TD 10 4 TME - TME 9, TME 10, TME 11, TME 12 Evaluation durant la dernière séance de TME grâce à des démos

5/28 Méthodologie Décomposition du projet en 9 étapes de plus en plus complexes Comment procéder ? Pour chaque étape Ecriture du code d’une étape Test exhaustif de l’étape Si test = ok passage à l’étape suivante Sinon, correction de l’étape La note n’est pas proportionnelle à la quantité de ligne assembleur mais aux étapes validées !!!

6/28 Plan Introduction Objectifs Complexité Présentation

7/28 Objectifs Récapituler et approfondir les notions abordées : Représentation des nombres Représentation d'une expression arithmétique Interface avec l'utilisateur : saisie et affichage, traduction depuis et vers les structures utilisées pour le calcul Découpage d’un problème en traitements élémentaires, structurations en fonctions Mise en correspondance d'une fonction C avec une de ses traductions possibles en langage d'assemblage

8/28 Plan Introduction Objectifs Complexité Présentation

9/28 Complexité etape1etape2etape3etape4etape5etape7etape8 etape6etape Préparé en TD 9 et 10 12/20

10/28 Plan Introduction Objectifs Complexité Présentation Expressions arithmétiques Description globale Décomposition en étapes

11/28 Expressions arithmétiques Trois types d’expression arithmétiques Infixe : l’opérateur est placé entre les opérandes Exemple : Préfixe : l’opérateur est placé avant les 2 opérandes Exemple : Postfixe : l’opérateur est placé après les 2 opérandes Exemple : Quel que soit le type d’expression, on peut représenter une expression par un arbre où Les nœuds sont les opérateurs Les feuilles sont les opérandes

12/28 Expressions arithmétiques + * * /

13/28 Expression infixée ( *(13+8)+14*9)/20= 9 + * * /

14/28 Expression préfixée / * * * * /

15/28 Expression post-fixée * * + 20 / = 9 + * * / Utilisé dans le projet

16/28 Expression post-fixée Parcours (Arbre){ Si Arbre = Feuille retourner valeur(Feuille). Si Arbre = Nœud_unaire retourner Applique_op(nœud_unaire(Parcours(Sous_arbre_nœud_unaire))) Si Arbre = nœud_binaire Sous_expr_1 = Parcours(nœud_binaire.Sous_arbre_gauche) Sous_expr_2 = Parcours(nœud_binaire.Sous_arbre_droit) Retourner(Applique_op(nœud_binaire.op, sous_expr_1, sous_expr_2)) } + * * /

17/28 Réalisation saisir_chaine structurer_expr evaluer_expr convertir_entier Afficher résultat expr. valide? oui non Débu t

18/28 Réalisation int main(){ char e_ch[64]; Expr_struct_elem e_str[32]; int ok = 0, nb; while (ok == 0){ saisir_chaine(e_ch); if (structurer_expr(e_ch, e_str) == 1) ok = 1; printf("Expr KO\n"); } nb = evaluer_expr(e_str); printf("expression %s=%d\n",e_ch,nb); return 0; }

19/28 Réalisation - expression structurée typedef struct expr_struct_elem { char type; char operat; unsigned short int operand;/* 2 octets */ }Expr_struct_elem; Octet 0Octet 1Octet 2 et octet 3 TypeOpérateurOpérande Attention opérande = o3o2 Opérateur unaire 0# Opérateur binaire * 3/# Type 0Fin d’expression 1opérande 2Opérateur binaire 3Opérateur unaire

20/28 Réalisation - étape 5 void saisir_chaine(char *expr_chaine) Demande la saisie d’une expression postfixée Effectue la saisie Vérifie que la chaîne saisie ne contient que des caractères valides Répète ces opérations jusqu’à obtenir une chaîne syntaxiquement correcte. Exemples : est valide z % r est invalide

21/28 Réalisation - étape 4 int structurer_expr(char *expr_chaine, Expr_struct_elem *expr_struct) Converti la chaîne saisie en une expression structurée Exemple chaîne saisie : 2 3 +, l’expression structurée sera 0x (pour 2) 0x (pour 3) 0x (pour +) 0x (pour fin d’expression structurée) Exemple : 4 1 * /

22/28 long evaluer_expr(Expr_struct_elem *e_str) Evalue l’expression structurée passée en argument en appliquant l’algorithme de parcours Nécessite l’utilisation de la pile pour évaluer cette expression structurée et des fonctions empile et dépile Réalisation - étape 4

23/28 long evaluer_expr(Expr_struct_elem *e_str) { Pile P ;/* un tableau de 32 entiers et deux fonctions d’accès : empiler(P,e) et dépiler(P)*/ Indice i ; i = indice du premier élément de e_str while (e_str[i].type != fin_expr) { if (e_str[i].type == OP) /* operande */ empiler(P, Expr[i].operande); Réalisation - étape 4

24/28 else /*op unaire*/if (e_str[i].type = OPERUN) { V1 = dépiler(P); V2 = appliquer_op( e_str[i].operateur, V1); empiler(P,V2); } else { /* opérateur binaire */ V1 = dépiler(P); V2 = dépiler(P); Réalisation - étape 4

25/28 V3 = appliquer_op( e_str[i].operateur, V1, V2); empiler(P,V3); } /* fin si interne */ }/* fin si externe */ i = indice elem suivant e_str } /* Fin while */ return (dépiler(P)); } Réalisation - étape 4

26/28 Réalisation - étape 4 Fonctionnement de l’algorithme précédent sur 4 1 * / 4 est un opérande => empile (P, 4) 1 est un opérande => empile (P, 1) * est un opérateur => dépile (P, op2), dépile (P, o1), applique op1 * op2 puis empile (P, op1*op2) 5 est un opérande => empile (P, 5) 2 est un opérande => empile (P, 2) - est un opérateur => dépile (P, op2), dépile (P, o1), applique op1 - op2 puis empile (P, op1-op2) / est un opérateur => dépile (P, op2), dépile (P, o1), applique op1 / op2 puis empile (P, op1/op2) Fin d’expression => dépile (P, résultat)

27/28 Réalisation - étape 4 Une expression postfixée est valide si elle est réductible par l’algorithme d’évaluation à un nombre. Ce nombre est l’unique élément de la pile à la fin de l’algorithme d’évaluation. Règles de validité : en parcourant l’expression post-fixée de gauche à droite, Il y a toujours plus d’opérandes que d’opérateurs binaires. A la fin, la différence entre le nombre d’opérandes et d’opérateurs binaires est de 1 exactement.

28/28 Réalisation Etape 1 : Evaluation d’une expression structurée valide ne contenant qu’un seul opérateur binaire Etape 2 : Evaluation d’une expression avec table d’indirection pour déterminer l’adresse du saut Etape 3 : Evaluer d’une expression structurée valide avec plusieurs opérateurs binaire Etape 4 : Structuration d’une expression à partir d’une chaîne de caractère mise en mémoire composée de nombre à un chiffre sans séparateur Etape 5 : Saisie d’une chaîne de caractère et vérification de la validité des caractères saisis