Algorithmique et Python Seconde : 6 exercices corrigés

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

Facile

Le code contient return 3*x^2 - 2*x + 1 pour calculer 3x22x+13x^2-2x+1.

  1. Repérer l'erreur.
  2. Écrire la ligne correcte.
  3. Calculer pour x=2x=2.
Indication
La puissance s'écrit avec deux étoiles.
Voir le corrigé
  1. En Python, ^ effectue un ou exclusif bit à bit ; ce n'est pas l'opérateur de puissance.
  2. La ligne correcte est return 3*x**2 - 2*x + 1.
  3. Pour x = 2, le résultat vaut 3×44+1=93\times4-4+1=9.

Exercice 2 : Boucle et somme

Moyen

Écrire un programme qui calcule 1+2++n1+2+\cdots+n.

  1. Initialiser les variables.
  2. Écrire la boucle.
  3. Tester n=5n=5.
  4. Comparer à n(n+1)/2n(n+1)/2.
Indication
Un accumulateur commence à zéro.
Voir le corrigé
  1. On initialise l'accumulateur avec s = 0 et on suppose que n est un entier positif ou nul.
  2. On peut écrire for k in range(1, n + 1): s += k.
  3. Pour n = 5, la boucle produit successivement 1, 3, 6, 10 puis 15.
  4. La formule donne 5(5+1)/2=155(5+1)/2=15, identique au résultat de la boucle.

Choisir une méthode : Chercher un premier seuil

Exercice 3 : Chercher un premier seuil

Difficile

On part de u=120u=120 et on remplace u par 1,08u+51{,}08u+5. On cherche le premier rang où u dépasse 250.

  1. Écrire une boucle while.
  2. Gérer le compteur.
  3. Donner les valeurs jusqu'au dépassement.
  4. Expliquer le risque d'une condition inatteignable.
Indication
Mettre à jour u et le rang dans la boucle.
Voir le corrigé
  1. Une écriture possible est while u <= 250: u = 1.08*u + 5.
  2. On initialise n = 0 et on ajoute n += 1 après chaque mise à jour de u.
  3. 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.
  4. 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

Moyen

On veut trouver le plus petit entier nn tel que 1,08n>21{,}08^n\gt 2, ce qui modélise un doublement à taux constant de 8 %.

  1. Initialiser les deux variables nécessaires.
  2. Écrire la mise à jour effectuée dans la boucle.
  3. Justifier qu'à la sortie n est bien le premier rang recherché.
  4. Indiquer un test simple de l'ordre des mises à jour.
Indication
Identifier les entrées, la sortie attendue et le rôle de chaque variable.
Voir le corrigé
  1. Initialiser n = 0 et valeur = 1.
  2. Tant que valeur est inférieure ou égale à 2, multiplier valeur par 1,08 et augmenter n de 1.
  3. À la sortie, valeur > 2 et toutes les puissances précédentes sont inférieures ou égales à 2. La variable n contient donc le premier rang recherché.
  4. 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

Difficile

Une boucle initialise n = 0 et valeur = 1, puis multiplie valeur par 1,08 et augmente n tant que valeur <= 2.

  1. Donner une relation invariante entre valeur et nn.
  2. Justifier que la boucle finit par s'arrêter.
  3. Expliquer pourquoi la valeur finale de n est le premier rang recherché.
Indication
Examiner ce qui est vrai avant le premier tour, puis après chaque mise à jour.
Voir le corrigé
  1. Avant et après chaque tour, valeur vaut 1,08n1{,}08^n. L'initialisation vérifie cette relation et les deux mises à jour la conservent.
  2. La suite 1,08n1{,}08^n croît et finit par dépasser 2. La condition devient donc fausse après un nombre fini d'itérations.
  3. La boucle continue tant que 1,08n21{,}08^n\leq2 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

Moyen

On veut calculer la somme des entiers de 1 à n. Le programme utilise for k in range(1, n): s = s + k.

  1. Expliquer l'erreur pour n=4n=4.
  2. Corriger la boucle.
  3. Donner la valeur finale pour n=4n=4.
Indication
La borne supérieure de range n'est pas incluse.
Voir le corrigé
  1. Pour n=4n=4, la boucle additionne seulement 1, 2 et 3 : le terme 4 manque.
  2. Il faut écrire for k in range(1, n + 1):.
  3. La somme correcte vaut 1+2+3+4=101+2+3+4=10.