Exercices : utilisation des tableaux python comme listes ou comme piles
Exercice 1. * écriture polonaise inversée
Écrire une fonction pour calculer une expression donnée en écriture polonaise inversée. Comme python ne permet
pas de créer de type, on utilisera juste un tableau contenant des nombres et des chaînes de caractères.
Remarque: Les tableaux python sont "polymorphes", ce qui signifie qu’on peut y mettre des objets de différents types.
Exercice 2. *** dérécursifier l’algorithme des tours de Hanoï
Souvenez-vous du jeu des tours de Hanoï. Trois tiges, ndisques qu’il faut déplacer de la première à la deuxième
tige en faisant en sorte qu’à chaque instant, sur chaque tige, les disques soient placés du plus gros au plus petit.
On rappelle l’algorithme utilisé pour le résoudre :
Entrées :
•n, entier (nombre de disques à déplacer)
•d∈~1,3(tige de départ)
•a∈~1,3(tige d’arrivée)
début
si n=1:
Déplacer le disque de dvers a
sinon:
i←la tige intermédiaire
Appliquer l’algorithme pour déplacer les n−1 premiers disques de dvers i
Déplacer le dernier disque de dvers a
Appliquer l’algorithme pour déplacer les n−1 disques de ivers a
fin
fin
Algorithme 1 : tours de Hanoï (récursif)
1. Programmer cet algorithme en python. Le résultat du programme sera d’afficher des messages du type "déplacer
un disque de la tige 1 vers la tige 2".
2. On désire maintenant écrire une version non récursive de ce programme. Le principe est simple : nous allons
gérer nous même la pile des appels. On va maintenir une pile aFaire qui contient les prochaines opérations à
faire. Pour enregistrer le fait qu’il faut déplacer kdisque de la tige ivers la tige j, nous enregistrerons le triplet
(k,i,j).
Ainsi, nous initialiserons la pile par aFaire =[ (n,d,a) ]. Puis après une étape de l’algorithme, elle devien-
dra [ (n-1,i,a) , (1,d,a) , (n-1,d,i) ], où iest la tige intermédiaire calculée au préalable.
Exercice 3. ** tri Fusion
Le tri fusion est un tri particulièrement adapté aux listes chaînées. On propose de l’adapter pour trier des tableaux
python.
Quels sont les inconvénients par rapport à la version utilisant des vraies listes chaînées comme en Caml ?
1