← Retour au sommaire

Devoir Surveillé – Chapitre 13

Algorithmique et programmation | Seconde générale et technologique | Mathématiques

Dernière mise à jour : 21 octobre 2026

Nom : Prénom : Classe : Date : Note : / 20
🕑 Durée : 1 heure
🧮 Calculatrice : autorisée
✍ Barème : 20 points
📄 Documents : non autorisés
Rappels : for i in range(a, b) parcourt de a à b-1 ; un accumulateur de somme s'initialise à 0, un accumulateur de produit à 1 ; return renvoie une valeur, print l'affiche ; random.randint(a, b) renvoie un entier de a à b inclus.

Exercice 1 — Variables, types et trace (7 points)

1. Indiquer le type Python (int, float, bool, str) de : (a) 15 ; (b) 3.5 ; (c) "maths" ; (d) False. (2 pts)

2. On exécute le programme ci-dessous. Détailler chaque affectation et donner l'affichage. (3 pts)

x = 7
y = 2
x = x + y
y = x - y
print(x, y)

3. Donner la valeur de 13 % 4, de 13 // 4 et de 3 ** 2. (2 pts)

1. (a) int ; (b) float ; (c) str ; (d) bool.

2. Ligne 3 : x = 7 + 2 = 9. Ligne 4 : y = 9 - 2 = 7. Affichage : 9 7.

3. 13 % 4 = 1 (reste) ; 13 // 4 = 3 (quotient entier) ; 3 ** 2 = 9.

Exercice 2 — Conditionnelle et boucle (7 points)

1. Écrire une fonction mention(note) renvoyant "admis" si note >= 10, et "recalé" sinon. (2 pts)

2. Écrire une fonction somme_pairs(n) renvoyant la somme des entiers pairs de \(1\) à \(n\). Tester avec \(n = 6\) (attendu : \(2 + 4 + 6 = 12\)). (3 pts)

3. On considère la fonction suivante. Que renvoie mystere(50) ? Expliquer le rôle de la boucle. (2 pts)

def mystere(seuil):
    somme = 0
    n = 0
    while somme <= seuil:
        n = n + 1
        somme = somme + n
    return n
def mention(note):
    if note >= 10:
        return "admis"
    else:
        return "recalé"

def somme_pairs(n):
    total = 0
    for i in range(1, n + 1):
        if i % 2 == 0:
            total = total + i
    return total

print(somme_pairs(6))   # 12

3. La boucle ajoute \(1, 2, 3, \dots\) à somme tant qu'elle ne dépasse pas \(50\). On a \(1+2+\dots+9 = 45 \le 50\) puis \(45+10 = 55 \gt 50\). La fonction renvoie donc n = 10 (le plus petit entier tel que \(1+2+\dots+n\) dépasse \(50\)).

Exercice 3 — Fonction, correction de script et aléatoire (6 points)

1. Le script suivant doit calculer le produit \(1 \times 2 \times \dots \times n\). Il contient une erreur : la repérer, l'expliquer et la corriger. (3 pts)

def produit(n):
    p = 0
    for k in range(1, n + 1):
        p = p * k
    return p

2. Écrire une fonction lancer_de() simulant un lancer de dé à 6 faces (résultat entier de \(1\) à \(6\)). (1,5 pt)

3. Écrire une fonction moyenne_lancers(n) qui effectue n lancers indépendants et renvoie la moyenne des résultats obtenus. Vers quelle valeur doit-elle tendre pour n grand ? (1,5 pt)

1. L'accumulateur d'un produit doit être initialisé à 1 (et non 0) : avec p = 0, tout produit reste nul. Correction :

def produit(n):
    p = 1
    for k in range(1, n + 1):
        p = p * k
    return p

2. et 3.

import random

def lancer_de():
    return random.randint(1, 6)

def moyenne_lancers(n):
    total = 0
    for i in range(n):
        total = total + lancer_de()
    return total / n

print(moyenne_lancers(100000))   # proche de 3.5

Pour n grand, la moyenne tend vers la moyenne théorique d'un dé équilibré : \(\frac{1+2+3+4+5+6}{6} = \textbf{3,5}\).