EuraStudy
Fiches/Mathématiques/Algorithmique et programmation
FR · Bac

Algorithmique et programmation

Python est l'outil numérique transversal du programme de spécialité : il sert à calculer des termes de suites, des sommes et des intégrales approchées, à rechercher un seuil, à encadrer une solution d'équation et à simuler des expériences aléatoires. Ce thème rassemble les bases du langage (variables, conditions, boucles for/while), les fonctions et les listes, les algorithmes liés au programme (seuils, sommes, suites, dichotomie/balayage, méthode des rectangles) et la simulation aléatoire (module random, estimation d'une probabilité par fréquence). On y apprend aussi à lire un programme, à en faire la trace d'exécution et à corriger une erreur.

5 sections·~32 min de lecture·4 compétences·Vérifié · 08/2026

T·141414 / 14
Profil d’examen
Écrire, lire, modifier et exécuter « à la main » un programme Python en lien avec le programme (variables, conditions, boucles, fonctions, listes).Programmer un algorithme de recherche de seuil (boucle while) ou de balayage / dichotomie pour encadrer la solution d'une équation f(x)=0.Utiliser fonctions et listes pour structurer un calcul : termes de suites, sommes (accumulateur ou sum), intégrale approchée par la méthode des rectangles.Simuler une expérience aléatoire (loi binomiale, fréquence d'un événement, moyenne d'un échantillon), estimer une probabilité ou une aire et interpréter le résultat.
Opérateurs :écrireliremodifierexécuterprogrammersimulerestimerinterpréterjustifiercorriger

niveau de base

Maîtriser d'abord la lecture et la trace d'exécution d'un programme court (variables, boucle for/while, condition), savoir compléter une ligne manquante et reconnaître l'algorithme attendu (seuil, somme, simulation).

niveau approfondi

En spécialité, savoir écrire entièrement une fonction Python demandée (recherche de seuil, dichotomie, méthode des rectangles, simulation), relier la sortie du programme à un résultat d'analyse (limite, aire, probabilité) et repérer puis corriger une erreur en justifiant la correction.

Profondeur

Profondeur de lecture : Approfondi

Texte

Taille du texte : Standard · Interligne : Compact

Toujours charger les médias : désactivé

Sommaire · 5 sections▾
  1. Algorithmique et programmation
    • 01Bases du langage Python : variables, affectations, conditions, boucles for et while○
    • 02Fonctions et listes : définition, paramètres, valeur de retour, parcours, listes en compréhension◐
    • 03Algorithmes du programme : recherche de seuil, sommes et calcul de termes de suites◐
    • 04Encadrer une solution et approcher une aire : balayage, dichotomie, méthode des rectangles●
    • 05Simulation aléatoire et estimation : module random, fréquences, loi binomiale, lecture et correction d'un programme●

5 sections · 20 points clés · 11 formules · 20 pièges signalés

§ 01
§ 01

Bases du langage Python : variables, affectations, conditions, boucles for et while#

~6 min de lecture●○○BaseBOBO-2019-spe-maths-terminale-§Algorithmique-et-programmation

for vs while : choisir la bonne boucle

Tableau de 3 colonnes et 3 lignes, cellule mise en évidence : Arrêt sur une conditionTableau de 3 colonnes et 3 lignes, Données: Critère · for · while; Quand l’utiliser · Nombre de tours connu · Arrêt sur une condition; Exemple · Somme de n termes · Recherche de seuil; Sortie · Après n tours · Quand la condition est fausse, cellule mise en évidence : Arrêt sur une conditionCritèreforwhileQuand l’utiliserNombre de tours connuArrêt sur une conditionExempleSomme de n termesRecherche de seuilSortieAprès n toursQuand la condition estfausse
Fig. 1On choisit `for` quand le nombre de tours est connu (parcours, somme de n termes) et `while` quand on s'arrête sur une condition (recherche de seuil, précision atteinte).

Points clés

Variable et affectation : une variable est un nom associé à une valeur stockée en mémoire ; l'affectation s'écrit `x = 3` et signifie « ranger la valeur 333 dans la case nommée x » (le `=` n'est PAS une égalité mathématique). Une réaffectation comme `x = x + 1` se lit de droite à gauche : on calcule d'abord `x + 1` avec l'ancienne valeur, puis on la range dans x (on dit qu'on incrémente x). Les types usuels au lycée sont `int` (entier), `float` (réel à virgule, le séparateur décimal est le POINT : `3.5`) et `bool` (`True` / `False`).
Instruction conditionnelle : `if condition: ... elif autre_condition: ... else: ...` exécute un bloc selon la valeur d'un test booléen. Les comparaisons s'écrivent `==` (égal), `!=` (différent), `<`, `<=`, `>`, `>=` ; on combine des tests avec `and`, `or`, `not`. ATTENTION : en Python, c'est l'INDENTATION (le décalage par espaces) qui délimite les blocs — il n'y a ni accolades ni `begin/end`.
Boucle `for` (nombre d'itérations CONNU) : `for k in range(n):` répète le bloc en faisant prendre à k les valeurs 0,1,2,…,n−10, 1, 2, \dots, n-10,1,2,…,n−1 — soit nnn tours. Plus généralement `range(a, b)` parcourt a,a+1,…,b−1a, a+1, \dots, b-1a,a+1,…,b−1 et `range(a, b, p)` avance de ppp en ppp. On l'utilise pour calculer une somme, parcourir une liste, ou itérer une suite explicite.
Boucle `while` (CONDITION D'ARRÊT) : `while condition:` répète le bloc TANT QUE la condition est vraie ; on l'emploie quand on ignore à l'avance le nombre d'itérations, typiquement pour une RECHERCHE DE SEUIL (« combien d'années pour dépasser un capital ? »). Il faut que la condition finisse par devenir fausse, sinon la boucle est infinie.
Différence essentielle : on choisit `for` quand le nombre de répétitions est fixé d'avance (par exemple parcourir une liste ou sommer nnn termes) et `while` quand on s'arrête sur un événement (dépassement d'un seuil, précision atteinte). Dans une recherche de seuil, le compteur d'itérations donne directement le rang ou le nombre de pas cherché.
Le programme est clair sur le statut de ce chapitre : en algorithmique, la terminale « reprend les programmes de seconde et de première SANS introduire de notion nouvelle ». Rien n'est donc à apprendre ici qui ne l'ait déjà été — variables, types, affectation, instruction conditionnelle, boucles, fonctions, listes. Ce qui change, c'est l'usage : l'algorithmique intervient désormais À L'INTÉRIEUR des autres chapitres, pour calculer un seuil dans une suite, approcher une intégrale, simuler une loi. Une conséquence pratique pour l'épreuve : les questions d'algorithmique ne sont presque jamais isolées, elles servent un raisonnement mathématique voisin, et la réponse attendue relie la sortie du programme au résultat mathématique. Retenez aussi une convention d'écriture : dans un algorithme rédigé en langage naturel, l'affectation se note par une flèche, comme dans « u ← 3 ».

Vocabulaire

→ Cartes
  • affectationRangement d'une valeur dans une variable, noté = en Python et ← en langage naturel.
  • indentationDécalage qui délimite les blocs en Python, à la place des accolades.
  • boucle bornéeBoucle for, employée quand le nombre d'itérations est connu à l'avance.
  • boucle non bornéeBoucle while, employée quand l'arrêt dépend d'une condition, typiquement une recherche de seuil.

Sémantique de range

for k in range(n):⟶k∈{0, 1, 2, …, n−1}  (n tours)\texttt{for k in range(n):}\quad\longrightarrow\quad k \in \{0,\,1,\,2,\,\dots,\,n-1\}\ \ (n\ \text{tours})for k in range(n):⟶k∈{0,1,2,…,n−1}  (n tours)

`range(n)` produit les entiers de 000 à n−1n-1n−1 inclus : la boucle effectue exactement nnn itérations, et la borne nnn N'est PAS atteinte.

Affectation / incrémentation

x←x+1(x = x + 1)x \leftarrow x + 1 \qquad (\texttt{x = x + 1})x←x+1(x = x + 1)

On évalue le membre de droite avec l'ANCIENNE valeur de x, puis on range le résultat dans x : c'est une instruction, pas une équation.

La lecture charge du contenu depuis YouTube (Google).Ouvrir sur YouTube ↗
La lecture charge du contenu depuis YouTube (Google).Ouvrir sur YouTube ↗
Exemple corrigé

Trace d'un programme et choix de la boucle

On donne le programme Python suivant. Indiquer ce qu'il affiche, puis le réécrire avec une boucle `while` produisant le même résultat. ``` s = 0 for k in range(1, 5): s = s + k print(s) ```

  1. 01Suivre la valeur de s tour par tour

    La variable `s` part de 000 ; `k` prend successivement les valeurs 1,2,3,41, 2, 3, 41,2,3,4 (range(1, 5) exclut 555). À chaque tour on ajoute `k` à `s`.

    s:0→0+1=1→1+2=3→3+3=6→6+4=10s : 0 \to 0{+}1{=}1 \to 1{+}2{=}3 \to 3{+}3{=}6 \to 6{+}4{=}10s:0→0+1=1→1+2=3→3+3=6→6+4=10
  2. 02Conclure l'affichage

    Après la boucle, `s` vaut 101010 : le programme calcule 1+2+3+4=101+2+3+4=101+2+3+4=10 et affiche `10`.

    ∑k=14k=4×52=10\sum_{k=1}^{4} k = \frac{4\times 5}{2} = 10k=1∑4​k=24×5​=10
  3. 03Réécrire avec une boucle while

    On introduit un compteur `k` initialisé à 111, qu'on incrémente tant qu'il ne dépasse pas 444 : ``` s = 0 k = 1 while k <= 4: s = s + k k = k + 1 print(s) ``` La condition `k <= 4` joue le rôle de la borne de `range`.

Résultat : Le programme affiche `10` ; la version `while` (compteur `k` de 111 à 444) donne le même résultat. Ici une boucle `for` est plus naturelle car le nombre de tours est connu.

Objectif Bac

  • Objectif Bac : lire un court programme Python et prévoir sa sortie, ou compléter une ligne manquante (condition, borne de `range`, mise à jour d'une variable) pour qu'il réalise la tâche demandée.
  • Objectif Bac : choisir et justifier l'emploi d'une boucle `for` (nombre de termes connu) ou `while` (recherche de seuil) selon la question, et reconnaître que le compteur d'une boucle `while` donne le rang ou le nombre de pas cherché.
  • Relier systématiquement la sortie d'un programme au résultat mathématique attendu : une question d'algorithmique sert toujours un raisonnement voisin.
  • Employer la flèche ← pour l'affectation dans un algorithme en langage naturel, et le signe = dans le code Python.

Erreurs fréquentes

  • Croire que `for k in range(n)` parcourt 1,2,…,n1, 2, \dots, n1,2,…,n : il parcourt 0,1,…,n−10, 1, \dots, n-10,1,…,n−1 ; la borne nnn est EXCLUE et le premier indice est 000. Pour obtenir 111 à nnn, on écrit `range(1, n+1)`.
  • Confondre `=` (affectation) et `==` (test d'égalité) : `if x = 0:` provoque une erreur ; un test s'écrit `if x == 0:`. De même, oublier l'indentation ou les deux-points `:` après `if`, `for`, `while` casse le programme.
  • Traiter la question d'algorithmique comme un exercice d'informatique isolé : elle prolonge la question mathématique précédente et doit être interprétée dans son contexte.
  • Écrire une affectation avec une flèche dans du code Python, ou un signe = dans un algorithme en langage naturel : chaque registre a sa notation.

§ 01

Révision active

Écrire un programme qui demande un entier nnn (`n = 50` par exemple), puis affiche le nombre d'entiers entre 111 et nnn qui sont multiples de 333 (on utilisera une boucle `for`, un test avec l'opérateur `%` de reste, et un compteur incrémenté).

S’entraîner sur des exercices associés50 questions sur ce thème→

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de l'enseignement de spécialité de mathématiques — classe terminale, voie générale (annexe de l'arrêté du 19-7-2019, NOR MENE1921246A) (Ministère de l’Éducation nationale — Bulletin officiel)

§ 02
§ 02

Fonctions et listes : définition, paramètres, valeur de retour, parcours, listes en compréhension#

~6 min de lecture●●○StandardBOBO-2019-spe-maths-terminale-§Algorithmique-et-programmation

Anatomie d'une fonction Python

Graphe, 4 nœuds, 3 arêtesGraphe, paramètre x → def f(x) : bloc, def f(x) : bloc → return v, return v → y = f(a)paramètre xdef f(x) : blocreturn vy = f(a)
Fig. 2Une fonction reçoit un (ou plusieurs) paramètre, exécute son bloc, puis RENVOIE une valeur via `return` — réutilisable dans un calcul (ici l'accumulateur d'une somme).

Points clés

Définir une FONCTION : `def f(x): ... return resultat`. Le mot-clé `def` ouvre la définition, `x` est un PARAMÈTRE (une variable d'entrée), et `return` renvoie la VALEUR DE RETOUR puis termine l'exécution de la fonction. On appelle ensuite la fonction par `f(2)`, qui vaut la valeur renvoyée. Une fonction peut avoir plusieurs paramètres : `def somme(a, b): return a + b`. Sans `return`, la fonction renvoie `None` (rien d'utilisable).
Distinguer `return` et `print` : `return` RENVOIE une valeur réutilisable dans un calcul (`y = f(3)`), tandis que `print` se contente d'AFFICHER à l'écran sans renvoyer de valeur exploitable. Pour structurer un calcul (sommer, comparer, itérer), il faut `return`.
Une LISTE est une collection ordonnée et modifiable de valeurs, notée entre crochets : `L = [3, 7, 1, 9]`. On accède au terme d'indice iii par `L[i]` — les indices commencent à 000, donc `L[0]` vaut 333 et `L[-1]` vaut le dernier terme. `len(L)` donne la longueur, `L.append(v)` ajoute `v` à la fin, et on parcourt la liste par `for x in L:` (sur les valeurs) ou `for i in range(len(L)):` (sur les indices).
LISTE EN COMPRÉHENSION : `[f(k) for k in range(n)]` construit en une ligne la liste [f(0),f(1),…,f(n−1)][f(0), f(1), \dots, f(n-1)][f(0),f(1),…,f(n−1)]. C'est l'outil idéal pour fabriquer la liste des termes d'une suite uku_kuk​, des images f(xk)f(x_k)f(xk​) ou des valeurs d'une simulation. On peut filtrer : `[k for k in range(20) if k % 2 == 0]` ne garde que les entiers pairs.
Sommer une liste de valeurs : soit avec la fonction intégrée `sum(L)`, soit « à la main » avec un ACCUMULATEUR — on initialise `s = 0`, puis `for x in L: s = s + x`. L'accumulateur est le motif universel pour calculer une somme ∑uk\sum u_k∑uk​ ou une aire approchée ; `sum` est un raccourci équivalent.
Le programme met l'accent sur la PROGRAMMATION MODULAIRE, c'est-à-dire sur le découpage d'une tâche complexe en tâches plus simples, chacune confiée à une fonction. Concrètement, un exercice qui demande le rang à partir duquel une suite dépasse un seuil se traite avec deux fonctions plutôt qu'une : une première qui calcule le terme de rang n, une seconde qui appelle la première dans une boucle jusqu'au dépassement. Le gain est double — chaque fonction se teste séparément, et la seconde reste lisible quel que soit le détail de la première. C'est aussi ce découpage que les sujets exploitent lorsqu'ils fournissent une fonction et demandent d'en écrire une autre qui l'utilise : on n'a alors pas à comprendre le détail de la fonction donnée, seulement ce qu'elle renvoie.
Une limite explicite du programme mérite d'être connue, car elle rassure : « afin d'éviter des confusions, on se limite aux LISTES sans présenter d'autres types de collections ». Aucun dictionnaire, aucun tuple, aucun ensemble Python n'est donc exigible — la liste est la seule structure de données au programme, et les quatre capacités qui s'y rattachent sont de la générer (en extension, par ajouts successifs ou en compréhension), de manipuler ses éléments et leurs indices, de la parcourir et d'itérer sur ses éléments. Les trois modes de génération méritent d'être maîtrisés ensemble : en extension on écrit la liste telle quelle, par ajouts successifs on part de la liste vide et on empile, en compréhension on décrit les termes par une formule et, éventuellement, une condition de filtrage.

Vocabulaire

→ Cartes
  • programmation modulaireDécoupage d'une tâche complexe en fonctions simples appelées les unes par les autres.
  • valeur de retourValeur renvoyée par return et réutilisable dans un calcul, à la différence de ce qu'affiche print.
  • liste en compréhensionGénération d'une liste par une formule sur un indice, avec éventuellement une condition de filtrage.
  • accumulateurVariable initialisée puis mise à jour à chaque tour de boucle pour cumuler une somme.

Définition et appel d'une fonction

def f(x): return ...appel : y=f(a) vaut la valeur renvoyeˊe\texttt{def f(x): return ...}\qquad\text{appel : } y = f(a)\ \text{vaut la valeur renvoyée}def f(x): return ...appel : y=f(a) vaut la valeur renvoyeˊe

`def` crée la fonction, `return` fixe la valeur de sortie ; l'appel `f(a)` remplace le paramètre par l'argument aaa et renvoie le résultat.

Liste en compréhension

[f(k) for k in range(n)]  =  [ f(0), f(1), …, f(n−1) ]\texttt{[f(k) for k in range(n)]} \;=\; \big[\,f(0),\ f(1),\ \dots,\ f(n-1)\,\big][f(k) for k in range(n)]=[f(0), f(1), …, f(n−1)]

Construit en une instruction la liste des nnn premières images : c'est la traduction directe d'une famille (f(k))0≤k≤n−1(f(k))_{0\le k\le n-1}(f(k))0≤k≤n−1​.

Somme par accumulateur

s = 0  ;  for x in L: s = s + x⟺sum(L)  =  ∑k=0 ∣L∣−1L[k]\texttt{s = 0} \;;\; \texttt{for x in L: s = s + x} \quad\Longleftrightarrow\quad \texttt{sum(L)} \;=\; \sum_{k=0}^{\,|L|-1} L[k]s = 0;for x in L: s = s + x⟺sum(L)=k=0∑∣L∣−1​L[k]

L'accumulateur `s` cumule les termes un à un ; `sum(L)` réalise exactement la même somme.

La lecture charge du contenu depuis YouTube (Google).Ouvrir sur YouTube ↗
Exemple corrigé

Fonction renvoyant un terme de suite et somme par accumulateur

Soit la suite définie par un=1n+1u_n = \dfrac{1}{n+1}un​=n+11​ pour n≥0n \ge 0n≥0. 1. Écrire une fonction Python `u(n)` qui renvoie unu_nun​. 2. Écrire une fonction `somme(N)` qui renvoie la somme SN=u0+u1+⋯+uNS_N = u_0 + u_1 + \dots + u_NSN​=u0​+u1​+⋯+uN​ à l'aide d'un accumulateur. 3. Donner la valeur affichée par `somme(3)`.

  1. 01Définir la fonction u

    Le terme est explicite : on renvoie directement 1n+1\frac{1}{n+1}n+11​. ``` def u(n): return 1 / (n + 1) ```

  2. 02Construire la somme par accumulateur

    On initialise l'accumulateur `s = 0`, puis on ajoute `u(k)` pour `k` de 000 à NNN inclus (donc `range(N + 1)`). ``` def somme(N): s = 0 for k in range(N + 1): s = s + u(k) return s ```

    SN=∑k=0N1k+1S_N = \sum_{k=0}^{N} \frac{1}{k+1}SN​=k=0∑N​k+11​
  3. 03Évaluer somme(3)

    On somme les quatre premiers termes u0,u1,u2,u3u_0, u_1, u_2, u_3u0​,u1​,u2​,u3​.

    S3=1+12+13+14=12+6+4+312=2512≈2,083S_3 = 1 + \tfrac{1}{2} + \tfrac{1}{3} + \tfrac{1}{4} = \tfrac{12+6+4+3}{12} = \tfrac{25}{12} \approx 2{,}083S3​=1+21​+31​+41​=1212+6+4+3​=1225​≈2,083

Résultat : `u(n)` renvoie 1n+1\frac{1}{n+1}n+11​, `somme(N)` cumule les termes par accumulateur, et `somme(3)` affiche 2512≈2,083\frac{25}{12} \approx 2{,}0831225​≈2,083.

Objectif Bac

  • Objectif Bac : écrire une fonction Python `def u(n): ...` renvoyant le terme de rang nnn d'une suite (explicite ou par itération de la récurrence), puis l'utiliser pour construire la liste des premiers termes ou en calculer la somme.
  • Objectif Bac : reconnaître et compléter un calcul de somme par accumulateur (`s = 0` puis `s = s + ...`) ou par liste en compréhension, et relier la sortie de la fonction au résultat mathématique attendu (terme, somme, moyenne).
  • Découper un calcul en fonctions courtes et appeler l'une depuis l'autre : c'est la programmation modulaire que le programme met en avant.
  • Savoir générer une liste des trois façons au programme — extension, ajouts successifs, compréhension — et choisir la plus lisible.

Erreurs fréquentes

  • Confondre `return` et `print` : une fonction qui se contente de `print(x)` ne renvoie rien d'exploitable, donc `y = f(3)` vaut `None` et tout calcul ultérieur échoue. Pour réutiliser la valeur, il faut `return`.
  • Se tromper d'indice : `L[0]` est le PREMIER terme (pas `L[1]`), et `L[len(L)]` n'existe pas (dernier indice valide =len(L)−1= \text{len}(L)-1=len(L)−1), ce qui provoque une erreur d'« index out of range ».
  • Chercher à employer un dictionnaire ou un tuple : le programme se limite explicitement aux listes, et aucune autre collection n'est exigible.
  • Réécrire dans une fonction le contenu d'une fonction déjà fournie : il suffit de l'APPELER, ce qui est précisément l'intérêt du découpage modulaire.

§ 02

Révision active

On considère la suite définie par u0=2u_0 = 2u0​=2 et un+1=0,5 un+3u_{n+1} = 0{,}5\,u_n + 3un+1​=0,5un​+3. Écrire une fonction `terme(n)` qui renvoie unu_nun​ en itérant la relation de récurrence avec une boucle `for`, puis construire par compréhension la liste `[terme(k) for k in range(8)]` des huit premiers termes.

S’entraîner sur des exercices associés50 questions sur ce thème→

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de l'enseignement de spécialité de mathématiques — classe terminale, voie générale (annexe de l'arrêté du 19-7-2019, NOR MENE1921246A) (Ministère de l’Éducation nationale — Bulletin officiel)

§ 03
§ 03

Algorithmes du programme : recherche de seuil, sommes et calcul de termes de suites#

~6 min de lecture●●○StandardBOBO-2019-spe-maths-terminale-§Algorithmique-et-programmation

Organigramme d'une recherche de seuil (boucle while)

Graphe, 4 nœuds, 4 arêtesGraphe, u = u₀ ; n = 0 → u < S ?, u < S ? → u = g(u) ; n = n + 1, u = g(u) ; n = n + 1 → u < S ?, u < S ? → renvoyer nu = u₀ ; n = 0u < S ?u = g(u) ; n = n + 1renvoyer nouibouclenon
Fig. 3On part de u=u0u = u_0u=u0​ et n=0n = 0n=0, puis tant que u<Su < Su<S on itère la suite (u←g(u)u \leftarrow g(u)u←g(u)) et on incrémente nnn ; dès que u≥Su \ge Su≥S, on sort et nnn est le rang cherché.

Points clés

RECHERCHE DE SEUIL : pour une suite (un)(u_n)(un​) qui tend vers +∞+\infty+∞ (ou converge), on cherche le plus petit rang nnn tel que unu_nun​ dépasse (ou approche à ε\varepsilonε près) une valeur fixée. On itère la relation de récurrence dans une boucle `while` qui s'arrête dès que le seuil est atteint, en comptant les tours. La SORTIE de l'algorithme est le rang cherché ; l'analyse (comportement de qnq^nqn, croissances comparées, limite monotone) garantit ensuite que ce rang existe.
Calcul d'un TERME de suite : si unu_nun​ est explicite (un=f(n)u_n = f(n)un​=f(n)), on renvoie directement `f(n)` ; si la suite est définie par récurrence un+1=g(un)u_{n+1} = g(u_n)un+1​=g(un​), on part de u0u_0u0​ et on applique ggg exactement nnn fois dans une boucle `for k in range(n)`. C'est le squelette de toute fonction `terme(n)`.
Calcul d'une SOMME : on accumule. Pour SN=∑k=0NukS_N = \sum_{k=0}^{N} u_kSN​=∑k=0N​uk​, on initialise `s = 0`, puis on ajoute chaque terme dans une boucle `for k in range(N + 1)`. Variante : construire la liste des termes par compréhension puis appliquer `sum`. Attention au nombre de termes : la somme de u0u_0u0​ à uNu_NuN​ comporte N+1N+1N+1 termes, d'où `range(N + 1)`.
Schéma type de la boucle de seuil : `n = 0 ; u = u0 ; while u < S: u = g(u) ; n = n + 1`. À la sortie, `n` est le premier rang tel que `u >= S`. On adapte le test (`u > S`, `abs(u - L) <= eps`, etc.) selon la question, et on veille à incrémenter `n` au bon endroit pour que le compteur corresponde au rang réel.
LIEN ANALYSE / ALGORITHME : l'algorithme calcule numériquement un seuil ou une somme, mais ne PROUVE rien à lui seul — il faut justifier mathématiquement l'existence du seuil (par exemple « qn→+∞q^n \to +\inftyqn→+∞ donc le seuil est franchi ») ou la valeur de la somme (formule de la somme géométrique). Python donne la valeur, l'analyse la justifie.
Le programme nomme des algorithmes précis, chapitre par chapitre, et les connaître revient à connaître les questions que l'épreuve peut poser. Pour les suites : recherche de seuils, et calcul de valeurs approchées de constantes comme π, e, √2 ou ln 2. Pour les probabilités : simulation de la planche de Galton, problème de la surréservation — déterminer le plus petit k tel que P(X > k) ⩽ α —, simulation d'un échantillon. Pour le calcul intégral : méthodes des rectangles, des milieux, des trapèzes, et méthode de Monte-Carlo. Pour les équations différentielles : la méthode d'Euler. Pour le dénombrement : génération de la liste des coefficients binomiaux par la relation de Pascal, génération des permutations, génération des parties à deux ou trois éléments. Tous partagent la même charpente — une initialisation, une boucle qui met à jour, une condition d'arrêt ou un nombre de tours fixé.

Vocabulaire

→ Cartes
  • recherche de seuilDétermination du premier rang pour lequel une suite franchit une valeur donnée, par une boucle while.
  • trace d’exécutionTableau des valeurs successives des variables, tour par tour, servant à vérifier ou corriger un programme.
  • condition d’arrêtTest qui interrompt une boucle non bornée ; il doit finir par devenir faux sous peine de boucle infinie.
  • méthode d’EulerAlgorithme d'approximation pas à pas d'une solution d'équation différentielle par l'approximation affine.

Algorithme de recherche de seuil (while)

Seuil : plus petit n tel que un≥S⟶while u < S: u = g(u); n = n + 1\text{Seuil : plus petit } n \text{ tel que } u_n \ge S \quad\longrightarrow\quad \texttt{while u < S: u = g(u); n = n + 1}Seuil : plus petit n tel que un​≥S⟶while u < S: u = g(u); n = n + 1

On itère la suite tant que le seuil SSS n'est pas atteint ; le compteur `n` donne le rang du premier dépassement.

Somme par accumulateur

SN=∑k=0Nuk⟶s = 0; for k in range(N+1): s = s + u(k)S_N = \sum_{k=0}^{N} u_k \quad\longrightarrow\quad \texttt{s = 0; for k in range(N+1): s = s + u(k)}SN​=k=0∑N​uk​⟶s = 0; for k in range(N+1): s = s + u(k)

L'accumulateur cumule les N+1N+1N+1 termes de rang 000 à NNN : la borne `range(N+1)` garantit le bon compte.

Recherche de seuil : u₀ = 100, uₙ₊₁ = 1,08 uₙ ; premier rang où uₙ > 200

Fig. 4La suite géométrique de raison 1,08 croît jusqu'à franchir le seuil 200 : la boucle `while` s'arrête au premier rang dépassant la barre, ici n = 10 (u₁₀ ≈215,9).
La lecture charge du contenu depuis YouTube (Google).Ouvrir sur YouTube ↗
La lecture charge du contenu depuis YouTube (Google).Ouvrir sur YouTube ↗
Exemple corrigé

Recherche de seuil par boucle while

Une espèce végétale invasive couvre une surface S0=12S_0 = 12S0​=12 hectares et s'étend de 20%20\%20% par an : Sn+1=1,2 SnS_{n+1} = 1{,}2\,S_nSn+1​=1,2Sn​. On souhaite connaître le nombre d'années au bout duquel la surface dépasse 505050 hectares. 1. Écrire une fonction Python `seuil()` qui renvoie ce nombre d'années. 2. Déterminer sa valeur par une trace, et justifier que ce seuil existe.

  1. 01Écrire la fonction

    On part de la surface initiale et on multiplie par 1,21{,}21,2 tant qu'on n'a pas dépassé 505050, en comptant les années. ``` def seuil(): S = 12 n = 0 while S <= 50: S = 1.2 * S n = n + 1 return n ```

  2. 02Tracer les valeurs successives

    On suit SSS jusqu'au premier dépassement de 505050.

    S:12→14,4→17,3→20,7→24,9→29,9→35,8→43,0→51,6S: 12 \to 14{,}4 \to 17{,}3 \to 20{,}7 \to 24{,}9 \to 29{,}9 \to 35{,}8 \to 43{,}0 \to 51{,}6S:12→14,4→17,3→20,7→24,9→29,9→35,8→43,0→51,6
  3. 03Conclure et justifier

    Le seuil 505050 est franchi au 8e8^{\text{e}}8e tour (S8≈51,6>50S_8 \approx 51{,}6 > 50S8​≈51,6>50), donc `seuil()` renvoie 888. L'existence du seuil est garantie car (Sn)(S_n)(Sn​) est géométrique de raison 1,2>11{,}2 > 11,2>1, donc Sn=12×1,2 n→+∞S_n = 12 \times 1{,}2^{\,n} \to +\inftySn​=12×1,2n→+∞ : toute valeur, en particulier 505050, finit par être dépassée.

    Sn=12×1,2 n→n→+∞+∞S_n = 12 \times 1{,}2^{\,n} \xrightarrow[n\to+\infty]{} +\inftySn​=12×1,2nn→+∞​+∞

Résultat : `seuil()` renvoie 888 : il faut 888 ans pour dépasser 505050 hectares. Le franchissement est certain car 1,2>11{,}2 > 11,2>1 entraîne Sn→+∞S_n \to +\inftySn​→+∞.

Objectif Bac

  • Objectif Bac : écrire une fonction `seuil(S)` qui renvoie le plus petit rang nnn tel que un≥Su_n \ge Sun​≥S à l'aide d'une boucle `while`, et interpréter ce rang dans le contexte (nombre d'années, de doses, etc.).
  • Objectif Bac : relier la sortie de l'algorithme à un résultat d'analyse — justifier que le seuil est atteint (comportement de qnq^nqn, croissance non majorée) et que la somme programmée coïncide avec la formule mathématique.
  • Reconnaître dans une question l'un des algorithmes nommés par le programme : seuil, Galton, surréservation, rectangles, Euler, Pascal.
  • Séparer par écrit les trois éléments d'un algorithme — initialisation, mise à jour, condition d'arrêt — avant d'écrire la moindre ligne.

Erreurs fréquentes

  • Incrémenter le compteur au mauvais endroit ou décaler le test : selon que l'on incrémente avant ou après la mise à jour de `u`, le rang renvoyé peut être décalé de 111. Il faut tracer un ou deux tours pour vérifier que `n` correspond bien au rang du premier dépassement.
  • Mettre une condition d'arrêt qui ne devient jamais fausse (boucle infinie) : par exemple `while u < S` avec une suite DÉCROISSANTE qui n'atteint jamais SSS, ou un oubli de la mise à jour de `u` dans la boucle.
  • Oublier l'initialisation d'un accumulateur ou d'un compteur : la boucle démarre alors sur une valeur indéterminée et le résultat est faux.
  • Faire varier la condition d'arrêt et la mise à jour de façon incohérente : le rang renvoyé est décalé, ce qu'une trace sur deux tours détecte immédiatement.

§ 03

Révision active

Un capital de 150015001500 € placé à 4%4\%4% par an suit C0=1500C_0 = 1500C0​=1500, Cn+1=1,04 CnC_{n+1} = 1{,}04\,C_nCn+1​=1,04Cn​. Écrire une fonction `annees()` qui renvoie le nombre d'années nécessaires pour que le capital dépasse 200020002000 €, puis justifier mathématiquement que ce seuil est forcément atteint.

S’entraîner sur des exercices associés50 questions sur ce thème→

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de l'enseignement de spécialité de mathématiques — classe terminale, voie générale (annexe de l'arrêté du 19-7-2019, NOR MENE1921246A) (Ministère de l’Éducation nationale — Bulletin officiel)

§ 04
§ 04

Encadrer une solution et approcher une aire : balayage, dichotomie, méthode des rectangles#

~6 min de lecture●●●ApprofondissementBOBO-2019-spe-maths-terminale-§Algorithmique-et-programmation

Dichotomie : encadrement successif d'une racine

Tableau de 6 colonnes et 4 lignes, cellule mise en évidence : 0,125Tableau de 6 colonnes et 4 lignes, Données: n · aₙ · bₙ · mₙ · signe f(mₙ) · bₙ − aₙ; 1 · 1 · 2 · 1,5 · + · 1; 2 · 1 · 1,5 · 1,25 · − · 0,5; 3 · 1,25 · 1,5 · 1,375 · − · 0,25; 4 · 1,375 · 1,5 · 1,4375 · + · 0,125, cellule mise en évidence : 0,125naₙbₙmₙsigne f(mₙ)bₙ − aₙ1121,5+1211,51,25−0,531,251,51,375−0,2541,3751,51,4375+0,125
Fig. 5À chaque étape, on calcule le milieu mmm et on garde la moitié où fff change de signe : l'encadrement de la racine α\alphaα est divisé par deux à chaque tour.

Points clés

BALAYAGE : pour encadrer une solution de f(x)=0f(x) = 0f(x)=0 sur [a ;b][a\,;b][a;b] (où fff est continue et monotone, avec f(a)f(a)f(a) et f(b)f(b)f(b) de signes contraires), on parcourt l'intervalle par petits pas ppp depuis aaa et on s'arrête dès que fff change de signe ; on obtient alors un encadrement de la racine d'amplitude ppp. C'est simple mais lent : pour une précision p=10−kp = 10^{-k}p=10−k, il faut beaucoup de pas.
DICHOTOMIE : méthode plus efficace, qui DIVISE l'intervalle en DEUX à chaque étape. On calcule le milieu m=a+b2m = \frac{a+b}{2}m=2a+b​ ; si f(a)f(a)f(a) et f(m)f(m)f(m) sont de signes contraires, la racine est dans [a ;m][a\,;m][a;m] (on pose b=mb = mb=m), sinon elle est dans [m ;b][m\,;b][m;b] (on pose a=ma = ma=m). À chaque tour, l'amplitude de l'encadrement est DIVISÉE PAR DEUX ; on répète jusqu'à atteindre la précision voulue b−a≤εb - a \le \varepsilonb−a≤ε.
Théorème sous-jacent (admis au lycée) : si fff est continue sur [a ;b][a\,;b][a;b] et change de signe (f(a)×f(b)<0f(a) \times f(b) < 0f(a)×f(b)<0), alors l'équation f(x)=0f(x) = 0f(x)=0 admet (au moins) une solution dans [a ;b][a\,;b][a;b] ; si de plus fff est strictement monotone, cette solution est unique. La dichotomie en construit un encadrement aussi fin qu'on veut.
MÉTHODE DES RECTANGLES : pour approcher ∫abf(x) dx\int_a^b f(x)\,dx∫ab​f(x)dx (aire sous la courbe pour f≥0f \ge 0f≥0), on découpe [a ;b][a\,;b][a;b] en nnn sous-intervalles de même largeur h=b−anh = \frac{b-a}{n}h=nb−a​. L'aire est approchée par la somme des aires de nnn rectangles, chacun de largeur hhh et de hauteur f(xk)f(x_k)f(xk​) où xk=a+k hx_k = a + k\,hxk​=a+kh : ∫abf≈h∑k=0n−1f(a+k h)\int_a^b f \approx h \sum_{k=0}^{n-1} f(a + k\,h)∫ab​f≈h∑k=0n−1​f(a+kh). Plus nnn est grand, plus l'approximation est précise.
En Python : la dichotomie s'écrit avec une boucle `while b - a > eps` qui met à jour `a` ou `b` selon le signe de `f(m)` ; la méthode des rectangles avec une boucle `for k in range(n)` qui accumule `h f(a + kh)`. Dans les deux cas, l'algorithme fournit une valeur approchée que l'analyse (continuité, signe, valeur de l'intégrale exacte) vient encadrer ou justifier.
Comparer chiffres en main le balayage et la dichotomie fait comprendre pourquoi l'une supplante l'autre. Le balayage avance d'un pas fixe : pour atteindre une précision de 10⁻⁶ sur un intervalle de longueur 1, il faut donc de l'ordre d'un million d'évaluations de f. La dichotomie divise l'amplitude par deux à chaque tour : après n tours, l'encadrement mesure (b − a)/2ⁿ, et atteindre 10⁻⁶ demande une vingtaine de tours seulement, puisque 2²⁰ dépasse le million. Cette formule (b − a)/2ⁿ est elle-même la réponse à la question « combien d'itérations pour une précision ε ? » : il suffit de résoudre (b − a)/2ⁿ ⩽ ε. Le balayage garde toutefois un usage — il localise un changement de signe quand on ignore où chercher, avant de passer la main à la dichotomie.

Vocabulaire

→ Cartes
  • balayageParcours de l'intervalle par pas constant jusqu'au changement de signe ; simple mais coûteux.
  • dichotomieMéthode divisant l'intervalle en deux à chaque étape ; l'amplitude après n tours vaut (b − a)/2ⁿ.
  • changement de signeCondition f(a) × f(b) < 0 garantissant l'existence d'une solution pour f continue.
  • amplitude de l’encadrementLongueur de l'intervalle contenant la solution ; elle mesure la précision atteinte.

Méthode des rectangles (à gauche)

∫abf(x) dx  ≈  h∑k=0n−1f(a+k h),h=b−an\int_a^b f(x)\,dx \;\approx\; h\sum_{k=0}^{n-1} f(a + k\,h), \qquad h = \frac{b-a}{n}∫ab​f(x)dx≈hk=0∑n−1​f(a+kh),h=nb−a​

On somme les aires de nnn rectangles de largeur hhh et de hauteur f(xk)f(x_k)f(xk​) : c'est une somme de Riemann qui tend vers l'intégrale quand n→+∞n \to +\inftyn→+∞.

Dichotomie

m=a+b2,f(a) f(m)<0⇒b←m,sinon a←m(amplitude ÷2 par tour)m = \frac{a+b}{2}, \quad f(a)\,f(m) < 0 \Rightarrow b \leftarrow m, \quad \text{sinon } a \leftarrow m \quad (\text{amplitude } \div 2 \text{ par tour})m=2a+b​,f(a)f(m)<0⇒b←m,sinon a←m(amplitude ÷2 par tour)

À chaque étape, le milieu remplace la borne du même signe : l'intervalle contenant la racine est divisé par deux, donc l'encadrement converge très vite.

Méthode des rectangles sous la courbe

Diagramme en colonnes: f(xₖ) selon x, 5 valeurs (maximum 4.6)Diagramme en colonnes: f(xₖ) selon x, Données: hauteur f(xₖ) · x₀: 1.1; hauteur f(xₖ) · x₁: 1.7; hauteur f(xₖ) · x₂: 2.5; hauteur f(xₖ) · x₃: 3.5; hauteur f(xₖ) · x₄: 4.601234x₀x₁x₂x₃x₄f(xₖ)x
Fig. 6On découpe [a ;b][a\,;b][a;b] en nnn tranches de largeur hhh ; chaque rectangle a pour hauteur f(xk)f(x_k)f(xk​). La somme de leurs aires approche ∫abf\int_a^b f∫ab​f — d'autant mieux que nnn est grand.

Méthode des rectangles : approximation de ∫₀¹ x² dx = 1/3 ≈ 0,333 selon n

Fig. 7L'approximation par rectangles (à gauche) de ∫₀¹ x² dx se rapproche de la valeur exacte 1/3 quand le nombre de subdivisions n augmente : sous-estimation qui converge par le bas.
La lecture charge du contenu depuis YouTube (Google).Ouvrir sur YouTube ↗
Exemple corrigé

Méthode des rectangles pour approcher une intégrale

On veut approcher I=∫01x2 dxI = \displaystyle\int_0^1 x^2\,dxI=∫01​x2dx par la méthode des rectangles à gauche. 1. Écrire une fonction Python `rectangles(n)` qui renvoie l'approximation de III avec nnn rectangles. 2. Donner l'approximation obtenue pour n=4n = 4n=4. 3. Comparer à la valeur exacte et expliquer le sens de l'écart.

  1. 01Écrire la fonction

    La largeur d'un rectangle est h=1−0nh = \frac{1 - 0}{n}h=n1−0​ ; on accumule h×f(xk)h \times f(x_k)h×f(xk​) avec f(x)=x2f(x) = x^2f(x)=x2 et xk=k hx_k = k\,hxk​=kh pour kkk de 000 à n−1n-1n−1. ``` def rectangles(n): a, b = 0, 1 h = (b - a) / n s = 0 for k in range(n): x = a + k * h s = s + h x*2 return s ```

  2. 02Calculer pour n = 4

    Avec n=4n = 4n=4, h=0,25h = 0{,}25h=0,25 et les abscisses xk=0, 0,25, 0,5, 0,75x_k = 0,\ 0{,}25,\ 0{,}5,\ 0{,}75xk​=0, 0,25, 0,5, 0,75. On somme les aires h×xk2h \times x_k^2h×xk2​.

    0,25 (02+0,252+0,52+0,752)=0,25×0,875=0,218750{,}25\,(0^2 + 0{,}25^2 + 0{,}5^2 + 0{,}75^2) = 0{,}25\times 0{,}875 = 0{,}218750,25(02+0,252+0,52+0,752)=0,25×0,875=0,21875
  3. 03Comparer à la valeur exacte

    La valeur exacte de l'intégrale est 13≈0,333\frac{1}{3} \approx 0{,}33331​≈0,333. L'approximation 0,218750{,}218750,21875 est INFÉRIEURE : avec des rectangles à gauche et fff croissante, chaque rectangle est entièrement sous la courbe, d'où une SOUS-ESTIMATION qui se réduit quand nnn grandit.

    ∫01x2 dx=[x33]01=13≈0,333\int_0^1 x^2\,dx = \left[\frac{x^3}{3}\right]_0^1 = \frac{1}{3} \approx 0{,}333∫01​x2dx=[3x3​]01​=31​≈0,333

Résultat : `rectangles(4)` renvoie 0,218750{,}218750,21875, valeur approchée par défaut de 13≈0,333\frac{1}{3} \approx 0{,}33331​≈0,333 ; l'écart vient des rectangles à gauche sous une fonction croissante (sous-estimation), et il diminue lorsque nnn augmente.

Objectif Bac

  • Objectif Bac : programmer une dichotomie qui renvoie un encadrement d'amplitude ≤ε\le \varepsilon≤ε de la solution de f(x)=0f(x) = 0f(x)=0, et justifier l'existence-unicité de la solution (continuité + changement de signe + stricte monotonie).
  • Objectif Bac : écrire la méthode des rectangles pour approcher ∫abf\int_a^b f∫ab​f, faire varier nnn pour améliorer la précision, et interpréter le résultat comme une aire (sous-estimation ou sur-estimation selon le sens de variation de fff).
  • Calculer le nombre d'itérations d'une dichotomie en résolvant (b − a)/2ⁿ ⩽ ε, et le comparer au coût linéaire du balayage.
  • Justifier l'existence et l'unicité de la solution — continuité, changement de signe, stricte monotonie — avant de programmer l'encadrement.

Erreurs fréquentes

  • Mal tester le changement de signe : il faut comparer le signe de `f(a) * f(m)` (produit négatif = signes contraires), pas comparer f(m)f(m)f(m) à une valeur. Une erreur de signe envoie la dichotomie dans la mauvaise moitié et fausse l'encadrement.
  • Pour les rectangles, se tromper de bornes ou de hauteur : la somme va de k=0k = 0k=0 à n−1n-1n−1 (rectangles à GAUCHE : hauteur f(a+k h)f(a + k\,h)f(a+kh)) ; oublier le facteur de largeur hhh, ou faire n+1n+1n+1 rectangles, donne un résultat faux.
  • Programmer une dichotomie sans avoir vérifié le changement de signe sur l'intervalle de départ : la méthode converge alors vers une valeur qui n'est pas une racine.
  • Croire que doubler le nombre de tours de dichotomie double la précision : chaque tour la double déjà, l'amplitude étant divisée par 2ⁿ.

§ 04

Révision active

Soit f(x)=x3+x−1f(x) = x^3 + x - 1f(x)=x3+x−1. Vérifier que fff est strictement croissante et que l'équation f(x)=0f(x) = 0f(x)=0 a une unique solution dans [0 ;1][0\,;1][0;1], puis écrire une fonction `dichotomie(eps)` qui renvoie un encadrement de cette solution d'amplitude inférieure à `eps`.

S’entraîner sur des exercices associés50 questions sur ce thème→

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de l'enseignement de spécialité de mathématiques — classe terminale, voie générale (annexe de l'arrêté du 19-7-2019, NOR MENE1921246A) (Ministère de l’Éducation nationale — Bulletin officiel)

§ 05
§ 05

Simulation aléatoire et estimation : module random, fréquences, loi binomiale, lecture et correction d'un programme#

~7 min de lecture●●●ApprofondissementBOBO-2019-spe-maths-terminale-§Algorithmique-et-programmation

Trace d'exécution tabulée d'une boucle de simulation

Tableau de 3 colonnes et 4 lignes, cellule mise en évidence : 3Tableau de 3 colonnes et 4 lignes, Données: tour i · tirage · s (succès); 1 · succès · 1; 2 · échec · 1; 3 · succès · 2; 4 · succès · 3, cellule mise en évidence : 3tour itirages (succès)1succès12échec13succès24succès3
Fig. 8Faire la trace d'une boucle, c'est suivre la valeur de chaque variable tour par tour ; ici un compteur de succès `s` croît selon les tirages, et la fréquence `s/N` estime la probabilité.

Points clés

GÉNÉRATION DE NOMBRES ALÉATOIRES : le module `random` fournit `random()` qui renvoie un réel pseudo-aléatoire dans [0 ;1[[0\,;1[[0;1[ (loi uniforme), et `randint(a, b)` qui renvoie un entier aléatoire entre aaa et bbb INCLUS (par exemple `randint(1, 6)` simule un dé). Pour simuler un événement de probabilité ppp, on teste `random() < p` (vrai avec probabilité ppp).
ESTIMER UNE PROBABILITÉ PAR FRÉQUENCE : on répète NNN fois l'expérience, on compte le nombre de succès, et la FRÉQUENCE observée succeˋsN\frac{\text{succès}}{N}Nsucceˋs​ estime la probabilité ppp. La loi des grands nombres garantit que cette fréquence se rapproche de ppp quand NNN devient grand : plus on répète, plus l'estimation est fiable.
SIMULER UNE LOI BINOMIALE : une variable X∼B(n,p)X \sim \mathcal{B}(n, p)X∼B(n,p) compte le nombre de succès en nnn épreuves de Bernoulli indépendantes de paramètre ppp. On la simule par une fonction qui répète nnn tirages `random() < p` et compte les succès. En répétant cette simulation un grand nombre de fois, l'HISTOGRAMME des valeurs obtenues approche la distribution théorique de XXX (centrée autour de npnpnp).
ESTIMER UNE AIRE / PROBABILITÉ PAR MONTE-CARLO : on peut estimer une aire (ou une probabilité géométrique) en tirant des points aléatoires et en comptant la proportion qui tombe dans une région ; cette fréquence approche l'aire cherchée. La MOYENNE EMPIRIQUE d'un échantillon (moyenne des valeurs simulées) estime de même l'espérance théorique.
LIRE, TRACER ET CORRIGER un programme : faire la TRACE D'EXÉCUTION consiste à dresser un tableau des valeurs successives des variables, tour par tour, pour comprendre ou vérifier un programme. Pour CORRIGER une erreur, on repère le symptôme (résultat faux, boucle infinie, sortie décalée), on localise l'instruction fautive (borne de `range` erronée, test mal placé, compteur non incrémenté, `==`/`=` confondus) et on COMMENTE la correction apportée.
La méthode de MONTE-CARLO, que le programme cite comme exemple d'algorithme du chapitre d'intégration, mérite d'être comprise dans son principe car elle relie les deux moitiés du programme. Pour estimer l'aire sous une courbe positive majorée par M sur [a ; b], on tire au hasard un grand nombre de points dans le rectangle de largeur b − a et de hauteur M, et l'on compte la proportion de ceux qui tombent sous la courbe. Cette proportion estime le rapport entre l'aire cherchée et l'aire du rectangle, d'où une estimation de l'intégrale par proportion × M × (b − a). C'est exactement le raisonnement « fréquence estime probabilité » appliqué à une probabilité géométrique. Sa précision, en revanche, progresse lentement : comme toute estimation par échantillon, elle s'améliore en racine du nombre de tirages, si bien que gagner une décimale demande cent fois plus de points.

Vocabulaire

→ Cartes
  • méthode de Monte-CarloEstimation d'une aire ou d'une probabilité par la proportion de points tirés au hasard qui vérifient une condition.
  • fréquence observéeProportion de succès sur N répétitions ; elle estime la probabilité et se rapproche d'elle quand N grandit.
  • moyenne empiriqueMoyenne des valeurs simulées ; elle estime l'espérance théorique.
  • nombre pseudo-aléatoireValeur produite par random(), uniformément répartie dans [0 ; 1[ et servant de base à toute simulation.

Estimation d'une probabilité par fréquence

P(succeˋs)=p  ⟶  random() < p,p^=nombre de succeˋsN→N→+∞pP(\text{succès}) = p \;\longrightarrow\; \texttt{random() < p}, \qquad \widehat{p} = \frac{\text{nombre de succès}}{N} \xrightarrow[N\to+\infty]{} pP(succeˋs)=p⟶random() < p,p​=Nnombre de succeˋs​N→+∞​p

Le test `random() < p` réussit avec probabilité ppp ; la fréquence des succès sur NNN répétitions estime ppp et s'en rapproche (loi des grands nombres).

Loi binomiale simulée

X∼B(n,p):X=#{succeˋs parmi n tirages},E(X)=npX \sim \mathcal{B}(n, p) : \quad X = \#\{\text{succès parmi } n \text{ tirages}\}, \qquad E(X) = npX∼B(n,p):X=#{succeˋs parmi n tirages},E(X)=np

On simule XXX en comptant les succès de nnn épreuves de Bernoulli ; la moyenne empirique des simulations approche l'espérance npnpnp.

Histogramme d'une simulation de X ∼ B(10 ; 0,5) (1 000 répétitions)

Fig. 9En répétant la simulation de X (nombre de piles sur 10 lancers), l'histogramme des fréquences se concentre autour de E(X) = np = 5 et approche la loi binomiale théorique.
La lecture charge du contenu depuis YouTube (Google).Ouvrir sur YouTube ↗
Exemple corrigé

Simuler une probabilité par fréquence et corriger un programme

On veut estimer la probabilité d'obtenir « au moins un 666 » en lançant un dé équilibré 444 fois. Un élève propose le programme suivant, qui renvoie un résultat manifestement trop faible. ``` from random import randint def estime(N): succes = 0 for i in range(N): six = False for j in range(4): if randint(1, 5) == 6: six = True if six: succes = succes + 1 return succes / N ``` 1. Repérer l'erreur. 2. Corriger le programme et commenter. 3. Donner la probabilité théorique pour valider l'ordre de grandeur attendu.

  1. 01Repérer l'erreur

    Le tirage `randint(1, 5)` ne produit JAMAIS la valeur 666 (les entiers tirés vont de 111 à 555 inclus). La condition `== 6` est donc toujours fausse, `six` reste `False`, et la fonction renvoie toujours 000 : c'est pourquoi le résultat est trop faible (nul).

  2. 02Corriger et commenter

    On simule un vrai dé à six faces avec `randint(1, 6)` (les deux bornes sont incluses) : ``` from random import randint def estime(N): succes = 0 for i in range(N): six = False for j in range(4): if randint(1, 6) == 6: # dé à 6 faces : borne haute = 6 six = True if six: succes = succes + 1 return succes / N ``` La correction porte sur la borne supérieure du `randint`, qui doit valoir 666 pour qu'un 666 puisse sortir.

  3. 03Valider par le calcul théorique

    La probabilité de n'obtenir AUCUN 666 sur 444 lancers est (56)4\left(\frac{5}{6}\right)^4(65​)4 ; donc « au moins un 666 » a pour probabilité son complément.

    P(au moins un 6)=1−(56)4=1−6251296≈0,518P(\text{au moins un } 6) = 1 - \left(\frac{5}{6}\right)^4 = 1 - \frac{625}{1296} \approx 0{,}518P(au moins un 6)=1−(65​)4=1−1296625​≈0,518

Résultat : L'erreur était `randint(1, 5)` au lieu de `randint(1, 6)` (le 666 ne pouvait jamais sortir). Après correction, la fréquence simulée pour NNN grand approche la valeur théorique 1−(5/6)4≈0,5181 - (5/6)^4 \approx 0{,}5181−(5/6)4≈0,518.

Objectif Bac

  • Objectif Bac : écrire une fonction qui simule une expérience aléatoire (lancer, épreuve de Bernoulli, loi binomiale) avec `random()` ou `randint`, répéter NNN fois et renvoyer la FRÉQUENCE d'un événement comme estimation de sa probabilité.
  • Objectif Bac : interpréter une estimation par simulation (fréquence ≈\approx≈ probabilité, moyenne empirique ≈\approx≈ espérance), savoir que la précision croît avec NNN (loi des grands nombres), et repérer/corriger une erreur dans un programme de simulation fourni.
  • Décrire une estimation de Monte-Carlo en trois temps : tirer des points dans un rectangle, compter ceux sous la courbe, multiplier la proportion par l'aire du rectangle.
  • Rappeler que la précision d'une estimation progresse en racine du nombre de tirages : cent fois plus de points pour une décimale de plus.

Erreurs fréquentes

  • Mal traduire la probabilité ppp : pour simuler un succès de probabilité ppp, on teste `random() < p`, et NON `random() < 1 - p` qui simule l'échec (probabilité 1−p1 - p1−p). À noter : comme `random()` renvoie un réel sur [0 ;1[[0\,;1[[0;1[, l'égalité exacte est de probabilité nulle, donc `random() <= p` a la même probabilité ppp que `random() < p` — la vraie distinction utile est `< p` (succès) contre `< 1 - p` (échec). Oublier que `randint(1, 6)` inclut les DEUX bornes est une autre erreur fréquente.
  • Confondre estimation et valeur exacte : une fréquence simulée APPROCHE la probabilité, elle ne la prouve pas et varie d'une exécution à l'autre ; annoncer « la probabilité vaut exactement 0,480{,}480,48 » à partir d'une seule simulation est faux.
  • Annoncer une valeur simulée comme exacte : une estimation varie d'une exécution à l'autre et doit être présentée comme approchée.
  • Attendre d'une simulation qu'elle démontre un résultat : elle l'illustre et en donne l'ordre de grandeur, la démonstration reste mathématique.

§ 05

Révision active

Écrire une fonction `frequence(N)` qui simule NNN lancers de deux dés à six faces (avec `randint`) et renvoie la fréquence de l'événement « la somme des deux dés vaut 777 ». Faire tourner pour N=10 000N = 10\,000N=10000 et comparer à la probabilité théorique 636=16≈0,167\frac{6}{36} = \frac{1}{6} \approx 0{,}167366​=61​≈0,167.

S’entraîner sur des exercices associés50 questions sur ce thème→

Rappel actif

Rappelle-toi les points clés — puis révèle.

Sources : Programme de l'enseignement de spécialité de mathématiques — classe terminale, voie générale (annexe de l'arrêté du 19-7-2019, NOR MENE1921246A) (Ministère de l’Éducation nationale — Bulletin officiel)

Vérifié · 08/2026 · Version complète via le réglage de profondeur — même endroit, mêmes ancres

Sommaire

Section -- / 05

    • 01Bases du langage Python : variables, affectations, conditions, boucles for et while○
    • 02Fonctions et listes : définition, paramètres, valeur de retour, parcours, listes en compréhension◐
    • 03Algorithmes du programme : recherche de seuil, sommes et calcul de termes de suites◐
    • 04Encadrer une solution et approcher une aire : balayage, dichotomie, méthode des rectangles●
    • 05Simulation aléatoire et estimation : module random, fréquences, loi binomiale, lecture et correction d'un programme●

0/5 Lues

Des fiches à l'entraînement

Algorithmique et programmation

Consolide ce thème avec des questions de la banque de questions.

~32
min
4
Compétences
50
questions
S'entraîner
Planifier une révision

Références et sources

Sources

Ministère de l’Éducation nationale — Bulletin officiel

  • Programme de l'enseignement de spécialité de mathématiques — classe terminale, voie générale (annexe de l'arrêté du 19-7-2019, NOR MENE1921246A)

Voir aussi

  • Suites numériquesTermes, sommes et seuils : les trois algorithmes que le programme nomme explicitement.
  • Calcul intégralLa méthode des rectangles, seule voie numérique quand aucune primitive ne s'exprime.
  • Sommes de variables aléatoiresLa simulation d'un échantillon, support expérimental de la loi des grands nombres.

Chapitre précédent

Sommes de variables aléatoires

EuraStudy·Fiches T·14·MMXXVI

Dernier chapitre de cette matière — retour à la vue d’ensemble de la matière.