Académique Documents
Professionnel Documents
Culture Documents
PSI 2018/2019
II Fonctions supplémentaires
Pour implémenter les fonctions suivantes, on utilisera uniquement les fonctions creer_pile(),
est_vide(p), empiler(p,e) et depiler(p) et/ou les fonctions définies dans l’exercice.
afficher_base10 (127)
On détermine l’écriture de n en base 10 à l’aide de divisions successives par 10. Cependant,
comme on peut le constater, les différents chiffres apparaissent dans l’ordre inverse de l’ordre
d’écriture habituel. En utilisant une pile, modifier la fonction afficher_base10 pour que l’affichage
soit effectué dans l’ordre habituel.
1
PSI - Informatique page 2/4
IV Rangement de wagons
Des wagons portant un numéro sont disposés sur un tronçon de voie OC qui est relié par un
aiguillage à deux voies OA et OB.
Il est possible d’envoyer le wagon le plus à gauche de la voie OC sur l’une des voies OA ou
OB et, de même, on peut déplacer le wagon le plus à droite des voies OA ou OB vers la voie OC.
1. On veut réordonner les wagons de la voie OC afin que ceux avec un numéro pair se trouvent à
gauche de ceux portant un numéro impair. Expliquer comment modéliser ce problème à l’aide
de trois piles et donner un algorithme réalisant ce travail.
2. On veut maintenant réordonner les wagons dans l’ordre croissant des numéros. Donner un
algorithme permettant de réaliser cette opération. On utilisera la fonction regarder définie plus
haut.
Indications :
— L’algorithme désempilera la voie OC jusqu’à ce qu’elle soit vide. On ne réempilera pas de
wagon sur cette voie.
— A la fin de chaque étape de l’algorithme, la voie OA contiendra des wagons ordonnés, la
voie OB sera vide.
V Labyrinthe parfait
On cherche à construire un labyrinthe parfait. Dans de tels dédales, il existe un et un seul chemin
reliant deux paires de points du labyrinthe. Voici un exemple de construction d’un labyrinthe parfait
de dimension n × n avec n = 20.
Pour construire ce labyrinthe, on considère une grille laby de taille n × n initialement remplie
de zéros. On trace le labyrinthe en visitant chaque point de la grille en suivant l’algorithme décrit
ci-dessous :
PSI - Informatique page 3/4
• on part du point inférieur gauche de coordonnées (0,0). On marque ce point comme visité
en remplaçant le 0 par un 1 dans laby. On stocke cette position dans une pile.
• On regarde quels sont les points voisins et non visités de (0,0) sur la grille. Dans ce cas :
— S’il y a au moins une possibilité, on en choisit une au hasard, et on recommence avec le
nouveau point.
— S’il n’y en pas, on désempile la position de la pile, on revient au point précédent et on
recommence.
• Lorsque l’on est revenu au point de départ et qu’il n’y a plus de possibilités (la pile est
vide), le labyrinthe est terminé.
def labyrinthe ( n ):
P = creer_pile ()
tortue . up ()
tortue . goto ( -200 , -200)
tortue . down ()
depart =[0 ,0]
empiler (P , depart )
visite ( depart )
if len ( L ) > 0:
next_cellule = tirage ( L )
visite ( next_cellule )
empiler (P , cellule )
empiler (P , next_cellule )
V.1 A vous !
1. Ecrire la fonction visiter(c) prenant en argument une liste de deux coordonnées c = [x,y]
et qui marque le point de coordonnées (x,y) comme visité dans le tableau laby.
2. Créer une fonction est_visite(x,y,n) renvoyant True si le point du labyrinthe de coordonnées
(x,y) a déjà été visité ou si les coordonnées (x,y) sont situées en dehors du labyrinthe et False
sinon.
3. Créer une fonction voisins_non_visites(c,n) qui, étant donné une position c = [x,y], dé-
termine les positions adjacentes non encore visitées. Le résultat est renvoyé sous forme d’une
liste (contenant donc de 0 à 4 éléments).
PSI - Informatique page 4/4
4. Créer une fonction tirage(L)qui renvoie un élément au hasard dans une liste L. On importera
le module random de Python et on pourra utiliser la fonction randint(a,b) qui renvoie un
entier aléatoire entre a et b.