Mathématiques (spécialité) · TerminaleBac
Algorithmes de seuil et de dichotomie : exercices de Terminale
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- Un algorithme de seuil répète un calcul dans une boucle while jusqu'à ce qu'une condition soit atteinte, et renvoie le rang n correspondant.
- La dichotomie coupe l'intervalle de recherche en deux à chaque étape et garde la moitié qui contient la solution.
- Pour une fonction continue qui change de signe sur [a ; b], on garde la moitié où le signe change ; l'amplitude est divisée par 2 à chaque tour.
- Avant de programmer, fais toujours tourner l'algorithme à la main sur un petit exemple : un tableau de valeurs révèle la plupart des erreurs de condition.
Comment utiliser ces exercices
Ces exercices te font manipuler deux familles d'algorithmes très présentes en Terminale : le seuil (on cherche à partir de quel rang une suite dépasse une valeur) et la dichotomie (on resserre un encadrement en le coupant en deux). Le programme de spécialité rappelle que l'algorithmique concerne toutes les parties du cours et fait intervenir variables, affectation, instruction conditionnelle, boucle, fonction et liste 1. Tu retrouveras tous ces ingrédients ici.
Cherche d'abord seul, sur papier. Si tu bloques, ouvre un indice, puis recommence. Ne lis la correction qu'après avoir écrit une réponse, même fausse : comparer sa propre démarche à celle de la correction fait bien plus progresser que la lecture seule. Les exercices sont rangés par difficulté croissante.
Les exercices
Exercice 1 Premier seuil : une suite qui double
On définit la suite par et pour tout entier .
On considère la fonction Python suivante :
def seuil():
n = 0
u = 1
while u <= 1000:
u = 2 * u
n = n + 1
return n
- Que vaut en fonction de ?
- Quelle valeur renvoie
seuil()?
Indice 1
Reconnais une suite géométrique et écris son terme général.
Indice 2
Cherche la plus petite puissance de 2 strictement supérieure à 1000 ; tu peux t'aider de .
Voir la correction pas à pas
La suite est géométrique de raison 2 et de premier terme 1, donc .
La boucle tourne tant que et s'arrête dès que : la fonction renvoie le plus petit rang tel que .
On calcule : , qui est inférieur à 1000, puis , qui est supérieur à 1000.
La fonction renvoie donc .
La sortie de la boucle correspond au premier rang où , c'est-à-dire le premier rang où la condition du while devient fausse. Comme la suite est croissante, elle reste ensuite au-dessus de 1000.
Exercice 2 Seuil avec une évolution de 5 % par an
Un capital de 1 000 euros est placé à intérêts composés au taux de 5 % par an. On note le capital après années, donc et .
- Écris une boucle
whilequi détermine le nombre d'années nécessaires pour que le capital atteigne au moins 2 000 euros. - Quelle est la valeur trouvée ?
Indice 1
La boucle continue tant que le capital est strictement inférieur à 2 000.
Indice 2
Utilise la forme pour vérifier ton résultat à la calculatrice.
Voir la correction pas à pas
On initialise
n = 0etC = 1000.La condition de continuation est
C < 2000: on veut s'arrêter quandC >= 2000.Dans la boucle, on écrit
C = 1.05 * Cpuisn = n + 1.On vérifie avec la forme explicite : , donc 1 980 euros environ, encore sous 2 000 ; , donc environ 2 079 euros, au-dessus.
Le capital atteint au moins 2 000 euros au bout de années.
Ici l'énoncé dit « au moins », donc la condition d'arrêt est C >= 2000 et la boucle tourne tant que C < 2000. Attention au signe strict ou large : il décide du rang obtenu quand le seuil tombe pile.
Exercice 3 Suivre l'algorithme à la main
Soit définie par et .
n = 0
u = 3
while u <= 100:
u = 2 * u - 1
n = n + 1
Dresse le tableau des valeurs de n et u à chaque tour, puis donne la valeur de n à la fin de l'exécution.
Indice 1
Recopie un tableau à deux colonnes n et u et remplis-le ligne par ligne.
Indice 2
Arrête-toi à la première valeur de u strictement supérieure à 100.
Voir la correction pas à pas
Au départ : , . On a , la boucle commence.
Tour 1 : , .
Tour 2 : , . Tour 3 : , . Tour 4 : , . Tour 5 : , .
Tour 6 : , . Comme , la condition du
whileest fausse et la boucle s'arrête.À la fin, et . On peut le confirmer : , et .
Le tableau de suivi est l'outil le plus fiable pour comprendre un algorithme. Retiens aussi que la valeur de en sortie est la première au-dessus du seuil, pas la dernière en dessous.
Exercice 4 Écrire une fonction de seuil
Soit définie par et .
- Écris en Python une fonction
seuil(S)qui renvoie le plus petit entier tel que . - Montre que est géométrique, puis déduis-en en fonction de .
- Quelle valeur renvoie
seuil(1000)?
Indice 1
Pose et calcule en fonction de .
Indice 2
Après avoir trouvé la forme explicite, résous en testant des puissances de 3.
Voir la correction pas à pas
Fonction : on initialise
n = 0etu = 5, on boucle tant queu <= S, on remplaceupar3 * u + 2, on augmenten, puis on renvoien.def seuil(S): n = 0 u = 5 while u <= S: u = 3 * u + 2 n = n + 1 return nOn pose . Alors . La suite est géométrique de raison 3 et de premier terme .
On en déduit , donc .
On cherche , soit .
Or ne convient pas et convient :
seuil(1000)renvoie . Contrôle : et .
Le programme donne la réponse sans calcul explicite, mais la forme explicite permet de la vérifier et de prévoir le rang sans exécuter la boucle. Les deux démarches se complètent.
Exercice 5 Un seuil vers le bas
Une substance perd 20 % de sa quantité chaque heure. On note la quantité (en grammes) après heures, avec .
- Exprime en fonction de .
- À partir de combien d'heures la quantité devient-elle strictement inférieure à 10 grammes ?
- Que faut-il changer dans la condition du
whilepar rapport à un seuil vers le haut ?
Indice 1
Perdre 20 % revient à multiplier par .
Indice 2
Ici la boucle doit continuer tant que la quantité est supérieure ou égale à 10.
Voir la correction pas à pas
Une baisse de 20 % multiplie par , donc et .
On veut , c'est-à-dire .
On teste : , qui est encore supérieur à ; , qui est inférieur à .
La quantité passe donc sous 10 grammes au bout de heures.
Dans le programme, on écrit
while q >= 10:avecq = 0.8 * q. Le sens de l'inégalité s'inverse par rapport à un seuil vers le haut, parce que la suite est décroissante.
Pour une suite décroissante, on cherche le premier rang sous le seuil. La condition du while est toujours le contraire de l'objectif, quel que soit le sens de variation.
Exercice 6 Trois étapes de dichotomie à la main
Soit sur l'intervalle .
- Justifie que l'équation admet une solution dans .
- Applique trois étapes de dichotomie. Donne l'intervalle obtenu et, en particulier, la valeur de la borne gauche après la troisième étape.
Indice 1
Calcule et et rappelle-toi que est continue et croissante sur .
Indice 2
À chaque étape, calcule le milieu , puis le signe de : , donc si la solution est à droite de .
Voir la correction pas à pas
et . La fonction est continue et strictement croissante sur : elle s'annule une seule fois sur cet intervalle.
Étape 1 : et . Le signe change entre et , donc on garde .
Étape 2 : et . Le signe change entre et , donc on garde .
Étape 3 : et . On garde .
Après trois étapes, la borne gauche vaut et l'amplitude est .
À chaque étape l'amplitude est divisée par 2 : on l'obtient directement par après étapes. La solution cherchée, , est bien dans l'intervalle trouvé.
Exercice 7 Combien d'étapes pour une précision donnée ?
On applique la dichotomie à une fonction continue sur un intervalle initial de longueur 1.
- Quelle est la longueur de l'intervalle après étapes ?
- Combien d'étapes faut-il au minimum pour obtenir un encadrement d'amplitude strictement inférieure à ?
- Écris la boucle correspondante, avec un compteur de tours.
Indice 1
L'amplitude est divisée par 2 à chaque tour.
Indice 2
Cherche le plus petit tel que .
Voir la correction pas à pas
Chaque étape coupe l'intervalle en deux et garde une moitié, donc la longueur après étapes est .
On veut , soit .
On teste : est trop petit, convient.
Il faut donc au minimum étapes. Contrôle : n'est pas assez petit, et l'est.
Boucle :
while b - a >= 0.01:on calculem = (a + b) / 2, on met à jouraoubselon le signe, et on faitk = k + 1à chaque tour.
Le nombre d'étapes dépend de la précision voulue et de la longueur de départ, pas de la fonction étudiée. C'est ce qui rend la dichotomie sûre : on sait à l'avance combien de tours au plus auront lieu.
Exercice 8 Recherche dichotomique dans une liste triée
On considère la liste triée par ordre croissant :
L = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
On cherche la valeur 23 par dichotomie avec les indices a = 0 et b = 9. À chaque tour, on calcule m = (a + b) // 2 puis on compare L[m] à la valeur cherchée : si L[m] est plus petit, a devient m + 1 ; s'il est plus grand, b devient m - 1 ; s'il est égal, on a trouvé.
- Déroule l'algorithme et donne les valeurs successives de
m. - Quel indice est renvoyé ?
Indice 1
La division // donne la partie entière du quotient : 9 // 2 vaut 4.
Indice 2
Si L[m] est plus petit que 23, tout ce qui est à gauche de m est écarté aussi.
Voir la correction pas à pas
Tour 1 :
a = 0,b = 9,m = 9 // 2 = 4. On litL[4] = 16, qui est inférieur à 23 : on posea = 5.Tour 2 :
a = 5,b = 9,m = 14 // 2 = 7. On litL[7] = 56, qui est supérieur à 23 : on poseb = 6.Tour 3 :
a = 5,b = 6,m = 11 // 2 = 5. On litL[5] = 23: la valeur est trouvée.L'algorithme renvoie l'indice 5, après seulement 3 comparaisons.
Dans le pire cas pour dix éléments, la zone de recherche reste coupée en deux à chaque tour, donc le nombre de comparaisons reste très petit devant la taille de la liste. Un balayage séquentiel de la liste aurait demandé 6 lectures pour atteindre la valeur 23.
Cette méthode ne fonctionne que si la liste est triée. Sur une liste désordonnée, éliminer une moitié n'aurait aucun sens, puisqu'on ne saurait pas dans quelle moitié se trouve la valeur.
Exercice 9 Trouver et corriger l'erreur
Un élève veut encadrer la solution de pour sur avec une précision de .
def f(x):
return x**3 + x - 1
def dicho():
a, b = 0, 1
while b - a > 0.001:
m = (a + b) / 2
if f(m) > 0:
a = m
else:
b = m
return a, b
- Calcule et .
- Explique pourquoi ce programme est faux et ce qu'il renvoie.
- Propose une version corrigée.
Indice 1
Détermine le signe de et celui de : la solution est du côté où change de signe.
Indice 2
Si , la solution se trouve entre et , pas entre et .
Voir la correction pas à pas
On calcule et . La fonction est croissante et change de signe sur : il faut garder à chaque tour la moitié aux bornes de laquelle prend des signes contraires.
Si , alors est déjà à droite de la solution, car est croissante et positive à partir de la solution. Il faut garder et poser
b = m. Le programme fait l'inverse et posea = m.Conséquence : le programme garde la moitié qui ne contient pas la solution. Par exemple, au premier tour et , donc le programme pose
b = 0.5alors que la solution est à droite de . L'intervalle final ne contient pas la solution.Version corrigée : inverser les deux affectations.
while b - a > 0.001: m = (a + b) / 2 if f(m) > 0: b = m else: a = mAprès correction, l'invariant est : à chaque tour. Le programme s'arrête quand l'amplitude descend sous , soit après 10 étapes puisque .
Pour éviter ce piège, choisis un invariant (ici, et de signes contraires) et vérifie que chaque branche du if le préserve. Teste aussi ton programme sur un cas dont tu connais la réponse.
Les questions qu'on se pose
Comment choisir entre `while u < S` et `while u <= S` dans un algorithme de seuil ?
Écris d'abord l'objectif avec les mots de l'énoncé, puis prends son contraire. Pour « strictement supérieur à », la boucle continue tant que u <= S. Pour « supérieur ou égal à », elle continue tant que u < S. Teste ensuite sur un cas où le seuil est atteint pile : c'est là que la différence apparaît.
Pourquoi la dichotomie est-elle plus rapide qu'un balayage de la liste ?
Parce qu'à chaque tour, on écarte une moitié de la zone de recherche d'un coup, alors qu'un balayage ne peut écarter qu'un élément à la fois. Cette méthode suppose les données ordonnées 2, ce qui permet de savoir de quel côté du milieu se trouve la valeur cherchée.
Que faire quand mon `while` ne s'arrête jamais ?
Vérifie trois points : la variable testée dans la condition est bien modifiée dans la boucle, elle évolue dans le bon sens vers le seuil (une suite décroissante ne dépassera jamais un seuil vers le haut), et n est bien incrémenté. Une boucle while est non bornée : c'est à toi de t'assurer que la condition deviendra fausse 2. En cas de doute, fais afficher les premières valeurs avec print.
Sources
Programme visé : Programme de spécialité de mathématiques de terminale générale · education.gouv.fr
- Programme de spécialité de mathématiques de terminale générale, education.gouv.fr. Consulté le 7 novembre 2026.
- Ressource Éduscol - Approche par dichotomie et algorithmes, eduscol.education.fr. Consulté le 7 novembre 2026.
- Diaporama Algorithmique - Ressources Lycée, ac-strasbourg.fr. Consulté le 7 novembre 2026.
- Algorithme TCP, Wikipédia. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.