DS Files Piles
DS Files Piles
DS Files Piles
On crée une classe Pile qui modélise la structure d’une pile d’entiers. Le constructeur de la classe
initialise une pile vide. La définition de cette classe sans l’implémentation de ses méthodes est donnée
ci-dessous.
class Pile:
def __init__(self):
"""Initialise la pile comme une pile vide."""
def est_vide(self):
def depiler(self):
"""Retire l'élément au sommet de la pile et le renvoie."""
Seules les méthodes de la classe ci-dessus doivent être utilisées pour manipuler les objets Pile.
1. (a) Ecrire une suite d’instructions permettant de créer une instance de la classe Pile affectée à une
variable pile1 contenant les éléments 7, 5 et 2 insérés dans cet ordre.
Ainsi, à l’issue de ces instructions, l’instruction pile1.afficher() produit l’affichage : 7, 5,
2.
(b) Donner l’affichage produit après l’exécution des instructions suivantes :
element1 = pile1.depiler()
pile1.empiler(5)
pile1.empiler(element1)
pile1.afficher()
(a) Dans chacun des quatre cas suivants, quel est l’affichage obtenu dans la console ?
Cas 1 Cas 2
»> pile.afficher() »> pile.afficher()
7, 5, 2, 3 7, 5, 2, 3
»> mystere(pile, 2).afficher() »> mystere(pile, 9).afficher()
Cas 3 Cas 4
»> pile.afficher() »> pile.est_vide()
7, 5, 2, 3 True
»> mystere(pile, 3).afficher() »> mystere(pile, 3).afficher()
3. Ecrire une fonction etendre qui prend en arguments deux objets Pile appelés pile1 et pile2 et
qui modifie pile1 en lui ajoutant les éléments de pile2 rangés dans l’ordre inverse. Cette fonction
ne renvoie rien.
Terminale NSI - Évaluation : Les PILES et FILES
>>> pile1.afficher()
7, 5, 2, 3
>>> pile2.afficher()
1, 3, 4
>>> etendre(pile1, pile2)
>>> pile1.afficher()
7, 5, 2, 3, 4, 3, 1
>>> pile2.est_vide()
True
4. Ecrire une fonction supprime_toutes_occurences qui prend en arguments un objet Pile appelé
pile et un élément element et supprime tous les éléments element de pile.
On donne ci-dessous les résultats attendus pour certaines instructions :
>>> pile.afficher()
7, 5, 2, 3, 5
>>> supprime_toutes_occurences(pile, 5)
>>> pile.afficher()
7, 2, 3
Situation 1 : « Je cuisine des crêpes. Dès qu’une crêpe est faite, je la place sur un plat. Chaque nou-
velle crête est placée sur la crêpe précédente. Quand je vais manger une de ces crêpes, je commencerai par
la crêpe située en haut de mon plat. »
Situation 2 : « Je dispose d’une imprimante placée en réseau dans ma salle de classe équipée d’ordi-
nateurs, tous en réseau. Tous les élèves présents ont accès à cette imprimante, via le réseau. A la fin de
la séance, les élèves envoient leur production à l’impression. Les documents sont imprimés dans l’ordre
d’arrivée. »
On modélise la gestion de l’attente à une caisse de supermarché. Les clients sont associés à une file. Les per-
sonnes prioritaires passeront devant les autres clients sans attendre. Nous ne tenons pas compte dans cet
exercice de graduation dans les « priorités ». Nous ne tenons pas compte également de personnes arrivant
ensemble en caisse : il y aura toujours un des deux clients avant l’autre. On appelle « première personne »
dans la queue la première personne qui est juste derrière le client en train de payer ses articles en caisse.
En d’autres termes, le client qui règle ses articles ne compte plus, puisqu’il n’attend plus dans la queue.
5 4 3 2 1
La réorganisation grâce au contrôleur « relations clients » se met en place : les clients Client1 et Client2 font
un pas de côté, de même pour les personnes derrière le client Prioritaire en respectant leur ordre d’arrivée
:
Prioritaire
Nous utiliserons uniquement les quatre fonctions primitives suivantes pour la suite des questions :
Queue Tête
1 V = creer_file_vide()
2 val = defiler(F)
3 while not est_vide(F) and val != 'Prioritaire':
4 enfiler(V, val)
5 val = defiler(F)
Terminale NSI - Évaluation : Les PILES et FILES
Quels seront les contenus des files V et F et de la variable val à l’issue de ces instructions ?
(b) On considère la fonction longueur_file ci-dessous. Le but de cette fonction est de renvoyer
le nombre d’éléments d’une file donnée en paramètre. A la fin du programme, cette file doit
avoir retrouvé son état d’origine. Compléter cette fonction.
1 def longueur_file(F):
2 V = creer_file_vide()
3 n = 0
4 while not est_vide(F):
5 n = ..........
6 val = defiler(F)
7 enfiler(V, val)
8 while not est_vide(V):
9 ..........
10 ..........
11 return n
(c) Ecrire une fonction compter_prio qui prend en paramètre une file F. Cette fonction renvoie le
nombre de personnes prioritaires dans la file d’attente à l’instant t. La file F doit être identique
à celle du départ en fin d’exécution de la fonction.