TERMINALE STMG · OUTILS TRANSVERSAUX

Algorithmique et tableur

Utiliser les outils numériques pour explorer les notions, calculer et contrôler les résultats.

1 Je comprends2 Je vérifie3 Je m’entraîne

À mobiliser toute l’année

Les pratiques algorithmiques et le tableur font partie du programme. Ce repère est à utiliser au fil des chapitres, pas comme une option du programme ni comme une longue séquence préalable.

Les programmes Python 3 ci-dessous sont à copier dans un environnement Python ; le site ne les exécute pas. Le simulateur de fréquences, lui, fonctionne directement dans le navigateur. Les bases de syntaxe restent disponibles dans la ressource de Première.

Besoin d’un coup de pouce ? La méthode en 3 étapes
  1. Identifie les données d’entrée, le résultat attendu et les unités.
  2. Fais un tableau des variables sur un petit exemple.
  3. Teste ensuite les cas limites et compare à un calcul indépendant.

1. Compter et accumuler

Un compteur augmente pour dénombrer des éléments. Un accumulateur mémorise une somme ou un produit. Une somme commence généralement à 0 ; un produit commence à 1.

def somme_carres(n):
    if not isinstance(n, int) or n < 0:
        raise ValueError("n doit etre un entier positif ou nul")
    total = 0
    for k in range(1, n + 1):
        total = total + k * k
    return total

print(somme_carres(4))  # 1 + 4 + 9 + 16 = 30

La borne de fin de range est exclue : range(1,n+1) fournit les entiers de 1 à n. Pour n=0, la boucle ne fait aucun passage et la somme vide vaut 0. Remplacer k*k par k**3 permet d’explorer une somme de cubes ; par 1/k, une somme d’inverses pour k≥1.

2. Respecter l’ordre des instructions

Pour additionner les N premiers termes d’une suite géométrique de premier terme u0, on ajoute d’abord le terme courant, puis on calcule le suivant.

def somme_geometrique(u0, q, N):
    if not isinstance(N, int) or N < 0:
        raise ValueError("N doit etre un entier positif ou nul")
    u = u0
    total = 0
    for _ in range(N):
        total = total + u
        u = q * u
    return total

print(somme_geometrique(100, 0.5, 4))  # 187.5

Après la dernière itération, u contient déjà le terme suivant, qui n’a pas été ajouté. Avec des versements de fin de période, on peut au contraire mettre à jour directement le capital par capital=q*capital+versement.

Pause mémoire · Suivre l’ordre

u=3 et s=0. Deux fois, on fait s=s+u puis u=2*u. Que vaut s à la fin ?

Voir le raisonnement et la réponse

Après un passage, s=3 et u=6. Après deux passages, s=9 et u=12.

3. Construire une ligne du triangle de Pascal

Pour construire la ligne suivante, on conserve des 1 aux extrémités et on additionne les voisins de la ligne précédente. Une nouvelle liste évite d’écraser des valeurs encore utiles.

def pascal(n):
    if not isinstance(n, int) or n < 0:
        raise ValueError("n doit etre un entier positif ou nul")
    ligne = [1]
    for _ in range(n):
        milieu = [ligne[k] + ligne[k + 1]
                  for k in range(len(ligne) - 1)]
        ligne = [1] + milieu + [1]
    return ligne

print(pascal(4))  # [1, 4, 6, 4, 1]

La ligne n possède n+1 éléments et sa somme vaut 2**n. Ces deux propriétés fournissent des tests simples. Le coefficient en position k compte les chemins avec k succès.

4. Simuler une loi binomiale

Un tirage pseudo-aléatoire U uniforme entre 0 et 1 est codé comme un succès lorsque U<p. On compte les succès dans n essais, puis on répète N fois ce groupe d’essais.

from random import random

def distribution_binomiale(n, p, N):
    if not isinstance(n, int) or n < 1:
        raise ValueError("n doit etre un entier strictement positif")
    if not isinstance(N, int) or N < 1 or not 0 <= p <= 1:
        raise ValueError("Verifier N et p")
    effectifs = [0] * (n + 1)
    for _ in range(N):
        succes = 0
        for _ in range(n):
            if random() < p:
                succes = succes + 1
        effectifs[succes] = effectifs[succes] + 1
    return effectifs

print(distribution_binomiale(3, 0.5, 80))

Les sorties changent à chaque exécution. La somme des effectifs doit toujours valoir N. Pour p=0, tous les succès comptés valent 0 ; pour p=1, ils valent n. On peut diviser chaque effectif par N et comparer les fréquences aux probabilités binomiales, puis représenter deux diagrammes en bâtons dans un tableur.

5. Filtrer une liste avec deux conditions

Les listes permettent de travailler sur des données réelles ou fictives. Le mot and exige que les deux conditions soient vraies. Le mot or accepte qu’au moins l’une soit vraie.

valeurs = [2, 5, 6, 8, 11, 12]
retenues = [x for x in valeurs if x > 5 and x % 2 == 0]
print(retenues)       # [6, 8, 12]
print(len(retenues))  # 3
print(sum(retenues))  # 26

Pour un fichier de données, il faut aussi comprendre les en-têtes, les unités, les valeurs manquantes et le champ de la source. La provenance du fichier Insee du site constitue un exemple de documentation à conserver.

6. Utiliser des références de tableur

Une référence relative se décale à la recopie. Une référence absolue, marquée par des dollars, reste fixe.

Une évolution à coefficient constant

B2 contient 100 et E1 contient 1,1. En B3, la formule =B2*$E$1 donne 110. Recopiée vers B4, elle devient =B3*$E$1 et donne 121. B2 évolue, tandis que le coefficient E1 reste fixe.

On peut ajouter une colonne de sommes cumulées et une colonne d’écarts avec une formule explicite. Pour un ajustement statistique, créer d’abord la variable transformée permet de comparer clairement le nuage initial et le nouveau nuage.

Pause mémoire · Recopier sans déplacer le coefficient

Quelle écriture garde E1 fixe dans une formule recopiée ?

Voir le raisonnement et la réponse

$E$1 est une référence absolue : colonne E et ligne 1 sont toutes deux figées.

7. Vérifier sa compréhension

On calcule somme_geometrique(2,3,3). Prévois le résultat sans exécuter le programme, puis vérifie avec la formule du cours.

Afficher la correction

Les trois termes sont 2, 6 et 18 : leur somme vaut 26. La formule donne 2×(3³−1)/(3−1)=26. Après la boucle, le terme suivant vaudrait 54, mais il ne fait pas partie de la somme demandée.

À retenir

Une sortie numérique n’est pas une justification à elle seule. Prévoir un petit cas, suivre les variables et contrôler les cas limites permet de détecter les décalages d’indice et les erreurs de modèle.

Faire les 6 exercices →

La bonne routine pour retenir

Refais demain un tableau de variables. Plus tard, explique l’utilité d’une nouvelle liste pour Pascal et d’une référence absolue dans le tableur.

Programme et sources · Méthodes d’apprentissage