Algorithmique Terminale – Chapitre 3 : sommes et produits de termes (Python et TI-82)

Introduction

Ce troisième chapitre est consacré au calcul de sommes et de produits de termes, une question très fréquente au bac. La méthode repose sur la variable accumulateur : on initialise S à 0 (ou P à 1), puis on ajoute (ou on multiplie) le terme courant à chaque tour de boucle.

Quatre packs illustrent la méthode : la somme des termes d’une suite récurrente (avec contrôle par la formule d’une somme géométrique), une somme explicite qui permet d’approcher π, un produit et une somme de factorielles pour approcher le nombre e, et une suite définie par une somme.

Les programmes sont donnés en algorithme, en Python et sur TI-82, avec les erreurs classiques à éviter (ordre des lignes, nombre de tours de boucle) et sept exercices d’entraînement.

Chapitre précédent : chapitre 2 – calculer les termes d’une suite · chapitre suivant : chapitre 4 – rechercher un seuil. Retrouvez tous les chapitres dans la rubrique Algorithmique et Python.

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

Méthode : la variable « accumulateur »

Pour calculer S=a_1+a_2+\dots+a_n, on utilise une variable S que l’on initialise à 0, puis, à chaque tour de boucle, on lui ajoute le terme courant : S\leftarrow S+a_k. Pour un produit P=a_1\times a_2\times\dots\times a_n, on initialise P à 1 et on fait P\leftarrow P\times a_k.

1. Sommes de termes

Pack 1 – somme des termes d’une suite récurrente

On calcule S_n=u_0+u_1+\dots+u_n avec u_0=3 et u_{n+1}=2u_n.

Algorithme

Saisir n
u ← 3 ; S ← 0
Pour k allant de 0 à n
    S ← S + u
    u ← 2u
Fin Pour
Afficher S

Python

def somme(n):
    u = 3
    S = 0
    for k in range(n+1):
        S = S + u
        u = 2*u
    return S

TI-82

:Prompt N
:3→U
:0→S
:Pour(K,0,N)
:S+U→S
:2U→U
:Fin
:Disp S

Ordre des lignes : on ajoute d’abord le terme courant u_k à S, puis on passe au terme suivant. La boucle fait n+1 tours car la somme contient n+1 termes (u_0 à u_n).

Tableau d’exécution :

k012345
u (avant)3612244896
S (après)39214593189

Essai : somme(5) renvoie 189. Contrôle par la formule : S_5=3\times\dfrac{2^6-1}{2-1}=3\times 63=189. ✓

Pack 2 – somme d’une suite explicite et approximation de \pi

On calcule S_n=\dfrac{1}{1^2}+\dfrac{1}{2^2}+\dots+\dfrac{1}{n^2}.

Algorithme

Saisir n
S ← 0
Pour k allant de 1 à n
    S ← S + 1/k²
Fin Pour
Afficher S

Python

def carres(n):
    s = 0
    for k in range(1, n+1):
        s = s + 1/k**2
    return s

TI-82

:Prompt N
:0→S
:Pour(K,1,N)
:S+1/K^2→S
:Fin
:Disp S

En une ligne : sum([1/k**2 for k in range(1, n+1)]) (liste en compréhension).

Résultats : S_{10}\approx 1{,}549\,8 et S_{1000}\approx 1{,}643\,9. On admet que S_n tend vers \dfrac{\pi^2}{6}\approx 1{,}644\,9 : ainsi \sqrt{6\,S_{1000}}\approx 3{,}140\,6 est une valeur approchée de \pi.

Astuce TI sans programme

somme(suite(1/K^2,K,1,10)) (somme( et suite( se trouvent dans le menu 2nde stats LISTES, onglets MATH et OPS).

2. Produits

Pack 3 – un produit et le nombre \mathrm{e}

On utilise \mathrm{e}\approx 1+\dfrac{1}{1!}+\dfrac{1}{2!}+\dots+\dfrac{1}{n!} où k!=1\times 2\times\dots\times k.

Algorithme

Saisir n
S ← 1 (le terme 1/0!)
f ← 1 (contiendra k!)
Pour k allant de 1 à n
    f ← f × k
    S ← S + 1/f
Fin Pour
Afficher S

Python

def approx_e(n):
    S = 1
    f = 1
    for k in range(1, n+1):
        f = f*k
        S = S + 1/f
    return S

TI-82

:Prompt N
:1→S
:1→F
:Pour(K,1,N)
:F*K→F
:S+1/F→S
:Fin
:Disp S

On ne recalcule pas k! à chaque tour : on passe de (k-1)! à k! en multipliant par k (accumulateur produit, initialisé à 1).

Résultats : approx_e(5) \approx 2{,}716\,67 ; approx_e(10) \approx 2{,}718\,281\,8 ; à comparer à \mathrm{e}\approx 2{,}718\,281\,83 (touche 2nde ln).

3. Une suite définie par une somme

Pack 4 – le terme ajouté dépend de k et de n

On considère S_n=\dfrac{1}{n+1}+\dfrac{1}{n+2}+\dots+\dfrac{1}{2n}=\displaystyle\sum_{k=1}^{n}\dfrac{1}{n+k}.

Algorithme

Saisir n
S ← 0
Pour k allant de 1 à n
    S ← S + 1/(n + k)
Fin Pour
Afficher S

Python

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

[S(n) for n in range(1, 6)]

TI-82

:Prompt N
:0→S
:Pour(K,1,N)
:S+1/(N+K)→S
:Fin
:Disp S

Attention

Ici le terme ajouté dépend à la fois de k (le compteur) et de n (fixé pendant toute la boucle). Quand n change, toute la somme change : on ne peut pas passer de S_n à S_{n+1} en ajoutant un seul terme.

Résultats : la liste vaut environ [0.5, 0.5833, 0.6167, 0.6345, 0.6456] ; S_{10}\approx 0{,}668\,8, S_{100}\approx 0{,}690\,7, S_{1000}\approx 0{,}692\,9. La suite semble croissante et converger vers \ln 2\approx 0{,}693\,1.

Les erreurs classiques

  • Oublier d’initialiser S à 0 (ou P à 1), ou l’initialiser dans la boucle : la somme repart de zéro à chaque tour.
  • Se tromper sur le nombre de termes : de u_0 à u_n, il y en a n+1 (range(n+1), TI : Pour(K,0,N)).
  • Inverser les deux lignes de la boucle : on additionne alors u_1+\dots+u_{n+1}.

4. À vous de jouer

Exercice 1 · À vous de jouer ★★★

Algorithme + Python + TI-82.

  1. Calculer 1+2+\dots+100 avec une boucle, puis en une ligne avec sum et range.
  2. Calculer T_n=\displaystyle\sum_{k=0}^{n}(2k+1) pour n=10. Conjecturer une formule.
  3. Calculer le produit P_n=\left(1+\dfrac{1}{1}\right)\left(1+\dfrac{1}{2}\right)\cdots\left(1+\dfrac{1}{n}\right) pour n=10. Conjecturer, puis démontrer.
  4. Calculer \displaystyle\sum_{k=1}^{10}\dfrac{1}{k(k+1)} et comparer avec \dfrac{10}{11}.
  5. Pour u_0=2 et u_{n+1}=0{,}5\,u_n+3 (chapitre 2), calculer u_0+u_1+\dots+u_4.
  6. Calculer le produit des 5 premiers entiers impairs 1\times 3\times 5\times 7\times 9 à l’aide d’une boucle.
  7. Écrire une fonction Python somme_liste(L) qui renvoie la somme des éléments d’une liste L sans utiliser sum, à l’aide de for x in L:. Sur la TI, que fait somme(L1) ?
Corrigé

1. 5 050 ; sum(range(1, 101)).

2. T_{10}=121=11^2.

⇝ T_n=(n+1)^2

3. P_{10}=11 : produit télescopique \dfrac{2}{1}\times\dfrac{3}{2}\times\dots\times\dfrac{n+1}{n}.

⇝ P_n=n+1

4. \approx 0{,}909\,09=\dfrac{10}{11} (somme télescopique).

5. 2+4+5+5{,}5+5{,}75=22{,}25.

6. 945 (initialiser P à 1, puis P\leftarrow P\times(2k-1) pour k de 1 à 5).

7. S = 0, puis for x in L: S = S + x, puis return S ; somme(L1) renvoie directement la somme des éléments de la liste L1.


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