1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
| """Implémentation de type abstrait PILE MUABLE en utilisant un dictionnaire et un tableau statique"""
# Phase d'importation
# Phase de déclaration des CONSTANTES et variables globales
TAILLE = 10
# Phase de déclaration des classes et fonctions
def nouvelle_pile() -> 'Pile':
"""Renvoie la référence d'une nouvelle Pile de TAILLE limitée"""
p = {}
p['nb'] = 0 # contient le nombre de données stockées
p['max'] = TAILLE
p['data'] = [None for x in range(TAILLE)] # Aucune donnée au début
return p
def est_pile_vide(p:'Pile') -> bool:
"""Prédicat qui renvoie True si la Pile est bien vide"""
return p['nb'] == 0
def est_pile_pleine(p:'Pile') -> bool:
"""Prédicat qui renvoie True si la Pile est pleine"""
pass
def empiler(elt:'Elt', p:'Pile NON PLEINE') -> None:
"""Empile l'élément dans une pile NON PLEINE"""
pass
def depiler(p:'Pile NON VIDE') -> 'Elt':
"""Dépile et renvoie le sommet d'une pile NON VIDE"""
pass
def lire_sommet(p:'Pile NON VIDE') -> 'Elt':
"""Renvoie la donnée stockée au sommet de la pile NON VIDE p"""
pass
def taille(p:'Pile') -> int:
pass
def tester():
"""Fonction ne servant qu'à valider en partie vos fonctions d'interface"""
print("DEBUT DU JEU DE TEST...")
a = nouvelle_pile()
assert a == {'nb': 0, 'max': 10, 'data': [None, None, None, None, None, None, None, None, None, None]}
print("... Création : ok")
empiler(5, a)
assert a == {'nb': 1, 'max': 10, 'data': [5, None, None, None, None, None, None, None, None, None]}
empiler(10, a)
assert a == {'nb': 2, 'max': 10, 'data': [5, 10, None, None, None, None, None, None, None, None]}
empiler(20, a)
assert a == {'nb': 3, 'max': 10, 'data': [5, 10, 20, None, None, None, None, None, None, None]}
print("... Empilement : ok")
assert est_pile_vide(a) == False
assert est_pile_pleine(a) == False
assert taille(a) == 3
assert depiler(a) == 20
assert a == {'nb': 2, 'max': 10, 'data': [5, 10, None, None, None, None, None, None, None, None]}
empiler(40, a)
assert a == {'nb': 3, 'max': 10, 'data': [5, 10, 40, None, None, None, None, None, None, None]}
assert depiler(a) == 40
assert depiler(a) == 10
assert depiler(a) == 5
assert a == {'nb': 0, 'max': 10, 'data': [None, None, None, None, None, None, None, None, None, None]}
print("... Dépilement : ok")
print("FIN DU JEU DE TESTS.")
# --- Programme principal ---
if __name__ == '__main__':
import doctest
DEBUG = False # Passer la constante à True pour activer le jeu de tests via assertions
if DEBUG:
tester()
doctest.testmod() # Pour utiliser la documentation comme jeu de tests
|