Université Bordeaux 1 Licence Informatique 2006/2007 Algorithmique et Structures de données TD 4 Exercice 4.1 On suppose d’avoir défini un type abstrait ensemble pour manipuler des ensembles d’entiers. Soient A, B et C des ensembles et X un entier, les opérations définies sur le type abstrait ensemble sont : les prédicats : – Est-Vide(A) – Appartient(X,A) les procédures – Ajouter(X,A) – Supprimer(X,A) – Vider(A) modifiant l’ensemble passé en paramètre, et les procédures – Intersection(A,B,C) – Complémentaire(A,B) – Union(A,B,C) – Différence-symétrique(A,B,C) qui construisent l’ensemble résultat dans leur dernier paramètre. Ecrire les fonctions ci-dessus dans le cas où les ensembles traités sont des parties de l’ensemble E des entiers de 1 à N et chaque ensemble est implémenté par un vecteur [1..N] de booléens. Exercice 4.2 Utilisation de piles Evaluer à l’aide des axiomes du type abstrait Pile l’expression suivante, où les primitives ( CréerPile, PileVide ?, ValeurPile, Empiler, Dépiler) sont notées en abrégé (CP, PV, VP, EP, DP respectivement) : VP(EP(EP(CP,a),VP(EP(DP(EP(CP,a)),b)))) Exercice 4.3 Utilisation de piles On se donne trois piles P1 , P2 et P3 . la pile P1 contient une suite de nombres entiers positifs. 1. Ecrire un algorithme pour déplacer les entiers de P 1 dans P2 de façon à avoir dans P2 tous les nombres pairs au dessous des nombres impairs. 2. Ecrire un algorithme pour copier dans P 2 les nombres pairs contenus dans P1 . Le contenu de P1 après exécution de l’algorithme doit être identique à celui avant exécution. Les nombres pairs doivent être dans P2 dans l’ordre où ils appairaissent dans P 1 . Exercice 4.4 Implémentation d’une pile On considère le type Pile d’entiers, où les éléments susceptibles d’être empilés sont des entiers. On peut implémenter ce type abstrait en utilisant, comme unique structure de données, un tableau de type entier et en mettant dans la première case du tableau l’indice sommet de pile. Adapter les cinq primitives des piles à cette structure. Exercice 4.5 Utilisation de piles La notation postfixée (appelée aussi notation polonaise inverse) donne un moyen d´écrire des expressions algébriques sans utiliser des parenthèses ni des règles de priorité des opérateurs. L’algorithme d’évaluation d’une expression arithmétique postfixée est trivial si l’on utilise une pile. Sans perte de généralité, on peut supposer d’avoir une expression arithmétique postfixée où les opérandes sont des entiers d’un seul chiffre et les opérateurs sont les quatres opérations arithmétiques binaires de base (+, -, *, /). Une telle expression peut être représentée par un tableau de caractères (avec marqueur de fin de mot). Ecrire l’algorithme d’évaluation d’une expression arithmétique postfixée. Recommandation : pour connaitre l’origine du nom “notation polonaise inversée” et apprécier une démonstration avec animation, voir l’URL : http://www.spsu.edu/cs/faculty/bbrown/web_lectures/postfix/ où on trouvera aussi les principes de l’algorithme de conversion d’une expression arithmétique usuelle (dite aussi infixe, car les opérateurs binaires se trouvent entre les deux opérandes) en une expression postfixe.