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’
assertion 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 t4.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
idonnées par l’instructionfor i in range(1, n)? - Dans un tableau, donner les états successifs du tableau aux points
ICIetLApour 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.