Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Les Piles
Matière: Algorithmique avancé
Enseignante: Mme Ahlem TAYACHI
Classe : MPI_1_1, GL1, BI1
Exercice 1 :
On se donne trois piles P1, P2 et P3. La pile P1 contient une suite de nombres entiers positifs.
1. Ecrire un sous-algorithme pour copier dans P2 les nombres pairs contenus dans P1
dans l’ordre de P1.
2. Ecrire un sous-algorithme pour déplacer les entiers de P1 dans P2 de façon à avoir dans
P2 tous les nombres pairs au-dessus des nombres impairs.
Exercice 2 :
On se propose de convertir un nombre exprimé en base 10 en base 2. Pour ceci, on utilise
comme structure de données une PILE d’entiers.
Les différents restes des divisions successives des quotients par 2 sont empilés dans la
pile.
Le résultat final est construit en effectuant les dépilements des restes.
Ecrire un algorithme permettant de traduire le principe de cette méthode en utilisant
les fonctions de manipulation d'une PILE qu’on suppose déjà prédéfinies.
Exemple : 11 en base 10 :
Quotient Reste
11 1
5 1
2 0
1 1
0
Etat de la Pile :
Empiler
1 Dépiler
0 0
1 1 1
1 1 1 1
Le résultat sera : 1 0 1 1
1
Exercice 3
Il s’agit d’écrire un algorithme qui vérifie si une expression est bien parenthésée. Nous
considérerons des expressions arithmétiques, formées de nombres entiers et des quatre
opérateurs +, -, *, /. Ces expressions pourront être parenthésées à l’aide de deux types de
parenthèses différentes : () et [].
1. Pour toute parenthèse fermante d’un certain type, il existe une parenthèse ouvrante du
même type qui la précède, et qui n’a pas encore été fermée.
2. Toute parenthèse ouvrante d’un certain type est fermée par une parenthèse fermante du
même type.
([3+5]-(2 -9))
1+4
([(2)])
- En utilisant une pile, écrire une fonction VérifierExpressionPar qui permet de vérifier si une
expression est bien parenthésée. On suppose que l’expression est insérée initialement dans
un tableau de taille n.
Exercice 4
On suppose que l’expression est valide et que les nombres utilisés dans l’expression sont des
entiers compris entre 0 et 9. De plus, l’expression est donnée sous forme d’un tableau de
caractères.
2
- Ecrire une fonction EvaluerPostfixé qui évalue une expression post-fixé à l’aide d’une
pile d’entiers. Pour ce faire, utiliser la fonction de conversion suivante : Convertir (car :
caractère) : entier qui a pour objectif de convertir un caractère numérique en son
équivalent en entier.
Exercice 5
Lorsqu'on utilise un éditeur de texte, on dispose d'une touche qui permet d'effacer le
caractère que l'on vient de frapper. Cette touche sera représentée par le caractère '#'.
Une autre touche permet de tout effacer jusqu'au début de la ligne. Cette touche sera
représentée par le caractère '%'. La fin d'une ligne sera indiquée par le caractère '$'.
Exemple
Ligne de texte non valide avant la conversion : "Jem# m'euh%Je m'#euh## suit#s
trop#mp&#é$"
1- Ecrire une procédure LireLigne (var P : pile) qui prend comme paramètre une pile vide et
permet de saisir dans cette pile une ligne de texte, caractère par caractère, compte tenu
du caractère de fin de saisie '$'. On supposera que l'on ne saisit qu'une seule ligne de texte,
de longueur quelconque.
2- Ecrire une procédure ConvertirLigne (var P : pile) qui, étant donnée une ligne de texte non
valide (contenu initial de la pile) entrée en paramètre, permet de la convertir en une ligne
de texte valide (nouveau contenu de la pile). Cette procédure utilise une file temporaire.
3- Ecrire une procédure EcrireLigne (P : pile) qui prend en paramètre une pile remplie et qui
affiche son contenu. La phrase contenue dans cette pile est correcte.
Note : Utilisez toutes les opérations et primitives élémentaires prédéfinies