
Corrigé détaillé des exercices du chapitre. Vérifie tes réponses étape par étape et corrige-toi.
1 Lire une boucle for ★★★
- range(1, 6) exclut 6 : k prend les valeurs 1, 2, 3, 4, 5.
- s vaut successivement 1, 5, 14, 30, 55 : le programme affiche 55 (1 + 4 + 9 + 16 + 25 = 55).
- On remplace k * k par k ** 3 :
s = 0 for k in range(1, 6): s = s + k ** 3 print(s)Il affiche 225 (1 + 8 + 27 + 64 + 125 = 225).
2 Définir une fonction ★★★
Programme :
def f(x):
return 3 * x ** 2 - 2 * x + 1
print(f(4), f(-1), f(0.5))
Sortie obtenue :
41 6 0.75
À la main : f(4) = 3 × 16 − 8 + 1 = 41 ; f(−1) = 3 + 2 + 1 = 6 ; f(0,5) = 0,75 − 1 + 1 = 0,75. Les résultats concordent.
return renvoie la valeur à l’endroit où la fonction est appelée (on peut la réutiliser dans un calcul) ; print affiche seulement à l’écran et la fonction ne renvoie alors rien d’exploitable.
3 Manipuler une liste ★★★
Les éléments sont 3, 8, 1, 9, 4, 7. La liste a 6 éléments, de somme 32, de maximum 9 ; L[2] est l’élément d’indice 2, c’est-à-dire le troisième : 1 ; L[-1] est le dernier : 7. La deuxième ligne est la moyenne 32 / 6 ≈ 5,33. La troisième garde les éléments strictement supérieurs à 3 (8, 9, 4, 7) et les double : 16, 18, 8, 14.
6 32 9 1 7 5.333333333333333 [16, 18, 8, 14]
Les indices commencent à 0 : L[0] est le premier élément, L[1] le deuxième, L[2] le troisième.
4 Calculer le terme d’une suite ★★★
- u1 = 3 × 2 − 1 = 5 ; u2 = 3 × 5 − 1 = 14 ; u3 = 3 × 14 − 1 = 41.
- Fonction (la boucle fait n passages) :
def terme(n): u = 2 for i in range(n): u = 3 * u - 1 return u print([terme(n) for n in range(6)])Sortie obtenue :
[2, 5, 14, 41, 122, 365]
- terme(5) renvoie 365. Vérification : la suite (un − 0,5) est géométrique de raison 3 et de premier terme 1,5, donc un = 0,5 + 1,5 × 3n et u5 = 0,5 + 1,5 × 243 = 365.
5 Un premier seuil ★★★
- Baisse de 20 % : coefficient 1 − 0,2 = 0,8.
- Le programme continue tant que la valeur est encore supérieure ou égale à 50 :
n = 0 v = 1000 while v >= 50: v = 0.8 * v n = n + 1 print(n, v)Sortie obtenue :
14 43.980465111040026
Il s’écoule 14 ans : la valeur est alors d’environ 43,98 €. Contrôle : 1 000 × 0,814 ≈ 43,98 < 50 alors que 1 000 × 0,813 ≈ 54,98 ≥ 50.
6 Range et indices ★★★
On rappelle que la borne de fin est exclue.
- list(range(5)) = [0, 1, 2, 3, 4]
- list(range(2, 8)) = [2, 3, 4, 5, 6, 7]
- list(range(1, 10, 3)) = [1, 4, 7] (pas de 3)
- list(range(5, 0, -1)) = [5, 4, 3, 2, 1] (pas de −1, 0 exclu)
7 Simuler des lancers de pièce ★★★
- Il simule 20 lancers indépendants d’une pièce équilibrée (1 pour face, 0 pour pile) et compte les faces ; le nombre de faces suit la loi binomiale B(20 ; 0,5).
- Le hasard fait fluctuer le résultat : l’espérance vaut 20 × 0,5 = 10, mais le nombre observé s’écarte de 10 en général. Avec la graine choisie, voici la sortie :
6 0.3
- La graine fixe la suite de nombres pseudo-aléatoires : le programme redonne le même résultat à chaque exécution, ce qui permet de le tester.
8 Suite convergente et précision ★★★
- ℓ = 0,5ℓ + 3 donne 0,5ℓ = 3, donc ℓ = 6. Pour tout n, un+1 − 6 = 0,5un − 3 = 0,5 × (un − 6) : la suite (un − 6) est géométrique de raison 0,5 et de premier terme 14.
-
u = 20 n = 0 while u - 6 >= 0.01: u = 0.5 * u + 3 n = n + 1 print(n, u)Sortie obtenue :
11 6.0068359375
Le programme affiche n = 11.
- un − 6 = 14 × 0,5n < 0,01 équivaut à 0,5n < 1/1400, soit n > ln(1400) / ln(2) ≈ 10,45. Le plus petit entier est n = 11, comme dans le programme.
9 Doubler un capital ★★★
Chaque année, le capital est multiplié par 1,03 :
capital = 5000
annees = 0
while capital < 10000:
capital = capital * 1.03
annees = annees + 1
print(annees, capital)
Sortie obtenue :
24 10163.970532302023
Il faut 24 ans (capital ≈ 10163,97 €). Par le calcul : 5 000 × 1,03n ≥ 10 000 équivaut à 1,03n ≥ 2, donc n ≥ ln 2 / ln 1,03 ≈ 23,45, soit n = 24.
10 Somme des inverses des carrés ★★★
s = 0
n = 0
while s <= 1.6:
n = n + 1
s = s + 1 / n ** 2
print(n, s)
Sortie obtenue :
22 1.6004969333116477
Le plus petit n est 22, avec S22 ≈ 1,6005. La suite (Sn) est croissante (on ajoute un terme positif) et converge vers environ 1,645 > 1,6 : le seuil 1,6 est donc franchi et la boucle s’arrête. Un seuil de 1,7, supérieur à la limite, aurait produit une boucle infinie.
11 Dichotomie à la main ★★★
- f est continue et strictement croissante sur [2 ; 3] (f′(x) = 2x > 0), avec f(2) = −1 < 0 et f(3) = 4 > 0 : d’après le théorème des valeurs intermédiaires (cas strictement monotone), l’équation f(x) = 0 a une unique solution, qui est √5.
- On garde chaque fois la moitié où f change de signe :
Étape a b m f(m) 1 2,000 3,000 2,500 1,2500 2 2,000 2,500 2,250 0,0625 3 2,000 2,250 2,125 -0,4844 - Après la 3e étape, √5 ∈ [2,125 ; 2,250], amplitude 0,125. (Valeur exacte √5 ≈ 2,2361, cohérent.)
- Après k étapes, l’amplitude vaut 1 / 2k. 1 / 213 ≈ 0,000122 ≥ 10−4 et 1 / 214 ≈ 0,000061 < 10−4 : il faut 14 étapes.
12 Quatre rectangles à la main ★★★
- h = (1 − 0) / 4 = 0,25.
- Les abscisses sont 0 ; 0,25 ; 0,5 ; 0,75 ; 1. La fonction x² est croissante, donc sous la courbe on prend l’extrémité gauche : 0,25 × (0 + 0,0625 + 0,25 + 0,5625) = 0,25 × 0,875 = 0,21875. Au-dessus, l’extrémité droite : 0,25 × (0,0625 + 0,25 + 0,5625 + 1) = 0,25 × 1,875 = 0,46875.
- 0,21875 ≤ I ≤ 0,46875, et 0,21875 ≤ 1/3 ≈ 0,3333 ≤ 0,46875.
- Écart : 0,46875 − 0,21875 = 0,25 = h × (f(1) − f(0)). Pour avoir h × 1 < 0,001, il faut 1 / n < 0,001, donc n > 1000, soit n = 1001 au minimum (n = 1000 donne un écart égal à 0,001, donc pas strictement inférieur).
13 Compter des couples ★★★
nb = 0
for a in range(1, 7):
for b in range(1, 7):
if a + b == 7:
nb = nb + 1
print(nb, nb / 36)
Sortie obtenue :
6 0.16666666666666666
Il y a 6 couples sur 36 : (1 ; 6), (2 ; 5), (3 ; 4), (4 ; 3), (5 ; 2), (6 ; 1). Raisonnement direct : le dé rouge donne n’importe quelle valeur a (6 choix) et il existe alors exactement un b = 7 − a entre 1 et 6 ; donc 6 cas favorables sur 36 et P = 1/6 ≈ 0,1667.
14 Fréquence et probabilité ★★★
- La fréquence de l’événement « la somme des deux dés vaut 7 » sur 5 000 expériences.
- La sortie est
0.1654
à comparer à 1/6 ≈ 0,1667 : les deux valeurs sont proches, la différence est due aux fluctuations.
- L’écart type de la fréquence vaut √(p(1 − p) / N) = √((1/6) × (5/6) / 5000) ≈ 0,0053. On s’attend donc à un écart de l’ordre de quelques millièmes (avec une probabilité d’environ 0,95, de moins de 2 × 0,0053).
15 Newton pour une racine carrée ★★★
- f′(x) = 2x, donc xn+1 = xn − (xn² − 7) / (2xn) = (2xn² − xn² + 7) / (2xn) = (xn + 7 / xn) / 2.
- x1 = (3 + 7/3) / 2 = 83 = 2,666… ; x2 = (83 + 21/8) / 2 = 12748 ≈ 2,6458.
-
x = 3 for i in range(1, 4): x = (x + 7 / x) / 2 print(i, x) print(7 ** 0.5)Sortie obtenue :
1 2.666666666666667 2 2.645833333333333 3 2.6457513123359577 2.6457513110645907
x3 est déjà égal à √7 à 10−6 près : la convergence est très rapide.
16 Newton sur une équation du troisième degré ★★★
- f est dérivable sur ℝ avec f′(x) = 3x² + 2 > 0 : f est strictement croissante, continue, de limites −∞ et +∞ ; elle s’annule donc exactement une fois. Comme f(1) = −2 < 0 et f(2) = 7 > 0, α ∈ [1 ; 2].
- La suite de Newton est xn+1 = xn − f(xn) / f′(xn) ; f′ ne s’annule jamais, aucune division par zéro.
def f(x): return x ** 3 + 2 * x - 5 def fp(x): return 3 * x ** 2 + 2 x = 1.5 n = 0 while abs(f(x)) > 1e-12: x = x - f(x) / fp(x) n = n + 1 print(n, x)Sortie obtenue :
4 1.3282688556686084
- Le programme s’arrête au bout de 4 itérations avec α ≈ 1,328269. Vérification : f(α) ≈ 0.
17 Dichotomie et exponentielle ★★★
- f est continue et dérivable sur [0 ; 2], f′(x) = ex + 1 > 0 : f est strictement croissante. f(0) = 1 + 0 − 3 = −2 < 0 et f(2) = e² − 1 ≈ 6,39 > 0. Le théorème des valeurs intermédiaires (fonction strictement monotone) donne une unique solution α ∈ [0 ; 2].
-
from math import exp def f(x): return exp(x) + x - 3 a, b = 0, 2 etapes = 0 while b - a > 1e-6: m = (a + b) / 2 if f(a) * f(m) <= 0: b = m else: a = m etapes = etapes + 1 print(a, b, etapes)Sortie obtenue :
0.7920598983764648 0.7920608520507812 21
Donc α ≈ 0,792060.
- (b − a) / e = 2 / 10−6 = 2 × 106. Comme 220 = 1 048 576 < 2 × 106 < 221 = 2 097 152, il faut 21 étapes, ce que le programme confirme (dernier nombre : 21).
18 Estimer ln 2 par les rectangles ★★★
- Avec h = 1/n et xk = 1 + k/n, la fonction étant décroissante, le rectangle de hauteur f(xk+1) est sous la courbe : le minorant est h × [f(x1) + … + f(xn)] et le majorant h × [f(x0) + … + f(xn−1)].
- La différence est h × (f(x0) − f(xn)) (les autres termes se simplifient) = (1/n) × (1 − 1/2) = 1 / (2n).
- 1 / (2n) < 0,001 équivaut à n > 500, soit n = 501 au minimum. Avec n = 500 :
def rect_dec(f, a, b, n): h = (b - a) / n haut = sum(f(a + k * h) for k in range(n)) bas = sum(f(a + (k + 1) * h) for k in range(n)) return h * bas, h * haut print(rect_dec(lambda x: 1 / x, 1, 2, 500))Sortie obtenue :
(0.6926474305598204, 0.6936474305598204)
Le programme donne un encadrement de ln 2 : (0.6926474305598204, 0.6936474305598204) (ln 2 ≈ 0,693147), d’écart 0,001.
19 Seuil de probabilité ★★★
- L’événement contraire est « aucun succès » de probabilité 0,7n : la probabilité cherchée est 1 − 0,7n.
-
n = 0 p = 1 while 1 - p < 0.99: n = n + 1 p = p * 0.7 print(n, 1 - p)Sortie obtenue :
13 0.9903110989593
Il faut n = 13 tirs.
- 1 − 0,7n ≥ 0,99 équivaut à 0,7n ≤ 0,01. Comme ln 0,7 < 0, on obtient n ≥ ln(0,01) / ln(0,7) ≈ 12,91, donc n = 13. (Contrôle : 0,712 ≈ 0,0138 > 0,01 et 0,713 ≈ 0,0097.)
20 Estimer π par Monte-Carlo ★★★
- L’aire du carré vaut 1 et celle du quart de disque π × 1² / 4 : la probabilité est π / 4.
- Le programme compte les points tels que x² + y² ≤ 1 (dans le quart de disque) ; la fréquence tend vers π / 4, donc 4 × fréquence ≈ π. Sortie :
3.1348
- Pour la fréquence, l’écart type est √(p(1 − p) / N) avec p = π / 4 ≈ 0,785 : environ 0,0013, ce qui donne pour 4 × fréquence une précision de l’ordre de 0,0052 (deux décimales justes environ). Pour gagner une décimale, il faut diviser l’écart par 10, donc multiplier N par 100 : 10 millions de points.
21 Arrangements et combinaisons ★★★
- Première ligne : on forme des mots de 4 lettres distinctes avec A, B, C, D, E (l’ordre compte) : 5 × 4 × 3 × 2 = 120. Deuxième ligne : mains de 5 cartes dans un jeu de 32, l’ordre ne comptant pas : C(32, 5) = 32 × 31 × 30 × 29 × 28 / 120 = 201 376. Troisième ligne : C(5, 3) = 10 (le programme le recalcule en listant les 10 sous-ensembles de 3 lettres).
- Sortie obtenue :
120 201376 10 10
Lister les 201 376 mains consommerait de la mémoire et du temps pour rien : on n’a besoin que du nombre, que comb donne immédiatement.
22 Loi binomiale par programme ★★★
- P(X = k) = C(n, k) × pk × (1 − p)n−k.
- Programme :
from math import comb def binom(n, p, k): return comb(n, k) * p ** k * (1 - p) ** (n - k) print(binom(10, 0.3, 3)) print(sum(binom(10, 0.3, k) for k in range(3))) print(1 - sum(binom(10, 0.3, k) for k in range(2)))Sortie obtenue :
0.2668279319999998 0.3827827863999998 0.8506916541
On lit P(X = 3) ≈ 0,2668 ; P(X ≤ 2) ≈ 0,3828 (somme de k = 0, 1, 2) ; P(X ≥ 2) = 1 − P(X ≤ 1) ≈ 0,8507.
- E(X) = 10 × 0,3 = 3. En programmant sum(k * binom(10, 0.3, k) for k in range(11)), on obtient 3,0000 : la valeur attendue.
23 Problème : un parc de vélos ★★★
- Retirer 10 % revient à multiplier par 0,9, puis on ajoute 80 : un+1 = 0,9un + 80.
- vn+1 = 0,9un + 80 − 800 = 0,9un − 720 = 0,9 × (un − 800) = 0,9vn. La suite (vn) est géométrique de raison 0,9 et de premier terme v0 = 200. Donc un = 800 + 200 × 0,9n. Comme 0 < 0,9 < 1, 0,9n tend vers 0 et la limite est 800.
-
u = 1000 n = 0 while u >= 810: u = 0.9 * u + 80 n = n + 1 print(n, u)Sortie obtenue :
29 809.4202573944928
Il faut n = 29 : c’est en 2054 qu’il y aura moins de 810 vélos (u29 ≈ 809,42). Contrôle : 200 × 0,9n < 10 équivaut à 0,9n < 0,05, soit n > 28,43.
