← Retour au sommaire

Devoir Surveillé – Chapitre 17

Calcul et algorithmique | BTS | Mathématiques

Dernière mise à jour : 21 octobre 2026

Nom : Prénom : Classe : Date : Note : / 20
🕑 Durée : 1 h 30
🧮 Calculatrice : autorisée
✍ Barème : 20 points
📄 Formulaire : aucun formulaire fourni — les formules utiles sont rappelées dans chaque exercice

Exercice 1 — Boucles et fonctions : contrôle d'un lot de pièces (5 points)

Un technicien de contrôle qualité relève le diamètre (en mm) de 6 axes usinés dont la cote nominale est 25 mm avec une tolérance de ±0,05 mm :

D = [24.98, 25.03, 24.95, 25.07, 25.00, 24.99]

1. On exécute le programme suivant. Complète le tableau de trace de la variable somme au fil des itérations. (1,5 pt)

D = [24.98, 25.03, 24.95, 25.07, 25.00, 24.99]
somme = 0
for i in range(len(D)):
    somme = somme + D[i]
moyenne = somme / len(D)

2. Donne la valeur de moyenne (au dix-millième). (1 pt)

3. Complète la fonction suivante afin qu'elle compte le nombre de pièces non conformes (hors de l'intervalle [24,95 ; 25,05]) : (1,5 pt)

def compter_defauts(T, mini, maxi):
    compteur = 0
    for x in T:
        if ______________:
            compteur = compteur + 1
    return compteur

4. Donne le résultat de compter_defauts(D, 24.95, 25.05) en justifiant. (1 pt)

1.

iD[i]somme
——0
024,9824,98
125,0350,01
224,9574,96
325,07100,03
425,00125,03
524,99150,02

2. \(\text{moyenne} = 150{,}02 / 6 = 25{,}0033\ldots \approx 25{,}0033\,\text{mm}\).

3. Condition à compléter : x < mini or x > maxi.

4. Vérification pièce par pièce sur [24,95 ; 25,05] : 24,98 conforme ; 25,03 conforme ; 24,95 conforme (borne incluse) ; 25,07 > 25,05 → non conforme ; 25,00 conforme ; 24,99 conforme. compter_defauts(D, 24.95, 25.05) renvoie 1.

Exercice 2 — Recherche d'un zéro par dichotomie (5 points)

Un bureau d'études cherche la valeur \(x\) telle que \(x^2 = 11\) (dimensionnement d'une section technique), en résolvant \(f(x) = x^2 - 11 = 0\) par dichotomie sur l'intervalle \([3\,;\,4]\). On vérifie que \(f(3) = -2 < 0\) et \(f(4) = 5 > 0\).

1. Rappelle le principe de la méthode de dichotomie et la condition d'arrêt utilisée. (1 pt)

2. Complète le tableau de trace pour 3 itérations (\(m\), \(f(m)\), nouvel intervalle). (2,5 pts)

Itération\(m = \frac{a+b}{2}\)\(f(m)\)Nouvel intervalle
1   
2   
3   

3. Combien d'itérations faut-il, en partant de \([3\,;\,4]\), pour atteindre une précision \(\varepsilon = 10^{-3}\) ? (1,5 pt)

1. On calcule le milieu \(m\) de l'intervalle \([a,b]\), puis on remplace \(a\) ou \(b\) par \(m\) selon le signe de \(f(m)\) (le signe qui change indique la moitié contenant la racine). On arrête quand \(\dfrac{b-a}{2} < \varepsilon\).

2.

Itération\(m\)\(f(m)\)Nouvel intervalle
13,5001,25[3,000 ; 3,500]
23,250−0,4375[3,250 ; 3,500]
33,3750,390625[3,250 ; 3,375]

On encadre bien \(\sqrt{11} \approx 3{,}316625\) dans \([3{,}250\,;\,3{,}375]\).

3. \(b-a=1\). \(n \geq \log_2\!\left(\dfrac{1}{10^{-3}}\right) = \log_2(1000) \approx 9{,}97\), donc il faut au moins 10 itérations.

Exercice 3 — Tri et complexité : mesures de résistance (5 points)

Un technicien de contrôle mesure des résistances (en Ω) sur un lot de composants : T = [56, 18, 33, 9, 41]. Il utilise l'algorithme de tri à bulles optimisé (avec arrêt anticipé) vu en cours.

1. Complète le tableau après chaque passage, avec le nombre d'échanges effectués. (3 pts)

PassageTableau après passageNb échanges
Initial[56, 18, 33, 9, 41]—
1  
2  
3  
4  

2. Donne la complexité, dans le pire des cas, du tri à bulles pour un tableau de \(n\) éléments. (1 pt)

3. Un lot comporte cette fois \(n = 200\) composants. Estime le nombre maximal de comparaisons effectuées par le tri à bulles sur ce lot (utilise \(\dfrac{n(n-1)}{2}\)). (1 pt)

1.

PassageTableau après passageNb échanges
Initial[56, 18, 33, 9, 41]—
1[18, 33, 9, 41, 56]4
2[18, 9, 33, 41, 56]1
3[9, 18, 33, 41, 56]1
4[9, 18, 33, 41, 56]0 → arrêt

2. \(O(n^2)\), quadratique.

3. \(\dfrac{200 \times 199}{2} = 19\,900\) comparaisons au maximum.

Exercice 4 — Python et régulation PID (5 points)

Un technicien de maintenance programme la régulation d'un bain thermostaté à l'aide de la classe PID du cours, avec \(K_p = 1{,}5\), \(K_i = 0{,}3\), \(K_d = 0\) (terme dérivé négligé) et \(T_e = 1\,\text{s}\). La consigne est de 90 °C.

1. Complète les deux lignes manquantes de la méthode calculer (sans terme dérivé) : (2 pts)

class PID:
    def __init__(self, Kp, Ki, Te):
        self.Kp = Kp
        self.Ki = Ki
        self.Te = Te
        self._somme_e = 0.0

    def calculer(self, consigne, mesure):
        e = consigne - mesure
        ______________________________        # mise à jour de la somme cumulée
        u = ______________________________     # calcul de la commande u
        return u

2. Les deux premières mesures relevées par le capteur sont 70 °C puis 79 °C. Complète le tableau de trace pour \(k = 0\) et \(k = 1\) : erreur \(e_k\), somme cumulée, commande \(u_k\). (3 pts)

kmesure\(e_k\)somme cumulée\(u_k\)
070   
179   

1.

    def calculer(self, consigne, mesure):
        e = consigne - mesure
        self._somme_e += e * self.Te
        u = self.Kp * e + self.Ki * self._somme_e
        return u

2.

kmesure\(e_k = 90 - \text{mesure}\)somme cumulée\(u_k = 1{,}5\,e_k + 0{,}3 \times \text{somme}\)
0702020,01,5×20 + 0,3×20,0 = 36,0
1791131,01,5×11 + 0,3×31,0 = 25,8