Algorithmique Terminale – Chapitre 7 : lire, compléter, corriger un programme (type bac)

Introduction

Ce dernier chapitre prépare directement aux questions d’algorithmique du bac : dire ce que renvoie un programme, le compléter, le corriger et interpréter son résultat dans le contexte de l’exercice.

Une méthode en quatre étapes (valeurs initiales, type de boucle, ordre des lignes, valeur renvoyée) est appliquée à trois exemples résolus : un programme « mystère », un programme à compléter d’après le Bac Métropole 2025 et un programme qui contient une erreur à trouver.

Le chapitre se termine par cinq exercices de synthèse de difficulté croissante, qui réutilisent tout ce qui a été vu dans les chapitres précédents : lecture d’un programme, programme TI-82 à compléter, dichotomie, erreur à corriger et programme complet à écrire en Python.

Chapitre précédent : chapitre 6 – la méthode de dichotomie. Retrouvez tous les chapitres dans la rubrique Algorithmique et Python.

Cours proposé par Pr. Elakili sur Mission Maths 360.

Méthode – les questions d’algorithmique au bac

Au bac, on demande presque toujours de dire ce que renvoie un programme, de le compléter, ou d’interpréter son résultat dans le contexte. Le programme est écrit en Python, mais la démarche est la même en langage naturel ou sur la TI :

  1. Repérer les valeurs initiales : u_0, le compteur (n=0, ou l’année de départ), la somme (S=0).
  2. Repérer la boucle : Pour (nombre de tours connu) ou Tant que (seuil) ; la condition d’un Tant que est le contraire de ce que l’on cherche.
  3. Dans la boucle : terme suivant, puis compteur (ou somme) ; attention à l’ordre des lignes.
  4. Repérer ce qui est renvoyé (n, u, S, une année…) et interpréter dans le contexte. Faire un tableau d’exécution en cas de doute.

1. Trois exemples résolus

Exemple résolu 1 – Que renvoie ce programme ? Que représente le résultat ?

Algorithme

u ← 50 ; n ← 0
Tant que u > 1
    u ← u/2
    n ← n + 1
Fin Tant que
Afficher n

Python

def mystere():
    u = 50
    n = 0
    while u > 1:
        u = u / 2
        n = n + 1
    return n

TI-82

:50→U
:0→N
:TantQue U>1
:U/2→U
:N+1→N
:Fin
:Disp N

Ce que calcule la boucle : la suite u_n=50\times 0{,}5^n (on divise par 2 à chaque tour). Valeurs : 50 ; 25 ; 12{,}5 ; 6{,}25 ; 3{,}125 ; 1{,}562\,5 ; 0{,}781\,25.

Réponse : la boucle s’arrête dès que u\leqslant 1, au 6e tour : le programme renvoie 6, le plus petit entier n tel que 50\times 0{,}5^n\leqslant 1.

Exemple résolu 2 – Compléter un programme

D’après Bac Métropole, 17 juin 2025, sujet 1, exercice 4.

La superficie (en ha) recouverte par la posidonie au 1er juillet 2024 + n vérifie u_0=1 et u_{n+1}=-0{,}02\,u_n^2+1{,}3\,u_n ; la suite est croissante et converge vers 15. Compléter le programme pour qu’il renvoie l’année à partir de laquelle la superficie dépasse 14 ha.

Énoncé

def seuil():
    n = 0
    u = ....
    while .........:
        u = ..............
        n = n + 1
    return ........

Corrigé Python

def seuil():
    n = 0
    u = 1
    while u <= 14:
        u = -0.02*u**2 + 1.3*u
        n = n + 1
    return 2024 + n

Version TI-82

:0→N
:1→U
:TantQue U⩽14
:-0.02U^2+1.3U→U
:N+1→N
:Fin
:Disp 2024+N

Résultat : 2042 (u_{17}\approx 13{,}79 et u_{18}\approx 14{,}12). La boucle s’arrête car \lim u_n=15>14.

Exemple résolu 3 – Trouver l’erreur

Ce programme doit renvoyer 1+2+\dots+n.

def somme(n):
    for k in range(1, n+1):
        S = 0
        S = S + k
    return S

Test : somme(5) renvoie 5 au lieu de 15.

Erreur : S = 0 est dans la boucle : la somme est remise à zéro à chaque tour, et à la fin S ne contient que le dernier k.

Correction : placer S = 0 avant la boucle (TI : 0→S avant Pour(K,1,N)).

2. Exercices de synthèse

Exercice 1 · Lire un programme ★★★★

def f(n):
    u = 1
    for k in range(n):
        u = u + k
    return u
  1. Que renvoie f(4) ? f(10) ? (faire un tableau d’exécution)
  2. Exprimer f(n) à l’aide d’une somme, puis en fonction de n.
  3. Écrire la version en langage naturel et la version TI-82.
Corrigé

1. f(4) =1+0+1+2+3=7 ;

⇝ f(4)=7 et f(10)=46

2. f(n)=1+\displaystyle\sum_{k=0}^{n-1}k=1+\dfrac{n(n-1)}{2}.

3. TI :

:Prompt N
:1→U
:Pour(K,0,N-1)
:U+K→U
:Fin
:Disp U

Exercice 2 · Compléter un programme TI-82 ★★★★

:0→N
:100→U
:TantQue ..........
:..........→U
:N+1→N
:Fin
:Disp N

Un capital de 100 € perd 10 % de sa valeur chaque année.

  1. Compléter le programme pour qu’il affiche le nombre d’années au bout duquel le capital devient inférieur à 1 €.
  2. Que s’affiche-t-il ? Justifier que la boucle s’arrête.
  3. Traduire ce programme en Python.
Corrigé

1. TantQue U⩾1 et 0.9U→U.

2. La suite géométrique de raison 0{,}9\in\,]-1\,;1[ tend vers 0<1, donc la boucle s’arrête.

⇝ il s’affiche 44

3.

def annees():
    n = 0
    u = 100
    while u >= 1:
        u = 0.9*u
        n = n + 1
    return n

Exercice 3 · Compléter une dichotomie ★★★★

def racine():
    a, b = 1, 2
    while b - a > ....:
        m = (a + b) / 2
        if m**2 - 2 < 0:
            ......
        else:
            ......
    return a, b
  1. Justifier que l’équation x^2-2=0 admet une unique solution sur [1\,;2].
  2. Compléter le script pour qu’il renvoie un encadrement de \sqrt{2} d’amplitude au plus 0{,}01.
  3. Que renvoie-t-il ? Combien de tours fait la boucle ?
  4. Écrire la version TI-82 (avec Y1=X^2-2).
Corrigé

1. x\mapsto x^2-2 est continue, strictement croissante sur [1\,;2], et -1<0<2.

2. Compléter par 0.01, a = m, b = m.

3. 7 tours ; le script renvoie (1.4140625, 1.421875) :

⇝ 1{,}414\leqslant\sqrt{2}\leqslant 1{,}422

4.

:1→A
:2→B
:TantQue B-A>0.01
:(A+B)/2→M
:Si Y1(M)<0
:Alors
:M→A
:Sinon
:M→B
:Fin
:Fin
:Disp A,B

Exercice 4 · Trouver et corriger l’erreur ★★★★

def seuil():
    u = 1
    n = 0
    while u > 100:
        u = 1.5*u
        n = n + 1
    return n

Ce programme doit renvoyer le plus petit entier n tel que 1{,}5^n>100.

  1. Que renvoie-t-il ? Pourquoi ?
  2. Corriger le programme, puis donner le résultat attendu.
  3. Écrire la version corrigée pour la TI-82.
Corrigé

1. Il renvoie 0 : la condition est inversée (u=1 n’est pas >100, on n’entre jamais dans la boucle).

2. Correction : while u <= 100: ; il renvoie alors 12.

⇝ n=12

3. TI : TantQue U⩽100.

Exercice 5 · Écrire un programme complet ★★★★

Soit u_0=0 et u_{n+1}=\sqrt{u_n+6}. On admet que (u_n) est croissante et converge vers 3.

  1. Calculer u_1, u_2 à la calculatrice (mode Suite : u(n)=√(u(n-1)+6), avec √ : 2nde x²).
  2. Écrire, en langage naturel, en Python (from math import sqrt) et sur la TI-82, un programme qui renvoie le plus petit n tel que 3-u_n<10^{-4}. Justifier qu’il s’arrête, et donner le résultat.
Corrigé

1. u_1=\sqrt{6}\approx 2{,}449, u_2\approx 2{,}907.

2. Boucle Tant que 3-u\geqslant 10^{-4}, corps u\leftarrow\sqrt{u+6} et n\leftarrow n+1 ; elle s’arrête car \lim u_n=3.

from math import sqrt

def rang():
    u = 0
    n = 0
    while 3 - u >= 10**(-4):
        u = sqrt(u + 6)
        n = n + 1
    return n

⇝ n=6 (u_6\approx 2{,}999\,93)


Télécharger le chapitre en PDF

Pour réviser sur papier, téléchargez le chapitre complet au format PDF (avec les réponses des exercices).

Pour aller plus loin

Publications similaires