TP2 - Pile/File programmation Objet
- Représenter des structures de données en objet ;
- Créer un ensemble de méthodes manipulant ces objets.
- Se créer un dossier
Terminale NSIsur votre ordinateur ou clé USB - Dans ce dossier, créer un dossier
Structures Linéaires
Sur EduPython ou autre instance python, faire :
- Créer un nouveau fichier en cliquant sur l'icône
📄, ou en appuyant surCTRL+N - Enregistrer le fichier sous le nom
TP2_Pile_File_POOen cliquant sur l'icône💾, ou en appuyant surCTRL+S
L'ensemble des exercices se fait sur python.
Dans ce TP, les piles et les files contiennent les mêmes 2 attributs :
- tete : None ou valeur passée en paramètre ;
- reste : None s’il n’y en a pas, une Pile/File s’il y en a un, passé en paramètre.
Files
L’élément en tête de file est le premier à partir, enfiler rajoute à chaque fois un élément à la fin.
Soit le modèle de la classe File suivant :
class File :
def __init__(self, ..., ...):
...
def __str__(self):
...
def estVide(self):
...
def enfiler(self, ...):
...
def defiler(self):
...
def taille(self):
...
- Compléter le constructeur de la classe.
- Dans le
main, définir une première file contenant l'élément 3, puis une seconde file contenant les éléments 4 puis 2. - Compléter la méthode
__str__. Celle-ci doit afficher la tête de chaque élément de la file. - Afficher le contenu de la première file, puis de la seconde.
- Compléter la méthode
estVide. - Compléter la méthode
enfiler. L'élément en paramètre est ajouté au dernier objet de la file. - Tester la méthode : enfiler l'entier 6 dans la première file, puis l'afficher.
- Compléter la méthode
defiler. Celle-ci supprime le premier élément de la file, et le retourne. - Tester la méthode : défiler la seconde file.
- Compléter la méthode
taille, retournant la taille de la file. - Écrire la méthode
passerPremier(self, i)qui va placer l’élément à la i-ème position en première place. - Écrire la méthode
changerPlace(self, i, j)qui va échanger de place l'élément à la i-ème place avec celui à la j-ème place.
Piles
L’élément en tête de pile est le premier à partir, empiler rajoute à chaque fois un élément au début de la pile.
Soit le code suivant :
class Pile :
def __init__(self, ..., ...):
...
def __str__(self):
...
def estVide(self):
...
def empiler(self, ...):
...
def depiler(self):
...
def taille(self):
...
- Compléter le constructeur de la classe.
- Dans le
main, définir une première pile contenant l'élément 12, puis une seconde pile contenant les éléments 5 puis 8. - Compléter la méthode
__str__. Celle-ci doit afficher la tête de chaque élément de la pile. - Afficher le contenu de la première pile, puis de la seconde.
- Compléter la méthode
estVide. - Compléter la méthode
empiler. L'élément en paramètre est ajouté au premier objet de la pile. - Tester la méthode : empiler l'entier 6 dans la première pile, puis l'afficher.
- Compléter la méthode
depiler. Celle-ci supprime le premier élément de la pile, et le retourne. - Tester la méthode : dépiler la seconde pile.
- Compléter la méthode
taille, retournant la taille de la pile. - Écrire une méthode
recherche(self,x)qui vérifie si l’élément x est bien présent dans la pile.
Aller plus loin
- Créer une fonction
maxPile(P, i)ayant pour paramètres une pile P et un entier i. Cette fonction retourne la position du plus grand élément parmi les i premiers éléments empilés de la pile P.
Après appel de cette fonction, la pile P devra avoir retrouvé son état d’origine.
La position du sommet de la pile est 1. - Créer une fonction
retourner(P,j)ayant pour paramètres une pile P et un entier j. Cette fonction inverse l’ordre des j premiers éléments empilés, et ne renvoie rien.
On pourra utiliser deux piles temporaires.
On souhaite modéliser une pile de crêpes, chacune représentée par un numéro modélisant leur taille. Ainsi la "crêpe 1" sera plus petite que la "crêpe 2", elle-même plus petite que la "crêpe 3" et ainsi de suite.
Le but : on souhaite trier les crêpes par ordre croissant, c’est-à-dire que la plus grosse crêpe soit tout en dessous de la pile, la plus petite tout en haut.
On définit l’algorithme suivant :
- On recherche la plus grande crêpe ;
- On retourne la pile à partir de cette crêpe de façon à mettre cette plus grande crêpe tout en haut de la pile ;
- On retourne l’ensemble de la pile de façon à ce que cette plus grande crêpe se retrouve tout en bas ;
- La plus grande crêpe étant à sa place, on recommence l'algorithme avec le reste de la pile.
- Créer la fonction
tri_crepes(P)ayant pour paramètre une pile P. Cette fonction trie la pile P selon la méthode du tri crêpes et ne renvoie rien.
On utilisera les fonctions créées dans les questions précédentes.
Vous pourrez faire un schéma pour expliciter le fonctionnement du tri crêpe.