Algorithmes sur les tableaux
Chaque exercice est fourni avec un fichier Python à compléter et un énoncé « papier » distribué à l'élève et reproduit ci-dessous.
Remarques importantes
-
Les exercices de cette page ne sont pas classés par ordre de « difficulté », cette notion de difficulté étant subjective et dépendante de chaque élève.
-
Les solutions proposées ne sont que des propositions !
Il existe d'autres codes valables pour répondre à chaque problème que ceux proposés ici : il ne faut pas hésiter à les soumettre à votre enseignant pour qu'il vous donne son avis sur les idées mises en oeuvre.
Permuter à gauche☘
Écrire le code d’une fonction permuter_a_gauche()
qui prend en paramètre un tableau non vide tab
. Cette fonction est à effet de bord, c'est-à-dire qu'elle ne renvoie rien mais modifie le tableau passé en paramètre en remplaçant le premier élément par le deuxième, le deuxième par le troisième, …, l'avant-dernier par le dernier et le dernier par le premier.
Exemples
>>> T = [0, 1, 0, 0, 1]
>>> permuter_a_gauche(T)
>>> T
[1, 0, 0, 1, 0]
>>> permuter_a_gauche(T)
>>> T
[0, 0, 1, 0, 1]
>>> T = []
>>> permuter_a_gauche(T)
AssertionError: Le tableau passé en argument ne doit pas être vide !
-
Compléter la définition de la fonction
permuter_a_gauche()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def permuter_a_gauche(tab): """ tab - Sortie: (fonction à effet de bord) >>> T = [0, 1, 0, 0, 1] >>> permuter_a_gauche(T) >>> T [1, 0, 0, 1, 0] >>> permuter_a_gauche(T) >>> T [0, 0, 1, 0, 1] """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
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 |
|
Permuter à droite☘
Écrire le code d’une fonction permuter_a_droite()
qui prend en paramètre un tableau non vide tab
. Cette fonction est à effet de bord, c'est-à-dire qu'elle ne renvoie rien mais modifie le tableau passé en paramètre en remplaçant le deuxième élément par le premier, le troisième par le deuxième, …, le dernier par l'avant-dernier et le premier par le dernier.
Exemples
>>> T = [0, 1, 0, 0, 1]
>>> permuter_a_droite(T)
>>> T
[1, 0, 1, 0, 0]
>>> permuter_a_droite(T)
>>> T
[0, 1, 0, 1, 0]
>>> T = []
>>> permuter_a_droite(T)
AssertionError: Le tableau passé en argument ne doit pas être vide !
-
Compléter la définition de la fonction
permuter_a_droite()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def permuter_a_droite(tab): """ tab - Sortie: (fonction à effet de bord) >>> T = [0, 1, 0, 0, 1] >>> permuter_a_droite(T) >>> T [1, 0, 1, 0, 0] >>> permuter_a_droite(T) >>> T [0, 1, 0, 1, 0] """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
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 |
|
Permuter à gauche jusqu'à☘
Écrire le code d’une fonction permuter_a_gauche_jusqu_a()
qui prend en paramètres un tableau non vide tab
et un entier k
qui représente un indice d'un des éléments du tableau. Cette fonction est à effet de bord, c'est-à-dire qu'elle ne renvoie rien mais modifie le tableau passé en paramètre en remplaçant le premier élément par le deuxième, le deuxième par le troisième, …, le (k-1
)-ième par le k
-ième et le k
-ième par le premier.
Exemples
>>> T = [3, 1, 7, 4]
>>> permuter_a_gauche_jusqu_a(T, 2)
>>> T
[1, 7, 3, 4]
>>> permuter_a_gauche_jusqu_a(T, 2)
>>> T
[7, 3, 1, 4]
>>> permuter_a_gauche_jusqu_a(T, 5)
AssertionError: tab index out of range
-
Compléter la définition de la fonction
permuter_a_gauche_jusqu_a()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def permuter_a_gauche_jusqu_a(tab, k): """ tab – k – Sortie: (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> permuter_a_gauche_jusqu_a(tab, 2) >>> tab [1, 7, 3, 4] """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
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 |
|
Un tableau est-il trié à partir ?☘
Écrire le code d’une fonction est_trie_a_partir()
qui prend en paramètres un tableau d'entiers non vide tab
et un entier k
qui représente un indice d'un des éléments du tableau. Cette fonction renvoie True
lorsque tous les éléments du tableau tab
, à partir de l'indice k
(inclus), sont triés par ordre croissant et renvoie False
dans le cas contraire.
Exemples
>>> est_trie_a_partir([2, 5, 6, 3, 4], 2)
False
>>> est_trie_a_partir([2, 5, 6, 3, 4], 3)
True
>>> est_trie_a_partir([2, 3, 4, 5, 6], 4)
True
>>> est_trie_a_partir([3, 1, 7, 4], 5)
AssertionError: tab index out of range
-
Compléter la définition de la fonction
est_trie_a_partir()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
def est_trie_a_partir(tab, k): """ tab – k – Sortie: >>> est_trie_a_partir([2, 5, 6, 3, 4], 2) False >>> est_trie_a_partir([2, 5, 6, 3, 4], 3) True >>> est_trie_a_partir([2, 3, 4, 5, 6], 4) True """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
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 |
|
Permuter à droite à partir☘
Écrire le code d’une fonction permuter_a_droite_a_partir()
qui prend en paramètres un tableau non vide tab
et un entier k
qui représente un indice d'un des éléments du tableau. Cette fonction est à effet de bord, c'est-à-dire qu'elle ne renvoie rien mais modifie le tableau passé en paramètre en remplaçant le (k+1
)-ième par le k
-ième, , le (k+2
)-ième par le (k+1
)-ième, …, le dernier par l'avant-dernier et le k
-ième élément par le dernier.
Exemples
>>> T = [3, 1, 7, 4, 11]
>>> permuter_a_droite_a_partir(T, 2)
>>> T
[3, 1, 11, 7, 4]
>>> permuter_a_droite_a_partir(T, 2)
>>> T
[3, 1, 4, 11, 7]
>>> permuter_a_droite_a_partir(T, 6)
AssertionError: tab index out of range
-
Compléter la définition de la fonction
permuter_a_droite_a_partir()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def permuter_a_droite_a_partir(tab, k): """ tab – k – Sortie: (fonction à effet de bord) >>> tab = [3, 1, 7, 4] >>> permuter_a_droite_a_partir(tab, 1) >>> tab [3, 4, 1, 7] """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
Il faut penser à parcourir les éléments du tableau « à l'envers ».
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 |
|
Renverser jusqu'à☘
Dans cet exercice, il faut programmer un algorithme de renversement des éléments d'un tableau, jusqu'à une certaine position i
connue à l'avance.
Exemple
On considère le tableau ci-dessous :
5 | 7 | 1 | 4 | 9 | 8 | 3 | 4 | 0 | 6 |
Lorsqu'on décide de renverser les éléments jusqu'à l'indice 7
(inclus), le tableau devient :
4 | 3 | 8 | 9 | 4 | 1 | 7 | 5 | 0 | 6 |
Écrire le code d’une fonction renverser_jusqu_a()
qui prend en paramètres un tableau non vide tab
et un indice i
d'un élément de ce tableau.
Cette fonction est à effet de bord, c'est-à-dire qu'elle ne renvoie rien mais modifie le tableau
passé en paramètre en renversant les éléments de la « plage d'indices » [0..i]
.
Exemples
>>> T = [3, 1, 7, 4, 11]
>>> renverser_jusqu_a(T, 2)
>>> T
[7, 1, 3, 4, 11]
>>> renverser_jusqu_a(T, 3)
>>> T
[4, 3, 1, 7, 11]
>>> renverser_jusqu_a(T, 5)
AssertionError: tab index out of range
-
Compléter la définition de la fonction
renverser_jusqu_a()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
def renverser_jusqu_a(tab, i): """ tab – i – Sortie: (fonction à effet de bord) >>> T = [3, 1, 7, 4, 11] >>> renverser_jusqu_a(T, 2) >>> T [7, 1, 3, 4, 11] >>> renverser_jusqu_a(T, 3) >>> T [4, 3, 1, 7, 11] """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
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 |
|