• Aucun résultat trouvé

TD – Piles et files

N/A
N/A
Protected

Academic year: 2022

Partager "TD – Piles et files"

Copied!
3
0
0

Texte intégral

(1)

Fénelon Sainte-Marie 2016-2017

MP*/PC-PC*/PSI* [1-3] Marc Lichtenberg

TD – Piles et files

Introduction et objectifs

Dans ce TD consacré principalement aux piles (stacks) et, dans une moindre mesure, aux files (queues), on doit fondamentalement tenir compte des contraintes imposées par les structures des piles et des files. En particulier, dans les exercices 1 à 4 ci-dessous, on utilisera

exclusivement les fonctions de création et manipulation de piles vues en cours et mentionnées dans le « cahier des charges ».

Piles

Exercice N°1 – Copie d’une pile

Ecrire une fonction stack_copy (ou une méthode copy) recevant une pile s comme argument et renvoyant une copie s2 de s. Attention, la pile s doit (bien sûr…) être conservée !

Evaluer le coût en mémoire et le nombre d’opérations de la fonction.

Exercice N°2 – Inversion d’une pile

Ecrire une fonction stack_reverse (ou une méthode reverse) recevant une pile (s) comme argument et renvoyant une copie inversée rs de s. Attention, la pile s doit être conservée !

Evaluer le coût en mémoire et le nombre d’opérations de la fonction (on envisagera ici deux cas suivant que l’on conserve ou non la pile initiale s ).

Exercice N°3 – Permutations circulaires (acte 1)

Ecrire une fonction stack_circperm (ou une méthode circperm ) qui reçoit en argument une pile s et un entier n et effectue sur la pile n permutations circulaires successives.

Dans cet exercice, c’est la pile s elle-même qui sera modifiée.

(2)

TD – Piles et files / Sujet

Fénelon Sainte-Marie 2016-2017

MP*/PC-PC*/PSI* [2-3] Marc Lichtenberg

Exemple avec n=2 :

7 98

11 2

98 donnera 103

2 7

103 11

Evaluer le coût en mémoire et le nombre d’opérations de la fonction.

Exercice N°4 – Permutations circulaires (acte 2)

Ecrire une fonction stack_circperm2 (ou une méthode circperm2) qui reçoit en argument une pile s et un entier k et effectue une permutation circulaire sur les k premiers éléments de la pile.

Dans cet exercice, c’est la pile s elle-même qui sera modifiée.

Exemple avec k=4 :

7 11

11 98

98 donnera 2

2 7

103 103

5 5

Evaluer le coût en mémoire et le nombre d’opérations de la fonction.

Exercice N°5 – Expression correctement parenthésée

Dans un logiciel de calcul formel ou, plus généralement dans un éditeur de texte (par exemple utilisé pour écrire des programmes), il y a une gestion dynamique (i.e. « au vol ») du

parenthésage : si une parenthèse fermante de trop est ajoutée ou si elle n’est pas de même nature (une accolade au lieu d’un crochet par exemple) que la parenthèse ouvrante associée alors un message d’erreur (visuel, sonore) est envoyé.

Par exemple, les deux expressions suivantes sont erronées :

( 4 3 ) )

17

A = + i

(deux parenthèses fermantes pour une ouvrante.)

(3)

TD – Piles et files / Sujet

Fénelon Sainte-Marie 2016-2017

MP*/PC-PC*/PSI* [3-3] Marc Lichtenberg

sin 1 3

n

B n

⎧ ⎫

⎪ ⎡ ⎞ ⎪

= ⎨ ⎪ ⎩ ⎢⎣ + ⎟ ⎠ ⎬ ⎪ ⎭

(la première parenthèse fermante n’est pas de même nature que la deuxième « parenthèse » ouvrante.)

Ecrire une fonction qui reçoit comme argument une chaîne de caractères, en analyse la correction du parenthésage et renvoie à l’utilisateur un message adapté.

L’analyse de la chaîne de caractères se fera caractère après caractère. On gèrera une pile contenant les parenthèses ouvrantes et on comparera chaque parenthèse fermante au sommet (éventuel) de la pile.

Files

Exercice N°6

Reprendre les exercices 1 et 3 de la partie « Piles » mais en traitant cette fois le cas d’une file.

Suggestions de compléments

1. Les fonctions stack_circperm et stack_circperm2 peuvent être réunies en une seule. La nouvelle fonction recevra trois arguments : le nom de la pile, le nombre

d’éléments sur lesquels on appliquera des permutations circulaires et, enfin, le nombre de permutations circulaires à appliquer à ces éléments.

2. En Python, les concepts de pile et de file sont généralisés via les objets deque (double ended queue) du module collections . Ce sont en quelque sorte des files modifiables à gauche et à droite.

Les méthodes utilisables et de nombreux exemples se trouvent au paragraphe : 8.3.2 de la documentation Python (versions 2.x) :

http://docs.python.org/2/library/collections.html?highlight=deque#deque-objects 8.3.3 de la documentation Python (versions 3.x) :

http://docs.python.org/3/library/collections.html?highlight=deque#deque-objects

Références

Documents relatifs

 Vu que des ions positifs Zn 2+ apparaissent dans le compartiment « zinc », des ions positifs (ici K + ) viennent dans la solution pour assurer l’électro neutralité.. 3/

Emplacement de la pile.- Pour ˆetre sˆ ur que le programme et la pile n’interf`erent pas, le microprocesseur i8086 a ´et´e con¸cu de telle fa¸con que le code et les

Exemple.- ´ Ecrivons un programme QBasic qui demande un entier naturel (de deux octets) et fait appel ` a un sous-programme en langage machine qui passe la valeur en

– Les éléments de la pile sont rangés dans un tableau – Un entier représente la position du sommet de la pile.. • Représentation chaînée (par

Alors H est

Par exemple, si l’on part de la partition (1,1,4) on fait disparaître les deux tas d’une carte chacun, les tas de 4 cartes est ramené à 3 cartes et on crée un nouveau tas de

On s’intéresse dans tout ce problème à une suite infinie de lancers d’une pièce équilibrée autour duquel deux joueurs J et J 0 s’affrontent. Le joueur J l’emporte si

5. Sur la première pile uniquement, en utilisant le vocabulaire introduit, indiquer ce qui arrive aux électrons au niveau de chacune des électrodes en précisant celle