Exercices
Chapitre 0: Rappels
1 Prévoir les sorties de boucles
Écrire les sorties des algorithmes suivants.
2 Dessiner des motifs avec des boucles
Écrivez un programme Python pour construire le motif suivant, en utilisant une boucle.
* * * * * * * * * * * * * * * * * * * * * * * * *
Écrivez un programme Python qui accepte un mot de l’utilisateur et l’inverse.
Écrivez un programme Python qui prend deux chiffres
m
(nb de lignes) etn
(nb de colonnes) en entrée et génère un tableau à deux dimensions.La valeur de l’élément dans la i-ème ligne et la j-ème colonne du tableau doit être
i*j
.Exemple : Lignes = 3, Colonnes = 4 Résultat attendu : [[0, 0, 0, 0], [0, 1, 2, 3], [0, 2, 4, 6]]
Écrivez un programme Python pour afficher le motif alphabétique « E ».
Sortie attendue:
***** * * **** * * *****
Écrivez un programme Python pour afficher le motif alphabétique « Z ».
Sortie attendue:
******* * * * * * *******
Écrivez un programme Python pour construire le modèle suivant, en utilisant une boucle.
Sortie attendue:
1 22 333 4444 55555 666666 7777777 88888888 999999999
Écrivez un programme Python pour construire le modèle suivant, en utilisant une boucle.
Sortie attendue:
999999999 88888888 7777777 666666 55555 4444 333 22 1
Écrivez un programme Python pour construire le modèle suivant, en utilisant une boucle.
Sortie attendue:
111111111 22222222 3333333 444444 55555 6666 777 88 9
Écrivez un programme Python pour construire le modèle suivant, en utilisant une boucle.
Sortie attendue:
1 1 22 22 333 333 4444 4444 55555 55555 666666 666666 7777777 7777777 88888888 88888888 999999999999999999
3 Vérifier qu’une liste est triée
Écrire le code d’une fonction appelée is_sorted
qui prend en paramètres une liste et qui renvoie True
si la liste est triée et False
sinon.
- Écrire en python le code de la fonction en la prototypant.
- Proposer quelques tests d’
assert
ion en pensant aux cas limites : liste vide, liste triée, éléments égaux… - Évaluer la complexité de l’algorithme dans le pire des cas.
4 Étude du tri par insertion
On donne ci-dessous le code Python du tri par insertion :
def tri_insertion(t):
n = len(t)
for i in range(1, n):
# ICI
x = t[i]
j = i
while j > 0 and t[j-1] > x:
t[j] = t[j-1]
j = j - 1
t[j] = x
# LA
return t
4.1 Compréhension de l’algorithme
- Écrire le prototype de cette fonction.
On va étudier l’appel de la fonction avec comme argument [11, 25, 12, 22, 64]
.
- Écrire l’instruction permettant d’exécuter l’appel de la fonction avec la liste précédente.
- Que représente
n
? Quelle est sa valeur? - Quelles seront les valeurs prises par
i
données par l’instructionfor i in range(1, n)
? - Dans un tableau, donner les états successifs du tableau aux points
ICI
etLA
pour tous les tours de la boucle externe(for
). - Expliquer le rôle de la boucle interne(
while
).
4.2 Étude de la complexité
- Rappeler la définition de la complexité.
- Montrer que pour tout entier , la somme des entiers de 1 à vaut : (voir cette animation si nécessaire.)
- Calculer la complexité du tri par insertion proposé.
- En déduire qu’il s’agit d’un algorithme de complexité quadratique: .
4.3 Correction de l’algorithme
Etablir la correction de l’algorithme. On rappelle que pour prouver la correction nous devons montrer les trois points suivants:
- Initialisation: L’invariant est vrai avant la première itération.
- Conservation: si l’invariant est vrai avant une itération, il restera vrai après l’itération.
- Terminaison: la boucle se termine et nous donne le résultat attendu.