← Retour au sommaire

Devoir Surveillé – Chapitre 12

Algorithmique et programmation | Première générale (spécialité) | 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 : liste L = [4, 9, 16], indices à partir de \(0\), dernier élément L[-1], taille len(L) ; range(n) parcourt \(0, \dots, n-1\) ; append ajoute en fin ; while répète tant qu'une condition est vraie.

Exercice 1 — Manipuler une liste (7 points)

On considère la liste L = [6, 2, 9, 4, 7].

1. Donner les valeurs de L[0], L[3], L[-1] et len(L). (2 pts)

2. Écrire l'instruction qui ajoute la valeur \(5\) à la fin de L. (1 pt)

3. Que renvoie le code suivant ? Justifier. (2 pts)

s = 0
for x in L:
    if x % 2 == 0:
        s += x
print(s)

4. Par compréhension, écrire la liste des éléments de L strictement supérieurs à \(5\). (2 pts)

1. L[0] \(= 6\), L[3] \(= 4\), L[-1] \(= 7\), len(L) \(= 5\).

2. L.append(5).

3. On additionne les éléments pairs : \(6\), \(2\) et \(4\), soit \(6 + 2 + 4 = 12\). Le code affiche 12. (La question 2 n'ayant pas modifié L ici, on utilise la liste initiale.)

4. [x for x in L if x > 5], ce qui donne [6, 9, 7].

Exercice 2 — Écrire des fonctions (7 points)

1. Écrire une fonction compte_positifs(L) qui renvoie le nombre d'éléments strictement positifs d'une liste. (2,5 pts)

2. Écrire une fonction maximum(L) qui renvoie le plus grand élément d'une liste non vide, sans utiliser max. (2,5 pts)

3. On donne L = [-2, 5, 3, -1, 8]. Que renvoient compte_positifs(L) et maximum(L) ? (2 pts)

1. On incrémente un compteur pour chaque élément \(> 0\) :

def compte_positifs(L):
    c = 0
    for x in L:
        if x > 0:
            c += 1
    return c

2. On part du premier élément et on garde le plus grand :

def maximum(L):
    m = L[0]
    for x in L:
        if x > m:
            m = x
    return m

3. Les positifs sont \(5\), \(3\), \(8\) : compte_positifs(L) renvoie \(3\). Le plus grand élément est \(8\) : maximum(L) renvoie \(8\).

Exercice 3 — Suite et seuil (6 points)

On étudie la suite \(u_0 = 5\), \(u_{n+1} = 2u_n + 1\).

1. Écrire une fonction termes(n) renvoyant la liste des \(n\) premiers termes de la suite. (3 pts)

2. Donner la liste renvoyée par termes(4). (1,5 pt)

3. Écrire une fonction rang_seuil(S) renvoyant le premier rang \(n\) tel que \(u_n \geqslant S\). (1,5 pt)

1. On ajoute chaque terme à partir du dernier :

def termes(n):
    L = [5]                       # u_0
    for _ in range(n - 1):
        L.append(2 * L[-1] + 1)
    return L

2. \(u_0 = 5\), \(u_1 = 11\), \(u_2 = 23\), \(u_3 = 47\). La liste est [5, 11, 23, 47].

3. On répète tant que \(u \lt S\) :

def rang_seuil(S):
    u, n = 5, 0
    while u < S:
        u = 2 * u + 1
        n += 1
    return n