diff --git a/tp6_enirely/TP6/LSC.py b/tp6_enirely/TP6/LSC.py deleted file mode 100644 index a0cd9c8..0000000 --- a/tp6_enirely/TP6/LSC.py +++ /dev/null @@ -1,260 +0,0 @@ -""" -Librairie des Listes Simplement Chaînées. - -Elle met à distribution cette structure de données et son interface. - -@author: L. JOANNIC -""" - - -# ############################################################################ - -class Liste_Simplement_Chainee(object): - """ - Classe des Listes Simplement Chainees. - - Attributs - - _tete : None si vide, Maillon sinon. - - Méthodes - - est_vide - - ajouter_en_tete - - tete - - queue - """ - - def __init__(self): - """ - Construire une instance de Liste Simplement Chainee. - - Returns - ------- - None. - - """ - self._tete = None - return None - - def est_vide(self): - """ - Tester si l'instance est vide. - - Returns - ------- - bool - Vrai ssi la liste est vide. - - """ - return (self._tete is None) - - def ajouter_en_tete(self, element): - """ - Ajouter l'élément en tête de liste. - - Parameters - ---------- - element : type de donnee - Donnnée à ajouter à la liste. - - Returns - ------- - resultat : Liste_Simplement_Chainee - La liste à abonder. - - """ - resultat = Liste_Simplement_Chainee() - resultat._tete = Maillon(element, self) - return resultat - - def tete(self): - """ - Renvoyer la donnée stockée en tête de liste. - - Returns - ------- - type de donnee quelconque - donnee en tete. - - """ - assert not(self.est_vide()), "Liste Vide" - return self._tete.donnee - - def queue(self): - """ - Renvoyer la sous-liste suivant le maillon de tete. - - Returns - ------- - Liste_Simplement_Chainee - Queue de la liste. - - """ - assert not(self.est_vide()), "Liste Vide" - return self._tete.suite - - -# ############################################################################ - -def creer_liste_vide(): - """ - Créer une liste simplement chainee vide. - - Returns - ------- - Liste_Simplement_Chainee - Liste vide. - - Effets de bord - -------------- - Aucun - """ - return Liste_Simplement_Chainee() - - -def est_vide(liste): - """ - Tester si la liste simplement chainee est vide. - - Parameters - ---------- - liste : Liste Simplement Chainee - Liste à tester. - - Returns - ------- - bool - Vrai ssi la liste est vide. - - Effets de bord - -------------- - Aucun - """ - return liste.est_vide() - - -def ajouter_en_tete(liste, element): - """ - Inserer un element en tete de liste simplemeent chainee. - - Parameters - ---------- - liste : LSC - Liste à abonder. - element : type de donnee - Donnee à aouter. - - Returns - ------- - LSC, copie de liste à laquelle element a été ajouté en tete. - - Effets de bord - -------------- - Aucun - """ - return liste.ajouter_en_tete(element) - - -def tete(liste): - """ - Consulter la tete de liste. - - Parameters - ---------- - liste : LSC - Liste à consulter. - - Returns - ------- - type de donnée - valeur de la tete de liste. - - Effets de bord - -------------- - Aucun - """ - return liste.tete() - - -def queue(liste): - """ - Renvoyer la liste sans sa tete. - - Parameters - ---------- - liste : LSC - Liste à étêter. - - Returns - ------- - LSC - Liste sans son maillon de tête. - - Effets de bord - -------------- - Aucun - """ - return liste.queue() - - -def afficher_liste(liste, taille=-1): - """ - Afficher la liste en format de présentation. - - Parameters - ---------- - liste : LSC - Liste à énumérer. - - Returns - ------- - None. - - Effets de bord - -------------- - Affichage à l'écran. - - """ - reste = liste - compteur = 0 - print('+-----\n|') - while not(est_vide(reste)) and (taille == -1 or compteur < taille): - print('+- {}\n|'.format(str(tete(reste)))) - reste = queue(reste) - compteur += 1 - print('+-----') - return None - -# ############################################################################ - -class Maillon(object): - """ - Classe des Maillons d'une Liste Simplement Chainee. - - Attributs - - donnee : donnee stockee dans le maillon - - suite : liste simplemement chainee suivant le maillon - """ - - def __init__(self, donnee=None, suite=Liste_Simplement_Chainee()): - """ - Construire une instance de la classe des Maillons. - - Parameters - ---------- - donnee : type de donnee, optional - Donnee initiale dans le Maillon. The default is None. - suite : LSC, optional - Sous-liste suivant le Maillon courant. - The default is Liste_Simplement_Chainee(). - - Returns - ------- - None. - - """ - self.donnee = donnee - self.suite = suite - return None - - -# ############################################################################ diff --git a/tp6_enirely/TP6/Pile_LSC.py b/tp6_enirely/TP6/Pile_LSC.py deleted file mode 100644 index 589706c..0000000 --- a/tp6_enirely/TP6/Pile_LSC.py +++ /dev/null @@ -1,17 +0,0 @@ -import LSC as lsc -from typing import Any - -def creer_pile_vide() -> lsc.Liste_Simplement_Chainee: - return lsc.creer_liste_vide() - -def est_pile_vide(liste: lsc.Liste_Simplement_Chainee) -> bool: - return lsc.est_vide(liste) - -def sommet(liste: lsc.Liste_Simplement_Chainee) -> Any: - return lsc.tete(liste) - -def empiler(liste: lsc.Liste_Simplement_Chainee, element: Any) -> lsc.Liste_Simplement_Chainee: - return lsc.ajouter_en_tete(liste,element) - -def depiler(liste: lsc.Liste_Simplement_Chainee) -> lsc.Liste_Simplement_Chainee: - return lsc.queue(liste) diff --git a/tp6_enirely/TP6/Pile_List.py b/tp6_enirely/TP6/Pile_List.py deleted file mode 100644 index 042a4f5..0000000 --- a/tp6_enirely/TP6/Pile_List.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Any - - -def creer_pile_vide(): - return [] - - -def est_pile_vide(pile: list): - return len(pile) == 0 - - -def sommet(pile: list): - return pile[-1] - - -def empiler(pile: list, element: Any): - return pile + [element] - - -def depiler(pile: list): - return pile[:-1] diff --git a/tp6_enirely/TP6/Pile_Tuple.py b/tp6_enirely/TP6/Pile_Tuple.py deleted file mode 100644 index 120f904..0000000 --- a/tp6_enirely/TP6/Pile_Tuple.py +++ /dev/null @@ -1,18 +0,0 @@ -def creer_pile_vide(): - return () - - -def est_pile_vide(pile): - return pile == () - - -def sommet(pile): - return pile[-1] - - -def empiler(pile, elt): - return pile + [elt] - - -def depiler(pile): - return pile[:-1] diff --git a/tp6_enirely/TP6/TP_Piles.pdf b/tp6_enirely/TP6/TP_Piles.pdf deleted file mode 100644 index 6a5c849..0000000 Binary files a/tp6_enirely/TP6/TP_Piles.pdf and /dev/null differ diff --git a/tp6_enirely/TP6/test.py b/tp6_enirely/TP6/test.py deleted file mode 100644 index 6139a8f..0000000 --- a/tp6_enirely/TP6/test.py +++ /dev/null @@ -1,90 +0,0 @@ -import Pile_LSC as lifo -import LSC as blsc -from random import shuffle - -def afficher(pile): - """Affiche les éléments d'une pile du sommet à la base.""" - print("|----") - while not lifo.est_pile_vide(pile): - print(f"| {lifo.sommet(pile)}") - pile = lifo.depiler(pile) - print("|----\n") - -def hauteur_pile(pile): - """Renvoie la hauteur de la pile sans la modifier.""" - copie = pile - n = 0 - while not lifo.est_pile_vide(copie): - copie = lifo.depiler(copie) - n += 1 - return n -def max_pile(pile: blsc.Liste_Simplement_Chainee, i: int): - """Trouve le maximum parmi les i premiers éléments de la pile.""" - total = hauteur_pile(pile) - #assert i > total (f"Taille insuffisante : attendu au moins {i} éléments") - meilleur = lifo.sommet(pile) # Premier élément comme point de départ - temporaire = pile - - for _ in range(i): - courant = lifo.sommet(temporaire) - temporaire = lifo.depiler(temporaire) - - if courant > meilleur: - meilleur = courant - - return meilleur -def retourner(pile, j): - """Inverse les j derniers éléments de la pile.""" - pile_aux = lifo.creer_pile_vide() - - # Depile les éléments dans une pile temporaire: - for _ in range(j): - pile_aux = lifo.empiler(pile_aux, lifo.sommet(pile)) - pile = lifo.depiler(pile) - - # Remets les éléments inversés dans la pile principale: - while not lifo.est_pile_vide(pile_aux): - pile = lifo.empiler(pile, lifo.sommet(pile_aux)) - pile_aux = lifo.depiler(pile_aux) - - return pile - -def tri_crepes_recursif(pile, n=None): - """Trie la pile en utilisant le tri des crêpes de manière récursive.""" - if n is None: - n = hauteur_pile(pile) - # pas besoin de tri en si len(pile) == 1 - if n <= 1: - return pile - - pos_max = max_pile(pile, n) - - if pos_max != 1: - pile = retourner(pile, pos_max) - - pile = retourner(pile, n) - return tri_crepes_recursif(pile, n - 1) - -if __name__ == "__main__": - # Initialisation d'une pile avec des valeurs aléatoires - # Tri des crêpes récursif - ma_liste = [_ for _ in range(10)] - shuffle(ma_liste) - - print("Liste de départ : ", ma_liste) - - ma_pile = lifo.creer_pile_vide() - - print("\nEMPILEMENT\n") - - for element in ma_liste: - ma_pile = lifo.empiler(ma_pile, element) - afficher(ma_pile) - - print("\nDEPILEMENT\n") - - while not(lifo.est_pile_vide(ma_pile)): - print(f"Sommet : {lifo.sommet(ma_pile)}") - ma_pile = lifo.depiler(ma_pile) - afficher(ma_pile) - print(max_pile(ma_pile,1)) diff --git a/tp6_enirely/TP6/test.py.patch b/tp6_enirely/TP6/test.py.patch deleted file mode 100644 index 1f31b39..0000000 --- a/tp6_enirely/TP6/test.py.patch +++ /dev/null @@ -1,34 +0,0 @@ -# Patch generated by Pyment v0.3.3 - ---- a/test.py -+++ b/test.py -@@ -3,6 +3,14 @@ - - - def afficher(pile): -+ """ -+ -+ Args: -+ pile: -+ -+ Returns: -+ -+ """ - print("|----\n|") - while not (lifo.est_vide(pile)): - print("| {}\n|".format(lifo.sommet(pile))) -@@ -12,6 +20,14 @@ - - - def hauteur_pile(P): -+ """ -+ -+ Args: -+ P: -+ -+ Returns: -+ -+ """ - n = 0 - while not (lifo.est_vide(P)): - n += 1 diff --git a/tp6_enirely/TP6/test_2.py/Pile_List.rst b/tp6_enirely/TP6/test_2.py/Pile_List.rst deleted file mode 100644 index f395726..0000000 --- a/tp6_enirely/TP6/test_2.py/Pile_List.rst +++ /dev/null @@ -1,7 +0,0 @@ -Pile\_List module -================= - -.. automodule:: Pile_List - :members: - :undoc-members: - :show-inheritance: diff --git a/tp6_enirely/TP6/test_2.py/Pile_Tuple.rst b/tp6_enirely/TP6/test_2.py/Pile_Tuple.rst deleted file mode 100644 index de01687..0000000 --- a/tp6_enirely/TP6/test_2.py/Pile_Tuple.rst +++ /dev/null @@ -1,7 +0,0 @@ -Pile\_Tuple module -================== - -.. automodule:: Pile_Tuple - :members: - :undoc-members: - :show-inheritance: diff --git a/tp6_enirely/TP6/test_2.py/modules.rst b/tp6_enirely/TP6/test_2.py/modules.rst deleted file mode 100644 index af68937..0000000 --- a/tp6_enirely/TP6/test_2.py/modules.rst +++ /dev/null @@ -1,9 +0,0 @@ -TP6 -=== - -.. toctree:: - :maxdepth: 4 - - Pile_List - Pile_Tuple - test diff --git a/tp6_enirely/TP6/test_2.py/test.rst b/tp6_enirely/TP6/test_2.py/test.rst deleted file mode 100644 index 206500f..0000000 --- a/tp6_enirely/TP6/test_2.py/test.rst +++ /dev/null @@ -1,7 +0,0 @@ -test module -=========== - -.. automodule:: test - :members: - :undoc-members: - :show-inheritance: diff --git a/tp6_enirely/tp6/LSC.py b/tp6_enirely/tp6/LSC.py deleted file mode 100644 index a0cd9c8..0000000 --- a/tp6_enirely/tp6/LSC.py +++ /dev/null @@ -1,260 +0,0 @@ -""" -Librairie des Listes Simplement Chaînées. - -Elle met à distribution cette structure de données et son interface. - -@author: L. JOANNIC -""" - - -# ############################################################################ - -class Liste_Simplement_Chainee(object): - """ - Classe des Listes Simplement Chainees. - - Attributs - - _tete : None si vide, Maillon sinon. - - Méthodes - - est_vide - - ajouter_en_tete - - tete - - queue - """ - - def __init__(self): - """ - Construire une instance de Liste Simplement Chainee. - - Returns - ------- - None. - - """ - self._tete = None - return None - - def est_vide(self): - """ - Tester si l'instance est vide. - - Returns - ------- - bool - Vrai ssi la liste est vide. - - """ - return (self._tete is None) - - def ajouter_en_tete(self, element): - """ - Ajouter l'élément en tête de liste. - - Parameters - ---------- - element : type de donnee - Donnnée à ajouter à la liste. - - Returns - ------- - resultat : Liste_Simplement_Chainee - La liste à abonder. - - """ - resultat = Liste_Simplement_Chainee() - resultat._tete = Maillon(element, self) - return resultat - - def tete(self): - """ - Renvoyer la donnée stockée en tête de liste. - - Returns - ------- - type de donnee quelconque - donnee en tete. - - """ - assert not(self.est_vide()), "Liste Vide" - return self._tete.donnee - - def queue(self): - """ - Renvoyer la sous-liste suivant le maillon de tete. - - Returns - ------- - Liste_Simplement_Chainee - Queue de la liste. - - """ - assert not(self.est_vide()), "Liste Vide" - return self._tete.suite - - -# ############################################################################ - -def creer_liste_vide(): - """ - Créer une liste simplement chainee vide. - - Returns - ------- - Liste_Simplement_Chainee - Liste vide. - - Effets de bord - -------------- - Aucun - """ - return Liste_Simplement_Chainee() - - -def est_vide(liste): - """ - Tester si la liste simplement chainee est vide. - - Parameters - ---------- - liste : Liste Simplement Chainee - Liste à tester. - - Returns - ------- - bool - Vrai ssi la liste est vide. - - Effets de bord - -------------- - Aucun - """ - return liste.est_vide() - - -def ajouter_en_tete(liste, element): - """ - Inserer un element en tete de liste simplemeent chainee. - - Parameters - ---------- - liste : LSC - Liste à abonder. - element : type de donnee - Donnee à aouter. - - Returns - ------- - LSC, copie de liste à laquelle element a été ajouté en tete. - - Effets de bord - -------------- - Aucun - """ - return liste.ajouter_en_tete(element) - - -def tete(liste): - """ - Consulter la tete de liste. - - Parameters - ---------- - liste : LSC - Liste à consulter. - - Returns - ------- - type de donnée - valeur de la tete de liste. - - Effets de bord - -------------- - Aucun - """ - return liste.tete() - - -def queue(liste): - """ - Renvoyer la liste sans sa tete. - - Parameters - ---------- - liste : LSC - Liste à étêter. - - Returns - ------- - LSC - Liste sans son maillon de tête. - - Effets de bord - -------------- - Aucun - """ - return liste.queue() - - -def afficher_liste(liste, taille=-1): - """ - Afficher la liste en format de présentation. - - Parameters - ---------- - liste : LSC - Liste à énumérer. - - Returns - ------- - None. - - Effets de bord - -------------- - Affichage à l'écran. - - """ - reste = liste - compteur = 0 - print('+-----\n|') - while not(est_vide(reste)) and (taille == -1 or compteur < taille): - print('+- {}\n|'.format(str(tete(reste)))) - reste = queue(reste) - compteur += 1 - print('+-----') - return None - -# ############################################################################ - -class Maillon(object): - """ - Classe des Maillons d'une Liste Simplement Chainee. - - Attributs - - donnee : donnee stockee dans le maillon - - suite : liste simplemement chainee suivant le maillon - """ - - def __init__(self, donnee=None, suite=Liste_Simplement_Chainee()): - """ - Construire une instance de la classe des Maillons. - - Parameters - ---------- - donnee : type de donnee, optional - Donnee initiale dans le Maillon. The default is None. - suite : LSC, optional - Sous-liste suivant le Maillon courant. - The default is Liste_Simplement_Chainee(). - - Returns - ------- - None. - - """ - self.donnee = donnee - self.suite = suite - return None - - -# ############################################################################ diff --git a/tp6_enirely/tp6/Pile_LSC.py b/tp6_enirely/tp6/Pile_LSC.py deleted file mode 100644 index 5603678..0000000 --- a/tp6_enirely/tp6/Pile_LSC.py +++ /dev/null @@ -1,63 +0,0 @@ -import LSC as lsc -from typing import Any - -def creer_pile_vide() -> lsc.Liste_Simplement_Chainee: - """Crée une pile vide sous forme de liste simplement chaînée. - - Returns: - lsc.Liste_Simplement_Chainee: Une pile vide représentée par une liste simplement chaînée. - """ - return lsc.creer_liste_vide() - -def est_pile_vide(pile: lsc.Liste_Simplement_Chainee) -> bool: - """Vérifie si la pile est vide. - - Args: - pile (lsc.Liste_Simplement_Chainee): La pile à vérifier. - - Returns: - bool: True si la pile est vide, False sinon. - """ - return lsc.est_vide(pile) - -def sommet(pile: lsc.Liste_Simplement_Chainee) -> Any: - """Renvoie l'élément au sommet de la pile. - - Args: - pile (lsc.Liste_Simplement_Chainee): La pile dont on veut connaître le sommet. - - Returns: - Any: L'élément au sommet de la pile. - - Raises: - AssertionError: Si la pile est vide. - """ - assert not est_pile_vide(pile), "Pile vide." - return lsc.tete(pile) - -def empiler(pile: lsc.Liste_Simplement_Chainee, element: Any) -> lsc.Liste_Simplement_Chainee: - """Ajoute un élément au sommet de la pile. - - Args: - pile (lsc.Liste_Simplement_Chainee): La pile actuelle. - element (Any): L'élément à ajouter au sommet de la pile. - - Returns: - lsc.Liste_Simplement_Chainee: La nouvelle pile avec l'élément ajouté. - """ - return lsc.ajouter_en_tete(pile, element) - -def depiler(pile: lsc.Liste_Simplement_Chainee) -> lsc.Liste_Simplement_Chainee: - """Retire l'élément au sommet de la pile. - - Args: - pile (lsc.Liste_Simplement_Chainee): La pile dont on veut retirer le sommet. - - Returns: - lsc.Liste_Simplement_Chainee: La nouvelle pile sans l'élément au sommet. - - Raises: - AssertionError: Si la pile est vide. - """ - assert not est_pile_vide(pile), "Pile vide!" - return lsc.queue(pile) diff --git a/tp6_enirely/tp6/Pile_List.py b/tp6_enirely/tp6/Pile_List.py deleted file mode 100644 index 21a1ab6..0000000 --- a/tp6_enirely/tp6/Pile_List.py +++ /dev/null @@ -1,62 +0,0 @@ -from typing import Any - -def creer_pile_vide() -> list: - """Crée une pile vide sous forme de liste. - - Returns: - list: Une pile vide représentée par une liste. - """ - return [] - -def est_pile_vide(pile: list) -> bool: - """Vérifie si la pile est vide. - - Args: - pile (list): La pile à vérifier. - - Returns: - bool: True si la pile est vide, False sinon. - """ - return len(pile) == 0 - -def sommet(pile: list) -> Any: - """Renvoie l'élément au sommet de la pile. - - Args: - pile (list): La pile dont on veut connaître le sommet. - - Returns: - Any: L'élément au sommet de la pile. - - Raises: - AssertionError: Si la pile est vide. - """ - assert not est_pile_vide(pile), "Pile vide!" - return pile[-1] - -def empiler(pile: list, element: Any) -> list: - """Ajoute un élément au sommet de la pile. - - Args: - pile (list): La pile actuelle. - element (Any): L'élément à ajouter au sommet de la pile. - - Returns: - list: La nouvelle pile avec l'élément ajouté. - """ - return pile + [element] - -def depiler(pile: list) -> list: - """Retire l'élément au sommet de la pile. - - Args: - pile (list): La pile dont on veut retirer le sommet. - - Returns: - list: La nouvelle pile sans l'élément au sommet. - - Raises: - AssertionError: Si la pile est vide. - """ - assert not est_pile_vide(pile), "Pile vide!" - return pile[:-1] diff --git a/tp6_enirely/tp6/Pile_Tuple.py b/tp6_enirely/tp6/Pile_Tuple.py deleted file mode 100644 index 5781a66..0000000 --- a/tp6_enirely/tp6/Pile_Tuple.py +++ /dev/null @@ -1,60 +0,0 @@ -def creer_pile_vide(): - """Crée une pile vide sous forme de tuple. - - Returns: - tuple: Une pile vide représentée par un tuple vide. - """ - return () - -def est_pile_vide(pile): - """Vérifie si la pile est vide. - - Args: - pile (tuple): La pile à vérifier. - - Returns: - bool: True si la pile est vide, False sinon. - """ - return pile == () - -def sommet(pile): - """Renvoie l'élément au sommet de la pile. - - Args: - pile (tuple): La pile dont on veut connaître le sommet. - - Returns: - _type_: L'élément au sommet de la pile. - - Raises: - AssertionError: Si la pile est vide. - """ - assert not est_pile_vide(pile), "Pile vide!" - return pile[-1] - -def empiler(pile, elt): - """Ajoute un élément au sommet de la pile. - - Args: - pile (tuple): La pile actuelle. - elt (_type_): L'élément à ajouter au sommet de la pile. - - Returns: - tuple: La nouvelle pile avec l'élément ajouté. - """ - return pile + (elt,) - -def depiler(pile): - """Retire l'élément au sommet de la pile. - - Args: - pile (tuple): La pile dont on veut retirer le sommet. - - Returns: - tuple: La nouvelle pile sans l'élément au sommet. - - Raises: - AssertionError: Si la pile est vide. - """ - assert not est_pile_vide(pile), "Pile vide!" - return pile[:-1] diff --git a/tp6_enirely/tp6/README.md b/tp6_enirely/tp6/README.md deleted file mode 100644 index 2192cf2..0000000 --- a/tp6_enirely/tp6/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# Devoir Maison : Gestion de Piles et Notation Polonaise Inverse - -Ce devoir présente des fonctions pour manipuler des piles et évaluer des expressions en notation polonaise inverse (NPI). - -## Prérequis - -Pour exécuter ce devoir, vous aurez besoin de : - -- [Python 3.x](https://www.python.org/downloads/) installé sur votre machine. - -### Installation de Python - -1. **Téléchargez Python** : Allez sur le [site officiel de Python](https://www.python.org/downloads/) et téléchargez la dernière version stable pour votre système d'exploitation. - -2. **Installez Python** : Suivez les instructions d'installation. Assurez-vous de cocher l'option "Add Python to PATH" lors de l'installation sur Windows. - -3. **Vérifiez l'installation** : Ouvrez votre terminal ou votre invite de commande et exécutez la commande suivante : - ```bash - python --version - ``` - Cela devrait afficher la version de Python installée. - -## Utilisation des Modules - -### Modules Fournis - -Le devoir contient les modules suivants : - -- `LSC` : Implémentation d'une liste simplement chaînée. -- `Pile_LSC` : Implémentation d'une pile utilisant une liste simplement chaînée. -- `Tuple` : Implémentation d'une pile utilisant un tuple. -- `Liste` : Implémentation d'une pile utilisant une liste. - -#### Primitives du Module `LSC` - -- `creer_liste_vide()`: Crée une liste vide. -- `est_vide(liste)`: Vérifie si la liste est vide. -- `ajouter_en_tete(liste, element)`: Ajoute un élément au début de la liste. -- `queue(liste)`: Retire le premier élément de la liste. -- `tete(liste)`: Renvoie le premier élément de la liste. - -#### Primitives du Module `Pile_LSC` - -- `creer_pile_vide()`: Crée une pile vide sous forme de liste simplement chaînée. -- `est_pile_vide(pile)`: Vérifie si la pile est vide. -- `sommet(pile)`: Renvoie l'élément au sommet de la pile. -- `empiler(pile, element)`: Ajoute un élément au sommet de la pile. -- `depiler(pile)`: Retire l'élément au sommet de la pile. - -## Fichier `test.py` - -Le fichier `test.py` contient des exemples d'utilisation des fonctionnalités de gestion de piles et d'évaluation en notation polonaise inverse. - -### Fonctions dans `test.py` - -- **Afficher une pile** : Affiche les éléments d'une pile du sommet à la base. -- **Copier une pile** : Crée une copie d'une pile donnée. -- **Hauteur de la pile** : Renvoie la hauteur de la pile. -- **Inverser des éléments** : Inverse les `j` derniers éléments de la pile. -- **Trouver le maximum** : Renvoie la position du maximum parmi les `i` derniers éléments de la pile. -- **Tri des crêpes** : Trie les éléments de la pile en utilisant la méthode des crêpes. -- **Évaluation NPI** : Évalue une expression arithmétique en notation polonaise inverse. - -### Exécution de `test.py` - -Pour exécuter le script, ouvrez votre terminal, naviguez vers le dossier contenant le fichier `test.py`, puis exécutez la commande suivante : - -```bash -python test.py diff --git a/tp6_enirely/tp6/TP_Piles.pdf b/tp6_enirely/tp6/TP_Piles.pdf deleted file mode 100644 index 6a5c849..0000000 Binary files a/tp6_enirely/tp6/TP_Piles.pdf and /dev/null differ diff --git a/tp6_enirely/tp6/npi.py b/tp6_enirely/tp6/npi.py deleted file mode 100644 index 9b4edd0..0000000 --- a/tp6_enirely/tp6/npi.py +++ /dev/null @@ -1,46 +0,0 @@ -def evaluer_npi(expression): - """fais la notation polonaise inversée (NPI) d'une expression arithmétique - Args: - expression (_type_): String contenant l'expression arithmétique - - Returns: - _type_: Integer contenant le resultat. - """ - - pile = [] - - - elements = expression.split() - - for element in elements: - if element.isdigit(): - pile.append(int(element)) - else: - - droite = pile.pop() - gauche = pile.pop() - - if element == '+': - resultat = gauche + droite - elif element == '-': - resultat = gauche - droite - elif element == '*': - resultat = gauche * droite - elif element == '/': - resultat = gauche / droite - else: - raise ValueError(f"Opérateur inconnu: {element}") - - - pile.append(resultat) - - - if len(pile) != 1: - raise ValueError("L'expression est mal formée.") - - return pile.pop() - - -expression = "100 60 / 60 + 90 *" -resultat = evaluer_npi(expression) -print(f"Le résultat de l'expression '{expression}' est: {resultat}") diff --git a/tp6_enirely/tp6/test.py b/tp6_enirely/tp6/test.py deleted file mode 100644 index a2b1b36..0000000 --- a/tp6_enirely/tp6/test.py +++ /dev/null @@ -1,125 +0,0 @@ -import Pile_LSC as lifo -from random import shuffle - -def afficher(pile): - """Affiche les éléments d'une pile du sommet à la base.""" - print("|----") - temp = pile - while not lifo.est_pile_vide(temp): - print(f"| {lifo.sommet(temp)}") - temp = lifo.depiler(temp) - print("|----\n") - -def copier_pile(pile): - """Copie une pile représentée par une liste simplement chaînée.""" - copie = lifo.creer_pile_vide() - pile_temp = lifo.creer_pile_vide() - - while not lifo.est_pile_vide(pile): - sommet = lifo.sommet(pile) - pile_temp = lifo.empiler(pile_temp, sommet) - pile = lifo.depiler(pile) - - while not lifo.est_pile_vide(pile_temp): - sommet = lifo.sommet(pile_temp) - pile = lifo.empiler(pile, sommet) - copie = lifo.empiler(copie, sommet) - pile_temp = lifo.depiler(pile_temp) - - return copie - -def hauteur_pile(pile): - """ - Renvoie hauteur de la pile. - PARAMETRES : pile - pile à analyser. - RETURN : hauteur. - EFFET DE BORD : Aucune. - """ - n = 0 - while not lifo.est_pile_vide(pile): - n += 1 - pile = lifo.depiler(pile) - return n - -def retourner(pile, j): - """ - Inverse j derniers éléments de la pile. - PARAMETRES : pile - pile à modifier, j - nombre d'éléments à inverser. - RETURN : Aucune. - EFFET DE BORD : Modifie la pile. - """ - pile_aux = lifo.creer_pile_vide() - - for _ in range(j): - if lifo.est_pile_vide(pile): - break - pile_aux = lifo.empiler(pile_aux, lifo.sommet(pile)) - pile = lifo.depiler(pile) - - while not lifo.est_pile_vide(pile_aux): - pile = lifo.empiler(pile, lifo.sommet(pile_aux)) - pile_aux = lifo.depiler(pile_aux) - -def max_pile(pile, i): - """ - Renvoie position du maximum parmi i derniers éléments. - PARAMETRES : pile - pile à analyser, i - nombre d'éléments. - RETURN : position du maximum. - EFFET DE BORD : Aucune. - """ - - copy = copier_pile(pile) - max_value = lifo.sommet(copy) - ind = 1 - ind_n = 1 - - for _ in range(i): - if lifo.est_pile_vide(copy): - break - current = lifo.sommet(copy) - if current > max_value: - max_value = current - ind = ind_n - copy = lifo.depiler(copy) - ind_n += 1 - - return ind - - -def tri_crepes_iteratif(pile): #ne fonctionne pas - """ - Tri des crêpes en cours. - PARAMETRES : pile - pile à trier. - RETURN : pile triée. - EFFET DE BORD : Modifie la pile. - """ - - n = hauteur_pile(pile) - for i in range(n): - max_position = max_pile(pile, n - i) - if max_position!= n - i: - retourner(pile, n - max_position) - retourner(pile, i + 1) - - return pile - - -if __name__ == "__main__": - from random import shuffle - - ma_liste = [i for i in range(10)] - shuffle(ma_liste) - - print("Liste de départ :", ma_liste) - - ma_pile = lifo.creer_pile_vide() - for element in ma_liste: - ma_pile = lifo.empiler(ma_pile, element) - - print("\nPile initiale :") - afficher(ma_pile) - print(max_pile(ma_pile,10)) - print("Tri des crêpes en cours...") - ma_pile = tri_crepes_iteratif(ma_pile) - print("Pile après tri :") - afficher(ma_pile) \ No newline at end of file diff --git a/tp6_enirely/tp6_self/LSC.py b/tp6_enirely/tp6_self/LSC.py deleted file mode 100644 index a0cd9c8..0000000 --- a/tp6_enirely/tp6_self/LSC.py +++ /dev/null @@ -1,260 +0,0 @@ -""" -Librairie des Listes Simplement Chaînées. - -Elle met à distribution cette structure de données et son interface. - -@author: L. JOANNIC -""" - - -# ############################################################################ - -class Liste_Simplement_Chainee(object): - """ - Classe des Listes Simplement Chainees. - - Attributs - - _tete : None si vide, Maillon sinon. - - Méthodes - - est_vide - - ajouter_en_tete - - tete - - queue - """ - - def __init__(self): - """ - Construire une instance de Liste Simplement Chainee. - - Returns - ------- - None. - - """ - self._tete = None - return None - - def est_vide(self): - """ - Tester si l'instance est vide. - - Returns - ------- - bool - Vrai ssi la liste est vide. - - """ - return (self._tete is None) - - def ajouter_en_tete(self, element): - """ - Ajouter l'élément en tête de liste. - - Parameters - ---------- - element : type de donnee - Donnnée à ajouter à la liste. - - Returns - ------- - resultat : Liste_Simplement_Chainee - La liste à abonder. - - """ - resultat = Liste_Simplement_Chainee() - resultat._tete = Maillon(element, self) - return resultat - - def tete(self): - """ - Renvoyer la donnée stockée en tête de liste. - - Returns - ------- - type de donnee quelconque - donnee en tete. - - """ - assert not(self.est_vide()), "Liste Vide" - return self._tete.donnee - - def queue(self): - """ - Renvoyer la sous-liste suivant le maillon de tete. - - Returns - ------- - Liste_Simplement_Chainee - Queue de la liste. - - """ - assert not(self.est_vide()), "Liste Vide" - return self._tete.suite - - -# ############################################################################ - -def creer_liste_vide(): - """ - Créer une liste simplement chainee vide. - - Returns - ------- - Liste_Simplement_Chainee - Liste vide. - - Effets de bord - -------------- - Aucun - """ - return Liste_Simplement_Chainee() - - -def est_vide(liste): - """ - Tester si la liste simplement chainee est vide. - - Parameters - ---------- - liste : Liste Simplement Chainee - Liste à tester. - - Returns - ------- - bool - Vrai ssi la liste est vide. - - Effets de bord - -------------- - Aucun - """ - return liste.est_vide() - - -def ajouter_en_tete(liste, element): - """ - Inserer un element en tete de liste simplemeent chainee. - - Parameters - ---------- - liste : LSC - Liste à abonder. - element : type de donnee - Donnee à aouter. - - Returns - ------- - LSC, copie de liste à laquelle element a été ajouté en tete. - - Effets de bord - -------------- - Aucun - """ - return liste.ajouter_en_tete(element) - - -def tete(liste): - """ - Consulter la tete de liste. - - Parameters - ---------- - liste : LSC - Liste à consulter. - - Returns - ------- - type de donnée - valeur de la tete de liste. - - Effets de bord - -------------- - Aucun - """ - return liste.tete() - - -def queue(liste): - """ - Renvoyer la liste sans sa tete. - - Parameters - ---------- - liste : LSC - Liste à étêter. - - Returns - ------- - LSC - Liste sans son maillon de tête. - - Effets de bord - -------------- - Aucun - """ - return liste.queue() - - -def afficher_liste(liste, taille=-1): - """ - Afficher la liste en format de présentation. - - Parameters - ---------- - liste : LSC - Liste à énumérer. - - Returns - ------- - None. - - Effets de bord - -------------- - Affichage à l'écran. - - """ - reste = liste - compteur = 0 - print('+-----\n|') - while not(est_vide(reste)) and (taille == -1 or compteur < taille): - print('+- {}\n|'.format(str(tete(reste)))) - reste = queue(reste) - compteur += 1 - print('+-----') - return None - -# ############################################################################ - -class Maillon(object): - """ - Classe des Maillons d'une Liste Simplement Chainee. - - Attributs - - donnee : donnee stockee dans le maillon - - suite : liste simplemement chainee suivant le maillon - """ - - def __init__(self, donnee=None, suite=Liste_Simplement_Chainee()): - """ - Construire une instance de la classe des Maillons. - - Parameters - ---------- - donnee : type de donnee, optional - Donnee initiale dans le Maillon. The default is None. - suite : LSC, optional - Sous-liste suivant le Maillon courant. - The default is Liste_Simplement_Chainee(). - - Returns - ------- - None. - - """ - self.donnee = donnee - self.suite = suite - return None - - -# ############################################################################ diff --git a/tp6_enirely/tp6_self/Pile_LSC.py b/tp6_enirely/tp6_self/Pile_LSC.py deleted file mode 100644 index 90b814f..0000000 --- a/tp6_enirely/tp6_self/Pile_LSC.py +++ /dev/null @@ -1,55 +0,0 @@ -import LSC as lsc -# Chacune des fonctions renvoie et n'ont pas d'effet de bord -def creer_pile_vide(): - """Creer une pile vide. - - Returns: - lsc.Liste_Simplement_Chainee: La liste vide - """ - return lsc.creer_liste_vide() -def est_pile_vide(pile: lsc.Liste_Simplement_Chainee): - """Retourne True si la pile est vide, False sinon. - - Args: - pile (lsc.Liste_Simplement_Chainee): La pile à tester - - Returns: - bool: True si la pile est vide - """ - return lsc.est_vide(pile) - -def sommet(pile: lsc.Liste_Simplement_Chainee): - """Retourne le sommet de la pile. - - Args: - pile (lsc.Liste_Simplement_Chainee): La pile avec le sommet - - Returns: - any: Le sommet de la pile - """ - assert not est_pile_vide(pile), "La pile est vide" - return lsc.tete(pile) - -def empiler(pile: lsc.Liste_Simplement_Chainee,elt: any): - """Ajoute un element en tete de la pile - - Args: - pile lsc.Liste_Simplement_Chainee: La pile à modifier - elt any: l'element a ajouter - - Returns: - lsc.Liste_Simplement_Chainee : La pile avec l'element ajouté - """ - return lsc.ajouter_en_tete(pile, elt) - -def depiler(pile: lsc.Liste_Simplement_Chainee): - """Retire le sommet de la pile - - Args: - pile (lsc.Liste_Simplement_Chainee): La pile avec le sommet - - Returns: - lsc.Liste_Simplement_Chainee: La pile avec le sommet retiré - """ - assert not est_pile_vide(pile), "La pile est vide" - return lsc.queue(pile) diff --git a/tp6_enirely/tp6_self/Pile_List.py b/tp6_enirely/tp6_self/Pile_List.py deleted file mode 100644 index 1edac49..0000000 --- a/tp6_enirely/tp6_self/Pile_List.py +++ /dev/null @@ -1,54 +0,0 @@ -# Chacune des fonctions renvoie et n'ont pas d'effet de bord - -def creer_pile_vide()->list: - """Créer une pile vide. - - Returns: - list: La pile vide - """ - return [] -def est_pile_vide(pile: list) -> bool: - """Retourne True si la pile est vide, False sinon. - - Args: - pile (list): La pile à tester - - Returns: - bool: True si la pile est vide - """ - return len(pile) == 0 -def sommet(pile: list)->int: - """Retourne le sommet de la pile. - - Args: - pile (list): La pile avec le sommet - - Returns: - any: le sommet de la pile - """ - assert not est_pile_vide(pile), "La pile est vide" - return pile[-1] - -def empiler(pile: list, elt: any)-> list: - """rajoute elt au sommet de la pile - - Args: - pile (list): La pile à modifier - elt (any): l'élement à ajouter - - Returns: - list: la pile modifiée - """ - return pile + [elt] - -def depiler(pile: list)-> any: - """retourne la pile sans le sommet - - Args: - pile (list): la pile avec le sommet - - Returns: - any: la pile sans le sommet - """ - assert not est_pile_vide(pile), "La pile est vide" - return pile[:-1] \ No newline at end of file diff --git a/tp6_enirely/tp6_self/Pile_Tuple.py b/tp6_enirely/tp6_self/Pile_Tuple.py deleted file mode 100644 index 447dd07..0000000 --- a/tp6_enirely/tp6_self/Pile_Tuple.py +++ /dev/null @@ -1,54 +0,0 @@ -# Chacune des fonctions renvoie et n'ont pas d'effet de bord -def creer_pile_vide() -> tuple: - """Créer une pile vide. - - Returns: - Tuple: La pile vide - """ - return () - -def est_pile_vide(pile: tuple) -> bool: - """Retourne True si la pile est vide, False sinon. - - Args: - pile (tuple): La pile à tester - - Returns: - bool: True si la pile est vide - """ - return len(pile) == 0 - -def sommet(pile: tuple) -> any: - """Renvoie le sommet de la pile. - - Args: - pile (tuple): La pile contenant le sommet - - Returns: - any: Le sommet de la pile - """ - return pile[-1] - -def empiler(pile: tuple, elt: any)-> tuple: - """ajoute elt au sommet de la pile - - Args: - pile (tuple): la pile a modifier - elt (any): l'élement à ajouter - - Returns: - tuple: la pile avec l'élement ajouté - """ - return pile + (elt,) - -def depiler(pile: tuple) -> tuple: - """Retire le sommet de la pile - - Args: - pile (tuple): La pile avec le sommet - - Returns: - tuple: La pile avec le sommet retiré - """ - assert not est_pile_vide(pile), "La pile est vide" - return pile[:-1] \ No newline at end of file diff --git a/tp6_enirely/tp6_self/README.md b/tp6_enirely/tp6_self/README.md deleted file mode 100644 index 86868a7..0000000 --- a/tp6_enirely/tp6_self/README.md +++ /dev/null @@ -1,133 +0,0 @@ - -# **README - DM Piles et NPI** - -## **Comment exécuter le programme :** -1. Verfier que tous les fichiers sont dans le même répertoire : - - `test.py` - - `Pile_Tuple.py` - - `Pile_LSC.py` - - `Pile_Liste.py` - - `npi.py` -2. Ouvrez un terminal dans ce répertoire. -3. Exécutez le programme avec la commande suivante : - ```bash - python3 test.py - ``` - ou executer pour la notation polonaise inverse: - ```bash - python3 npi.py - ``` ---- - -## **Fonctions disponibles et leur utilisation :** - -### 1. **`creer_pile_vide()`** -- **Description** : Crée et renvoie une pile vide. -- **Utilisation** : - ```python - pile = creer_pile_vide() - ``` - ---- - -### 2. **`est_pile_vide(pile)`** -- **Description** : Vérifie si une pile est vide. -- **Paramètre** : - - `pile` : La pile à vérifier. -- **Retour** : Renvoie `True` si la pile est vide, sinon `False`. -- **Utilisation** : - ```python - if est_pile_vide(pile): - print("La pile est vide.") - ``` - ---- - -### 3. **`sommet(pile)`** -- **Description** : Retourne l’élément au sommet de la pile sans le retirer. -- **Paramètre** : - - `pile` : La pile à consulter. -- **Retour** : L’élément au sommet de la pile. -- **Utilisation** : - ```python - print(sommet(pile)) - ``` - ---- - -### 4. **`empiler(pile, elt)`** -- **Description** : Ajoute un élément au sommet de la pile. -- **Paramètres** : - - `pile` : La pile à modifier. - - `elt` : L’élément à empiler. -- **Retour** : La nouvelle pile avec l’élément ajouté. -- **Utilisation** : - ```python - pile = empiler(pile, 5) - ``` - ---- - -### 5. **`depiler(pile)`** -- **Description** : Retire l’élément au sommet de la pile. -- **Paramètre** : - - `pile` : La pile à modifier. -- **Retour** : La pile sans l’élément au sommet. -- **Utilisation** : - ```python - pile = depiler(pile) - ``` - ---- - -### 6. **`hauteur_pile(pile)`** -- **Description** : Renvoie le nombre d'éléments présents dans la pile sans la modifier. -- **Paramètre** : - - `pile` : La pile à analyser. -- **Retour** : La hauteur de la pile (nombre d'éléments). -- **Utilisation** : - ```python - print(hauteur_pile(pile)) - ``` - ---- - -### 7. **`max_pile(pile, i)`** -- **Description** : Trouve le maximum parmi les `i` premiers éléments de la pile. -- **Paramètres** : - - `pile` : La pile à analyser. - - `i` : Le nombre d'éléments à prendre en compte depuis le sommet. -- **Retour** : Le maximum trouvé parmi les `i` éléments. -- **Utilisation** : - ```python - print(max_pile(pile, 3)) - ``` - ---- - -### 8. **`retourner(pile, j)`** -- **Description** : Inverse l’ordre des `j` premiers éléments de la pile. -- **Paramètres** : - - `pile` : La pile à modifier. - - `j` : Le nombre d'éléments à inverser. -- **Retour** : La pile modifiée. -- **Utilisation** : - ```python - pile = retourner(pile, 2) - ``` - ---- - -### 9. **`tri_crepes_recursif(pile)`** -- **Description** : Trie une pile en suivant le tri des crêpes. -- **Paramètre** : - - `pile` : La pile à trier. -- **Retour** : La pile triée. -- **Utilisation** : - ```python - pile = tri_crepes_recursif(pile) - ``` -