Le code est lu comme un raisonnement : rôle des variables, bornes d'une boucle et condition d'arrêt. Les erreurs Python sont corrigées par un tableau de trace, puis un invariant justifie que le programme renvoie bien le premier seuil attendu.
Les définitions et méthodes utilisées sont réunies dans le cours de Algorithmique et Python. Les connecteurs et négations utilisés dans les tests sont approfondis par la logique mathématique.
Bases de Algorithmique et Python : Corriger une puissance Python
Exercice 1 : Corriger une puissance Python
Le code contient return 3*x^2 - 2*x + 1 pour calculer .
- Repérer l'erreur.
- Écrire la ligne correcte.
- Calculer pour .
Indication
Voir le corrigé
- En Python,
^effectue un ou exclusif bit à bit ; ce n'est pas l'opérateur de puissance. - La ligne correcte est
return 3*x**2 - 2*x + 1. - Pour
x = 2, le résultat vaut .
Exercice 2 : Boucle et somme
Écrire un programme qui calcule .
- Initialiser les variables.
- Écrire la boucle.
- Tester .
- Comparer à .
Indication
Voir le corrigé
- On initialise l'accumulateur avec
s = 0et on suppose quenest un entier positif ou nul. - On peut écrire
for k in range(1, n + 1): s += k. - Pour
n = 5, la boucle produit successivement 1, 3, 6, 10 puis 15. - La formule donne , identique au résultat de la boucle.
Choisir une méthode : Chercher un premier seuil
Exercice 3 : Chercher un premier seuil
On part de et on remplace u par . On cherche le premier rang où u dépasse 250.
- Écrire une boucle while.
- Gérer le compteur.
- Donner les valeurs jusqu'au dépassement.
- Expliquer le risque d'une condition inatteignable.
Indication
Voir le corrigé
- Une écriture possible est
while u <= 250: u = 1.08*u + 5. - On initialise
n = 0et on ajouten += 1après chaque mise à jour de u. - Arrondies au centième, les valeurs sont 120,00 ; 134,60 ; 150,37 ; 167,40 ; 185,79 ; 205,65 ; 227,10 ; 250,27. Le premier dépassement a lieu au rang 7.
- Si la condition ne peut jamais devenir fausse ou si la variable testée n'est pas mise à jour, la boucle est infinie. Un nombre maximal d'itérations et des tests sur quelques valeurs permettent de détecter ce défaut.
Exercice 4 : Chercher la première puissance qui dépasse un seuil
On veut trouver le plus petit entier tel que , ce qui modélise un doublement à taux constant de 8 %.
- Initialiser les deux variables nécessaires.
- Écrire la mise à jour effectuée dans la boucle.
- Justifier qu'à la sortie n est bien le premier rang recherché.
- Indiquer un test simple de l'ordre des mises à jour.
Indication
Voir le corrigé
- Initialiser
n = 0etvaleur = 1. - Tant que valeur est inférieure ou égale à 2, multiplier valeur par 1,08 et augmenter n de 1.
- À la sortie,
valeur > 2et toutes les puissances précédentes sont inférieures ou égales à 2. La variable n contient donc le premier rang recherché. - Un tableau de trace sur les trois premières itérations vérifie l'ordre des mises à jour.
Approfondir Algorithmique et Python : Corriger une borne de boucle
Exercice 5 : Justifier la terminaison et la correction d’une boucle
Une boucle initialise n = 0 et valeur = 1, puis multiplie valeur par 1,08 et augmente n tant que valeur <= 2.
- Donner une relation invariante entre
valeuret . - Justifier que la boucle finit par s'arrêter.
- Expliquer pourquoi la valeur finale de
nest le premier rang recherché.
Indication
Voir le corrigé
- Avant et après chaque tour,
valeurvaut . L'initialisation vérifie cette relation et les deux mises à jour la conservent. - La suite croît et finit par dépasser 2. La condition devient donc fausse après un nombre fini d'itérations.
- La boucle continue tant que et s'arrête juste après le premier dépassement. Tous les rangs précédents échouent, donc le rang final est minimal.
Exercice 6 : Corriger une borne de boucle
On veut calculer la somme des entiers de 1 à n. Le programme utilise for k in range(1, n): s = s + k.
- Expliquer l'erreur pour .
- Corriger la boucle.
- Donner la valeur finale pour .
Indication
Voir le corrigé
- Pour , la boucle additionne seulement 1, 2 et 3 : le terme 4 manque.
- Il faut écrire
for k in range(1, n + 1):. - La somme correcte vaut .