Algorithmique Programmation
2NDE • MATHS — Learna
Track your progress
Log in to save progress and quiz attempts.

✏️ Exercices — Algorithmique & programmation (Python)

Thèmes : variables • affectation • tests • boucles • Python • simulation numérique/statistique.
Objectif : raisonner (traces, invariants, pièges de types), écrire des algorithmes propres, et relier simulation ↔ théorie.

Exercice 1 — Variables, types, conversions — pièges de input()
2nde

Consigne. On exécute ce script :

age = input("Âge ? ")
x = input("Nombre réel ? ")
print(age + 1)
print(x * 2)
  1. (a) Expliquer précisément l’erreur (ou le comportement) de print(age + 1).
  2. (b) Si l’utilisateur tape age = 17, que donne print(x * 2) si x = 3.5 ? (Justifier.)
  3. (c) Corriger le script pour qu’il affiche age+1 et 2x comme des nombres.
  4. (d) Donner un exemple d’entrée pour laquelle la conversion int(...) échoue, et expliquer pourquoi.
Exercice 2 — Affectation, priorité, // et % — lecture de trace
2nde

Consigne. On pose a=17, b=5. Calculer exactement :

  1. (a) \(a + b * 2\) puis \((a+b)*2\).
  2. (b) a / b, a // b, a % b et interpréter (division euclidienne).
  3. (c) On exécute : a = a + b; b = a - b; a = a - b. Quelles valeurs finales de a et b ? Que fait cet algorithme ?
  4. (d) Même question avec : a,b = b,a. Pourquoi est-ce plus sûr ?
Exercice 3 — Tests — appartenance à un intervalle et logique
2nde

Consigne. Écrire des conditions Python (sans erreurs de borne) :

  1. (a) Tester si \(x\in[-2 ; 5[\).
  2. (b) Tester si \(x\notin[0 ; 1]\).
  3. (c) Tester si \(x\in]-\infty ; -3]\cup[2 ; +\infty[\).
  4. (d) Tester si \(x\in[1 ; 4]\) ET \(x\neq 3\).
Exercice 4 — Logique — lois de De Morgan (piège classique)
2nde

Consigne. On considère la condition :

not( (x >= 0 and x <= 1) or (x == 3) )
  1. (a) Réécrire cette condition sans not en utilisant seulement and et or.
  2. (b) Donner l’ensemble des valeurs de \(x\) (en intervalle) qui valident la condition.
  3. (c) Vérifier avec \(x=0{,}5\), \(x=2\), \(x=3\), \(x=-1\).
  4. (d) Écrire une version équivalente plus lisible avec variables booléennes.
Exercice 5 — Boucle while — seuil + arrêt garanti
2nde

Consigne. On définit \(u_0=1\) et \(u_{n+1}=1{,}15u_n+2\).

  1. (a) Écrire un programme qui calcule le plus petit \(n\) tel que \(u_n\ge 100\).
  2. (b) Faire une trace manuelle des 4 premiers termes \(u_0,u_1,u_2,u_3\).
  3. (c) Expliquer pourquoi le programme s’arrête (argument mathématique simple).
  4. (d) Modifier pour afficher aussi la valeur de \(u_n\) au moment de l’arrêt.
Exercice 6 — Boucle for — sommes et formules (vérification)
2nde

Consigne. On veut calculer \(S=1^2+2^2+\cdots+n^2\).

  1. (a) Écrire un programme avec for pour calculer S.
  2. (b) Calculer à la main pour \(n=5\).
  3. (c) Vérifier la formule : \(S=\dfrac{n(n+1)(2n+1)}{6}\) pour \(n=5\).
  4. (d) Modifier le programme pour vérifier automatiquement la formule pour \(n=1..50\) (test de cohérence).
Exercice 7 — Listes — min, max, position (indice) sans fonctions toutes faites
2nde

Consigne. On a une liste de notes : L=[12, 8, 15, 15, 9, 18, 7].

  1. (a) Écrire un algorithme (sans min/max) qui calcule le minimum et le maximum.
  2. (b) Écrire un algorithme qui renvoie l’indice de la première occurrence du maximum.
  3. (c) Calculer à la main min, max et l’indice demandé.
  4. (d) Expliquer le piège si on initialise min=0 au lieu de min=L[0].
Exercice 8 — Comptage — fréquences et pourcentages (statistiques)
2nde

Consigne. Une liste L contient des valeurs 0/1 (0=échec, 1=succès) :

L = [1,0,1,1,0,0,1,1,1,0]
  1. (a) Calculer le nombre de succès.
  2. (b) Calculer la fréquence de succès (entre 0 et 1).
  3. (c) Calculer le pourcentage de succès (entre 0 et 100).
  4. (d) Écrire une fonction freq(L) qui renvoie 0 si la liste est vide.
Exercice 9 — Fonctions — factorial + validation (robustesse)
2nde

Consigne. On veut coder la factorielle \(n!\) (pour \(n\in\mathbb{N}\)).

  1. (a) Écrire fact(n) avec une boucle for.
  2. (b) Que doit renvoyer fact(0) ? Justifier.
  3. (c) Modifier fact pour refuser (par exemple retourner None) si n n’est pas un entier naturel.
  4. (d) Calculer fact(6) et vérifier le résultat.
Exercice 10 — Algorithme d’Euclide — PGCD en Python + preuve d’invariant
2nde

Consigne. On veut calculer \(\mathrm{PGCD}(a,b)\) avec Euclide.

  1. (a) Compléter le programme :
  2. def pgcd(a, b):
        while b != 0:
            r = a % b
            a = b
            b = r
        return a
  3. (b) Faire la trace pour \(a=9999\), \(b=3663\) et trouver le résultat.
  4. (c) Donner l’invariant : pourquoi le PGCD ne change pas quand on remplace \((a,b)\) par \((b, a\%b)\) ?
  5. (d) Comment adapter si on autorise des entrées négatives ?
Exercice 11 — Simulation — pièce biaisée, fréquence et estimation
2nde

Consigne. Une pièce donne Pile avec probabilité inconnue \(p\). On simule N lancers et on observe la fréquence.

  1. (a) Écrire un script qui simule N lancers d’une pièce équilibrée (p=0,5) et renvoie la fréquence de Pile.
  2. (b) Pourquoi la fréquence n’est-elle pas exactement 0,5 ?
  3. (c) Modifier pour une pièce biaisée p=0,62 (avec random.random()).
  4. (d) Expliquer l’effet de N (ex : N=100, N=10 000) sur la stabilité de la fréquence.
Exercice 12 — Simulation — “au moins un 6 en 4 lancers” (lien théorie)
2nde

Consigne. On lance un dé 4 fois.

  1. (a) Écrire une simulation qui estime la probabilité d’obtenir au moins un 6.
  2. (b) Donner la probabilité théorique exacte.
  3. (c) Expliquer pourquoi il est plus simple de calculer la probabilité contraire.
  4. (d) Comparer simulation et théorie pour N=50 000 (sans exécuter : expliquer ce qu’on doit observer).
Exercice 13 — Boucles imbriquées — coût (nombre d’opérations)
2nde

Consigne. On considère :

n = 10
c = 0
for i in range(n):
    for j in range(i, n):
        c += 1
  1. (a) Pour n=4, lister les couples (i,j) parcourus.
  2. (b) Exprimer c en fonction de n (formule).
  3. (c) Calculer c pour n=10.
  4. (d) Donner l’ordre de grandeur du coût (≈ proportionnel à quoi ?) quand n est grand.
Exercice 14 — Suites — calcul d’un terme et somme partielle
2nde

Consigne. On définit \(u_0=2\) et \(u_{n+1}=2u_n+1\).

  1. (a) Écrire un programme qui calcule \(u_n\) pour une valeur n donnée.
  2. (b) Calculer à la main \(u_1,u_2,u_3\).
  3. (c) Écrire un programme qui calcule \(S_n=u_0+u_1+\cdots+u_n\).
  4. (d) Donner une conjecture simple sur la forme de \(u_n\) (observer les valeurs) et la justifier brièvement.
Exercice 15 — Recherche du plus petit n — somme dépasse un seuil
2nde

Consigne. On cherche le plus petit \(n\) tel que \(1+2+\cdots+n \ge 1000\).

  1. (a) Écrire un programme avec while qui trouve ce n.
  2. (b) Expliquer pourquoi ce programme termine.
  3. (c) Sans programme : utiliser une estimation avec \(\frac{n(n+1)}{2}\) pour encadrer n.
  4. (d) Vérifier à la fin que le n trouvé est bien minimal (condition double).
Exercice 16 — Erreurs de boucle — détecter et corriger (debug)
2nde

Consigne. Le but est de calculer la somme des entiers de 1 à n. Mais ce code est faux :

def somme(n):
    S = 0
    for k in range(n):
        S = S + k
    return S
  1. (a) Tester mentalement pour n=1,2,3 : que renvoie la fonction ?
  2. (b) Expliquer l’erreur (borne de range et terme ajouté).
  3. (c) Corriger de 2 façons différentes.
  4. (d) Ajouter une vérification : si n<1, renvoyer 0.
Exercice 17 — Recherche — premier indice qui vérifie une condition
2nde

Consigne. On a une liste L=[-3, 7, 0, 12, -1, 5]. On cherche l’indice du premier élément strictement positif.

  1. (a) Écrire un programme qui renvoie cet indice (ou -1 si aucun).
  2. (b) Donner la valeur pour la liste donnée.
  3. (c) Modifier pour renvoyer aussi la valeur trouvée.
  4. (d) Expliquer la différence entre “premier positif” et “max” (erreur fréquente).
Exercice 18 — Nombres premiers — test de primalité (efficace)
2nde

Consigne. On veut tester si un entier n est premier.

  1. (a) Écrire une fonction est_premier(n) qui renvoie True/False (n≥0).
  2. (b) Pourquoi suffit-il de tester les diviseurs jusqu’à \(\sqrt{n}\) ?
  3. (c) Tester mentalement : 1, 2, 9, 17, 221 (donner résultat + justification rapide).
  4. (d) Ajouter une optimisation : ignorer les nombres pairs > 2.
Exercice 19 — Statistiques — moyenne, variance (niveau propre)
2nde

Consigne. On a une série : L=[2, 4, 4, 4, 5, 5, 7, 9].

  1. (a) Calculer la moyenne.
  2. (b) Calculer la variance \(V=\frac{1}{n}\sum (x_i-\bar x)^2\).
  3. (c) Écrire un programme qui calcule moyenne et variance.
  4. (d) Donner l’écart-type \(\sigma=\sqrt{V}\) et interpréter (dispersion).
Exercice 20 — Arrondis — erreurs accumulées (flottants)
2nde

Consigne. On calcule une somme de décimaux :

S = 0.0
for i in range(10):
    S += 0.1
print(S)
  1. (a) Que devrait-on obtenir “en maths” ?
  2. (b) Pourquoi Python peut afficher 0.999999999... ? (explication simple)
  3. (c) Donner une solution pour comparer des réels “à epsilon près”.
  4. (d) Proposer une solution “exacte” en utilisant des entiers.
Exercice 21 — Dictionnaire (option 2nde+) — comptage de valeurs
2nde

Consigne. On a une liste de lettres : L=list("abacaba").

  1. (a) Compter combien de fois apparaît chaque lettre (sans count).
  2. (b) Donner le résultat attendu.
  3. (c) Écrire une fonction freq_lettres(texte) (texte = str) qui renvoie un dictionnaire.
  4. (d) Quel est l’avantage d’un dictionnaire sur une liste pour ce problème ?
Exercice 22 — Boucle while — méthode de Babylone (approximation de √a)
2nde

Consigne. Pour \(a>0\), on approxime \(\sqrt{a}\) par :

\(x_{0}=a\) et \(x_{n+1}=\dfrac{1}{2}\left(x_n+\dfrac{a}{x_n}\right)\).

  1. (a) Écrire un programme qui calcule une approximation de \(\sqrt{a}\) avec un seuil : s’arrêter quand \(|x_{n+1}-x_n|<10^{-6}\).
  2. (b) Calculer à la main deux itérations pour \(a=2\) (à 4 décimales).
  3. (c) Expliquer pourquoi on met un seuil plutôt qu’un nombre fixe d’itérations.
  4. (d) Ajouter une protection si a≤0 (renvoyer None).
Exercice 23 — Tri (niveau raisonnement) — vérifier si une liste est croissante
2nde

Consigne. Écrire est_croissante(L) qui renvoie True si la liste est non décroissante.

  1. (a) Donner l’algorithme (balayage + comparaison voisins).
  2. (b) Tester sur [1,2,2,5] et [1,3,2].
  3. (c) Modifier pour renvoyer aussi le premier indice où ça “casse”.
  4. (d) Expliquer la complexité (nombre de comparaisons).
Exercice 24 — Histogramme — regrouper des valeurs en classes (stats)
2nde

Consigne. On a des notes entières entre 0 et 20 dans une liste L. On veut compter par classes : [0 ; 5[, [5 ; 10[, [10 ; 15[, [15 ; 21[.

  1. (a) Écrire un programme qui renvoie un tableau de 4 compteurs.
  2. (b) Sur l’exemple L=[2,5,7,10,14,15,20,9,0,18], donner les compteurs.
  3. (c) Convertir les compteurs en pourcentages.
  4. (d) Expliquer le piège de la borne 20 (dans quelle classe ?).
Exercice 25 — Challenge final — loi binomiale via simulation (très complet)
2nde

Consigne. On considère 20 lancers d’une pièce équilibrée. Soit X le nombre de piles. On veut estimer \(P(X\ge 15)\).

  1. (a) Écrire une simulation (N expériences) qui estime \(P(X\ge 15)\).
  2. (b) Donner la formule théorique exacte (sans calculer numériquement) avec la loi binomiale.
  3. (c) Expliquer pourquoi l’événement \(X\ge 15\) est “rare” et ce que ça implique sur N.
  4. (d) Proposer une stratégie de vérification : comparer aussi \(P(X\le 5)\) et expliquer la symétrie.