Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 818 minIntermédiaire

Algorithme de seuil : à partir de quel rang ? (Python, calculatrice, tableur)

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • trouver un seuil avec la table de la calculatrice ou avec un tableur ;
  • écrire, compléter et tracer un algorithme de seuil avec une boucle « tant que » ;
  • programmer une fonction de seuil en Python ;
  • résoudre une inéquation avec le logarithme et justifier le rang trouvé ;
  • éviter les erreurs de condition, d'initialisation et de rang.

5 exercices corrigés1 schéma

Un algorithme de seuil calcule les termes d'une suite les uns après les autres, tant qu'une condition n'est pas atteinte, et renvoie le premier rang n pour lequel uₙ dépasse (ou passe sous) une valeur donnée. Il répond à la question la plus fréquente des sujets : « à partir de quelle année… ? ». Ce chapitre montre les quatre façons d'y répondre, la table de la calculatrice, le tableur, la boucle « tant que » en pseudo-code et en Python, et le calcul avec le logarithme, puis les pièges qui coûtent des points.

Le problème du seuil

Le pool tank du NAS de Sorbier Logistique contient 9 TiB d'archives, qui augmentent de 25 % par an, plus 4,3 TiB d'autres données stables. Le seuil de remplissage du pool est de 22,56 TiB (cours TrueNAS) : les archives ne doivent pas dépasser 22,56 − 4,3 = 18,26 TiB. À partir de quelle année les archives dépassent-elles 18,26 TiB ?

Les archives forment la suite géométrique uₙ = 9 × 1,25ⁿ, où n est le nombre d'années depuis 2026. On cherche le plus petit entier n tel que uₙ > 18,26. Comme la suite est croissante, une fois le seuil franchi, tous les termes suivants le dépassent aussi : on cherche le premier rang qui convient.

Avec la calculatrice : la table de la suite

Les calculatrices graphiques courantes ont un menu dédié aux suites, qui affiche la table des termes. Voici les étapes sur trois modèles répandus.

TI-83 Premium CE Edition Python

  1. Appuie sur mode, descends à la ligne FONCTION PARAMÉTRIQUE POLAIRE SUITE (la cinquième), sélectionne SUITE avec les flèches et valide avec entrer. Quitte avec 2nde mode.
  2. Appuie sur f(x). Sur la ligne TYPE, laisse SUITE(n). Règle nMin=0, puis saisis u(n)=1.25*u(n-1) (u s'obtient avec 2nde 7, n avec la touche X,T,θ,n) et u(nMin)=9.
  3. Appuie sur 2nde fenêtre (déf table) : départ à 0, pas de 1.
  4. Appuie sur 2nde graphe (table) et descends dans la colonne u(n) jusqu'au premier terme supérieur à 18,26.

Casio Graph 90+E

  1. Dans le menu principal, ouvre le menu Récurrence (touche 8).
  2. Appuie sur F3 (TYPE), puis F2 (an+1) pour une relation de récurrence.
  3. Saisis la relation a(n+1)=1.25×an : la variable aₙ s'obtient avec F4 (n.an…) puis F2 (an). Valide avec EXE.
  4. Appuie sur F5 (SET) : premier terme a0 = 9, valeur de départ 0, valeur de fin 10. Valide.
  5. Appuie sur F6 (TABL) : la table des termes s'affiche.

Sur Graph 35+E II, le menu s'appelle RECUR et les touches sont les mêmes.

Casio Graph Math+

  1. Ouvre le menu 7 Suites.
  2. Dans Configuration > Type, choisis Un+1 (récurrence).
  3. Saisis la relation et le premier terme ; les variables n et Un s'obtiennent avec la touche CATALOG, rubrique Suites. Valide avec Exécuter.
  4. Ouvre l'onglet Table.

Sur les trois modèles, la table donne : u₃ ≈ 17,58 et u₄ ≈ 21,97. Le seuil est franchi au rang 4, soit en 2030.

Avec le tableur

Dans LibreOffice Calc ou Excel :

AB
1nuₙ
209
3=A2+1=B2*1,25
4=A3+1=B3*1,25
  1. Écris les en-têtes, puis 0 en A2 et le premier terme 9 en B2.
  2. En A3, =A2+1 ; en B3, la relation de récurrence =B2*1,25.
  3. Sélectionne A3:B3 et recopie vers le bas avec la poignée de recopie : chaque ligne calcule le terme suivant à partir de celui du dessus.
  4. Lis le premier rang dont la valeur dépasse 18,26.

Pour une suite explicite, écris directement en B2 =9*1,25^A2 et recopie vers le bas. Pour faire apparaître le seuil, ajoute en C2 =SI(B2>18,26;"dépassé";"") et recopie : le premier « dépassé » donne la réponse. Pour une somme cumulée, mets =B2 en C2, puis =C2+B3 en C3, et recopie.

Avec un algorithme : la boucle « tant que »

On ne sait pas à l'avance combien de termes il faudra calculer : c'est le cas typique de la boucle TantQue (while en Python). Le principe :

u ← 9n ← 0u ≤ 18,26 ?vrai : on continueu ← 1,25 × un ← n + 1toursuivantfaux : on sortafficher nici : n = 4
La boucle de seuil : on calcule le terme suivant tant que le seuil n'est pas dépassé, puis on renvoie le rang atteint

En pseudo-code, dans les conventions du cours d'algorithmique :

text
Algorithme SeuilArchives
// Rôle : premier rang n tel que uₙ = 9 × 1,25ⁿ dépasse 18,26
// Sortie : n, le rang cherché
Variables
    u : réel
    n : entier
Début
    u ← 9
    n ← 0
    TantQue u ≤ 18,26 Faire
        u ← 1,25 × u
        n ← n + 1
    FinTantQue
    Afficher(n)
Fin

En Python :

python
u = 9          # u0, en TiB
n = 0
while u <= 18.26:
    u = 1.25 * u
    n = n + 1
print(n, u)    # 4 21.97265625

La boucle fait 4 tours ; à la sortie, n vaut 4 et u vaut u₄ ≈ 21,97. Pour vérifier qu'un algorithme est juste, fais sa trace : la valeur des variables à chaque test.

Test n°unu ≤ 18,26 ?Action
190VraiOn calcule le terme suivant
211,251VraiOn continue
314,06252VraiOn continue
417,5781253VraiOn continue
521,972656254FauxOn sort et on affiche 4

Le même modèle pour toutes les suites. Seules l'initialisation, la condition et la mise à jour changent :

QuestionInitialisationCondition pour continuerMise à jour
Archives : premier rang où uₙ > 18,26u = 9u <= 18.26u = 1.25 * u
Abonnés : premier rang où aₙ ≥ 1 450a = 1000a < 1450a = 0.8 * a + 300
Portable : premier rang où vₙ < 100v = 1200v >= 100v = 0.7 * v
Budget : premier rang où le total cumulé dépasse 100 000c = 18000, total = 0total <= 100000total = total + c puis c = 1.06 * c

Pour les abonnés, la boucle renvoie 11, comme le calcul du chapitre 7. Pour le budget des licences, elle renvoie 5 : le total dépasse 100 000 € au cours de la cinquième année (101 467,67 €).

En fonction. Pour réutiliser l'algorithme, écris une fonction qui prend les données en paramètres :

python
def seuil_geometrique(u0, q, s):
    """Premier rang n tel que u0 * q**n > s (avec u0 > 0 et q > 1)."""
    u = u0
    n = 0
    while u <= s:
        u = u * q
        n = n + 1
    return n

print(seuil_geometrique(9, 1.25, 18.26))   # 4
print(seuil_geometrique(45, 1.12, 80))     # 6

Le second appel répond à la question du lien Lyon – Marseille : le trafic de pointe (45 Mbit/s, + 12 % par an) dépasse 80 Mbit/s au rang 6, en 2032.

Avec le calcul : l'inéquation et le logarithme

Pour une suite arithmétique, on résout une inéquation du premier degré (chapitre 2).

Pour une suite géométrique, l'inconnue est en exposant : 9 × 1,25ⁿ > 18,26 ⟺ 1,25ⁿ > 2,0289. On la fait descendre avec le logarithme népérien ln, la fonction de la touche ln de la calculatrice, qui transforme les puissances en produits : ln(qⁿ) = n × ln(q).

text
1,25ⁿ > 2,0289
n × ln(1,25) > ln(2,0289)      (ln est croissante, l'inégalité se conserve)
n > ln(2,0289) / ln(1,25)      (ln(1,25) > 0, l'inégalité se conserve)
n > 3,17

Le plus petit entier qui convient est n = 4.

Le logarithme appartient au module « Fonctions d'une variable réelle » de l'EF2 : le cours Fonctions et intégrales le présente en détail. À l'examen, la méthode par l'algorithme ou par la table suffit souvent ; la question précise la méthode attendue.

Les pièges qui coûtent des points

PiègeSymptômeCorrection
Condition de la boucle à l'enverswhile u > 18.26 ne fait aucun tour et renvoie 0Écrire la condition pour continuer : le contraire du but
Inégalité stricte ou large« dépasse » (>) traité comme « atteint » (≥)Relire l'énoncé : avec while v < 900, on obtient le premier rang où v ≥ 900
Rang et année confondus« n = 4 » laissé sans conclusionConclure avec les mots de l'énoncé : « en 2030 », « au bout de 4 ans »
Seuil jamais atteintLe programme tourne sans finVérifier avec la limite que le seuil est atteignable (chapitre 6)
Mise à jour oubliée ou dans le mauvais ordren augmente mais pas u, ou le total ajoute le terme suivant au lieu de l'actuelFaire la trace sur les deux premiers tours
Initialisation au mauvais rangn = 1 alors que u₀ est la valeur de départLe couple (u, n) doit toujours correspondre : u contient uₙ

Exercices

Exercice 1 sur 5 Compléter un algorithme Réussi À revoir

Un serveur vaut 500 € de valeur de revente et perd 15 % de sa valeur chaque année. On veut savoir au bout de combien d'années il vaudra moins de 100 €. Complète l'algorithme, puis donne sa réponse.

text
u ← 500
n ← 0
TantQue ........ Faire
    u ← ........
    n ← ........
FinTantQue
Afficher(n)
Voir la réponseMasquer la réponse de l'exercice 1

On cherche u < 100, donc on continue tant que u ≥ 100 ; la mise à jour est u ← 0,85 × u (perdre 15 %, c'est multiplier par 0,85) et n ← n + 1.

python
u = 500
n = 0
while u >= 100:
    u = 0.85 * u
    n = n + 1
print(n)    # 10

L'algorithme affiche 10 : au bout de 10 ans, le serveur vaut 500 × 0,85¹⁰ ≈ 98,44 €. Au bout de 9 ans, il valait encore 500 × 0,85⁹ ≈ 115,81 €.

Tu avais trouvé ?

Exercice 2 sur 5 Faire la trace Réussi À revoir

Fais la trace de cet algorithme et donne ce qu'il affiche.

python
u = 2
n = 0
while u < 50:
    u = 3 * u - 1
    n = n + 1
print(n, u)
Voir la réponseMasquer la réponse de l'exercice 2
Testunu < 50 ?
120Vrai
251Vrai
3142Vrai
4413Vrai
51224Faux

Le programme affiche 4 122 : u₄ = 122 est le premier terme de la suite u₀ = 2, uₙ₊₁ = 3uₙ − 1 qui atteint ou dépasse 50.

Tu avais trouvé ?

Exercice 3 sur 5 Trouver l'erreur Réussi À revoir

Pour savoir quand le serveur de journaux (180 Gio, + 12 Gio par jour) atteindra 900 Gio, un étudiant écrit :

python
v = 180
n = 1
while v > 900:
    v = v + 12
    n = n + 1
print(n)

Il obtient 1. Trouve les deux erreurs et corrige le programme.

Voir la réponseMasquer la réponse de l'exercice 3
  1. La condition est à l'envers : 180 > 900 est faux dès le premier test, la boucle ne tourne pas. On continue tant que le seuil n'est pas atteint : while v < 900.
  2. L'initialisation est décalée : v = 180 est la valeur au jour 0, donc n = 0. Avec n = 1, le résultat serait trop grand d'une unité.
python
v = 180
n = 0
while v < 900:
    v = v + 12
    n = n + 1
print(n)    # 60

Le programme affiche 60, comme la résolution de 180 + 12n ≥ 900 au chapitre 2.

Tu avais trouvé ?

Exercice 4 sur 5 Une fonction de seuil pour les sommes Réussi À revoir

Écris une fonction annees_budget(c0, q, budget) qui renvoie le nombre d'années au bout duquel le coût cumulé d'un contrat (c0 la première année, multiplié par q chaque année) dépasse budget. Teste-la avec le budget des licences : 18 000 €, + 6 % par an, budget de 100 000 €.

Voir la réponseMasquer la réponse de l'exercice 4
python
def annees_budget(c0, q, budget):
    c = c0          # coût de l'année en cours
    total = 0
    annees = 0
    while total <= budget:
        total = total + c
        c = c * q
        annees = annees + 1
    return annees

print(annees_budget(18000, 1.06, 100000))   # 5

La fonction renvoie 5 : sur quatre ans, le cumul vaut 78 743,09 € ; sur cinq ans, 101 467,67 €. On ajoute le coût de l'année avant de passer à l'année suivante, sinon le premier coût serait oublié.

Tu avais trouvé ?

Exercice 5 sur 5 Au tableur Réussi À revoir

Pour la liste de diffusion (a₀ = 1 000, aₙ₊₁ = 0,8aₙ + 300), quelles formules écris-tu en A3 et B3 pour obtenir la table, et dans quelle ligne lis-tu le premier rang où aₙ ≥ 1 450 ?

Voir la réponseMasquer la réponse de l'exercice 5

En A2 : 0 ; en B2 : 1000 ; en A3 : =A2+1 ; en B3 : =0,8*B2+300. On recopie A3:B3 vers le bas. Le rang 0 est en ligne 2, donc le rang n est en ligne n + 2 : la valeur 1 457,05 du rang 11 apparaît en ligne 13, première valeur supérieure ou égale à 1 450 (la ligne 12, rang 10, affiche 1 446,31).

Tu avais trouvé ?

Chapitre terminé !

Fais les 5 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Les suites en informatique : complexité, stockage, traficRevoir le sommaire du cours