Terminale Spé Maths / Chapitre 1 : Suites
Fiche 6 : algorithmique et Python
Sept exercices sur les questions de programmation que l'on retrouve régulièrement dans les exercices de suites du bac : calculer un terme, trouver un seuil, calculer une somme, compléter ou interpréter un script.
Bonne nouvelle : ces questions sont presque toujours des points « cadeaux » si tu connais les trois modèles ci-dessous.
Toutes les corrections sont rédigées comme on l'attend au bac : exécution pas à pas, justification de la valeur renvoyée, justification de la terminaison quand elle est demandée.
💡 Les trois modèles à connaître
1. Calculer le terme (boucle for) : on part de , on applique la relation de récurrence fois.
def terme(n):
u = 2
for i in range(n):
u = 3*u - 1
return u
2. Trouver un seuil (boucle while) : on avance tant que la condition n'est pas atteinte, et on compte les étapes.
def seuil():
n = 0
u = 1000
while u < 2000:
u = 1.05*u
n = n + 1
return n
3. Calculer une somme : on ajoute chaque terme à une variable qui sert de compteur.
def somme(n):
u = 1
s = 1
for i in range(n):
u = u/2
s = s + u
return s
⚠️ Les pièges classiques
- Le seuil renvoie , pas . Relis la question : « le plus petit entier » veut dire qu'on renvoie le compteur.
- L'ordre des instructions dans la boucle : mettre à jour
uavant ou aprèsn = n + 1ne change pas le résultat ici, mais siuetnse servent l'un de l'autre, ça change tout. - La condition du
whileest l'inverse de ce qu'on cherche : on cherche , donc on boucle tant queu < A. - Confondre
<et<=(ou>et>=) : lis l'énoncé au symbole près. range(n)répète fois, aveciqui va de à .
Astuce : exécute le script à la main sur les deux ou trois premières étapes, avec un tableau de valeurs. C'est la méthode qui évite 95 % des erreurs. 😄 Un script qui « a l'air juste » n'est pas un script vérifié.
Exercice 1 (★) : que renvoie ce script ?
On considère la suite définie par et . Que renvoie l'appel
terme(3)du modèle 1 ci-dessus ?
✏️ Correction de l'exercice 1
Exécution à la main
On exécute le script à la main avec n = 3. La boucle for i in range(3) s'exécute fois ().
• Avant la boucle : u = 2.
• : .
• : .
• : .
✅ La fonction renvoie , c'est-à-dire .
À chaque passage, la variable u contient le terme suivant de la suite, donc après passages elle contient .
Exercice 2 (★) : écrire une fonction
On définit et . Écrire une fonction Python
terme(n)qui renvoie , puis calculerterme(3)à la main.
✏️ Correction de l'exercice 2
Le script
def terme(n):
u = 3
for i in range(n):
u = 0.5*u + 2
return u
La variable u est initialisée à , puis la relation est appliquée fois : la fonction renvoie bien .
Exécution pour
✅ terme(3) renvoie .
Exercice 3 (★★) : un seuil à la baisse
Une machine vaut 5 000 € à l'achat et perd 10 % de sa valeur chaque année. On note sa valeur au bout de années.
1. Exprimer en fonction de .
2. Écrire une fonction Python qui renvoie le plus petit entier tel que .
3. Quelle valeur renvoie-t-elle ?
✏️ Correction de l'exercice 3
Question 1
Perdre de sa valeur revient à multiplier par . La suite est donc géométrique de raison et de premier terme .
✅ Donc, pour tout , .
Question 2
On boucle tant que la valeur est encore supérieure ou égale à , et on compte les années :
def seuil():
n = 0
u = 5000
while u >= 2000:
u = 0.9*u
n = n + 1
return n
Terminaison : comme , tend vers . Il existe donc un rang à partir duquel : la condition u >= 2000 finit par être fausse et la boucle s'arrête.
Question 3
On cherche le plus petit entier tel que , soit . La suite est strictement décroissante, et :
✅ La fonction renvoie .
Piège évité : la suite décroît, donc la condition du while est u >= 2000 (on continue tant qu'on n'est pas passé sous le seuil).
Exercice 4 (★★) : une somme et son seuil
Pour , on pose .
1. Écrire une fonction Python
somme(n)qui renvoie . Que renvoiesomme(3)?2. On rappelle que . Écrire une fonction qui renvoie le plus petit entier tel que . Quelle valeur renvoie-t-elle ?
✏️ Correction de l'exercice 4
Question 1
def somme(n):
u = 1
s = 1
for i in range(n):
u = u/2
s = s + u
return s
La variable u contient successivement , , …, et s cumule les termes : après passages, .
Exécution pour : s = 1, puis u = 0.5 et s = 1.5, puis u = 0.25 et s = 1.75, puis u = 0.125 et s = 1.875.
✅ somme(3) renvoie .
Question 2
Comme , on a . On cherche le plus petit entier tel que . Voici une fonction possible :
def seuil():
n = 0
while 1/2**n >= 0.01:
n = n + 1
return n
Terminaison : comme , , donc finit par être inférieur à et la boucle s'arrête.
Valeur renvoyée : . Comme et , et que est croissante, le plus petit entier convenable est .
✅ La fonction renvoie .
Exercice 5 (★★★) : compléter un script (type bac)
Dans l'exercice du parc animalier (fiche 4, exercice 4), on a et .
On souhaite savoir à partir de quelle année () le parc compte moins de 650 animaux.
Recopier et compléter le script :
def annee(): n = ...... u = ...... while ......: u = ...... n = ...... return n
✏️ Correction de l'exercice 5
Le script complété
def annee():
n = 0
u = 800
while u >= 650:
u = 0.9*u + 60
n = n + 1
return n
Justification des compléments : on part de n = 0 et u = u_0 = 800.
On continue tant que u >= 650, car on cherche le premier moment où u passe sous .
À chaque passage, u devient 0.9*u + 60, c'est-à-dire le terme suivant, et n compte le rang.
Terminaison : tend vers , donc finit par être strictement inférieur à .
Valeur renvoyée : donne :
✅ La fonction renvoie , ce qui correspond à l'année .
Exercice 6 (★★★) : conjecturer une limite
Reprenons et (fiche 5, exercice 5).
1. Écrire un script Python qui affiche les termes à .
2. Donner les valeurs approchées obtenues et conjecturer la limite.
✏️ Correction de l'exercice 6
Question 1
u = 0
for n in range(1, 11):
u = 1/(1 + u)
print(n, u)
Au -ième passage, u devient , que l'on affiche avec son rang n.
Question 2
Valeurs approchées :
, , , ,
, , , ,
Les termes alternent au-dessus et en dessous d'une valeur voisine de en s'en rapprochant.
✅ On conjecture que converge vers .
Cette conjecture n'est pas une preuve : elle est cohérente avec la limite calculée dans la fiche 5 (à condition d'admettre la convergence).
Remarque : les termes alternent, ce qui confirme que la suite n'est pas monotone, comme on l'avait vu en fiche 5.
Exercice 7 (★★★) : pourquoi l'algorithme s'arrête-t-il ?
On définit et . Pour un réel , on considère la fonction :
def seuil(A): n = 0 u = 1 while u <= A: u = 2*u + 1 n = n + 1 return n1. Que renvoie
seuil(1000)? (On admet que .)2. Pourquoi peut-on affirmer que cet algorithme s'arrête pour tout réel ?
✏️ Correction de l'exercice 7
Question 1
La fonction seuil(1000) renvoie le plus petit entier tel que , c'est-à-dire , soit .
Comme et , et que est croissante en , le plus petit entier convenable vérifie , donc .
Vérification : et .
✅ La fonction renvoie .
Question 2
On a . Comme , , donc, par produit et par somme, .
Par définition de la limite, pour tout réel , il existe un rang tel que dès que . Donc la condition u <= A devient fausse après un nombre fini de passages :
✅ la boucle se termine, quel que soit .
À retenir : « pourquoi l'algorithme se termine » se justifie toujours par une limite infinie (ou par une limite qui franchit le seuil). C'est un point que les correcteurs adorent.
🎯 Ce qui peut tomber au bac
- Un script à exécuter à la main ou dont on donne la valeur renvoyée (exercices 1, 2, 5).
- Un seuil à programmer avec une boucle
while(exercices 3, 4, 7). - Une justification de la terminaison par une limite (exercices 3, 4, 5 et 7).
- Un script qui affiche des termes pour conjecturer une limite (exercice 6).
QCM : vérifie tes acquis
10 questions, une seule bonne réponse chacune. Choisis une réponse : la correction s'affiche tout de suite. Ton score est enregistré dans Mon espace.
Question 1 sur 10
Dans `while u < 100:`, la boucle s'arrête quand :
La boucle continue tant que la condition est vraie et s'arrête dès que est fausse.
Question 2 sur 10
Avec `u = 1` puis `for k in range(3): u = 2*u + 1`, que vaut `u` à la fin ?
: trois itérations.
Question 3 sur 10
Pour et , quel est le premier rang tel que ?
et .
Question 4 sur 10
`range(1, n+1)` parcourt :
La borne finale est exclue : on obtient .
Question 5 sur 10
Une boucle `while` dont la condition ne devient jamais fausse :
C'est un risque classique : il faut vérifier que la variable évolue dans le bon sens.
Question 6 sur 10
Dans l'exercice 1, avec et , que renvoie `terme(3)` ?
, , .
Question 7 sur 10
Dans l'exercice 2, avec et , que renvoie `terme(3)` ?
, , .
Question 8 sur 10
Dans l'exercice 3 (la machine qui perd de sa valeur par an, ), au bout de combien d'années la valeur passe-t-elle sous € ?
, et alors que .
Question 9 sur 10
Dans l'exercice 4, avec , que renvoie `somme(3)` ?
.
Question 10 sur 10
Dans l'exercice 7, avec , et la fonction `seuil(A)` du script, que renvoie `seuil(1000)` ?
; et : la boucle s'arrête après tours.
Un doute sur ce chapitre ? On en parle ensemble, sans engagement.
Réserver un appel découverte