Corrections · Algorithmique et programmation

Terminale · Spécialité mathématiques · Chapitre 17

Corrections expliquées.
Algorithmique et programmation.

À consulter après une première recherche personnelle.

Commencer par le diagnosticDiagnostic · exercices · rappels

Utilisation. Cherche d’abord dans le fascicule du cours. Lis son indice si tu es bloquée, puis compare ta démarche avec la correction complète. Une réponse formulée autrement peut être correcte si elle respecte les données et si elle est justifiée. Les exercices sont des créations pédagogiques ; ils ne sont pas présentés comme des sujets officiels du baccalauréat.

Fiche 01 / 04

Diagnostic : réponses et rappels ciblés

Correction D1

On applique les affectations dans l’ordre : x=4→x=2×4=8→x=8−3=5→x=52=25.x=4\quad\longrightarrow\quad x=2\times4=8 \quad\longrightarrow\quad x=8-3=5 \quad\longrightarrow\quad x=5^2=25. La valeur finale est donc 25\boxed{25}. À chaque flèche, l’ancienne valeur est remplacée.

Correction D2

x >= 5 teste si xx est supérieur ou égal à 55. La réponse est vraie pour x=5x=5, x=6x=6, etc., et fausse pour x<5x<5.

Correction D3

𝚛𝚊𝚗𝚐𝚎(𝟺)produit les valeurs0,1,2,3.\texttt{range(4)}\quad\text{produit les valeurs}\quad 0,\ 1,\ 2,\ 3. La valeur 44 n’est pas incluse.

Correction D4

La fonction renvoie la valeur 77 à l’endroit où elle est appelée. Elle ne renvoie pas le texte « return 7 ».

Correction D5

Les indices Python commencent à 00. Le premier élément 1212 a donc l’indice 0\boxed{0}.

Correction D6

Si la condition d’une boucle reste toujours vraie, et si aucune instruction ne la rend fausse, la boucle peut continuer indéfiniment. Il faut vérifier qu’une variable évolue vers la condition d’arrêt.

Point de méthodeUne trace est un tableau de valeurs successives. Elle permet de distinguer une erreur de calcul dans le programme d’une erreur de conception, comme un mauvais indice ou une condition jamais modifiée.

Fiche 02 / 04

Corrections des exercices 1 à 4

Correction 1 — 1

On part de x=4x=4. instructionvaleur de xinitialisation4x←2x8x←x−35x←x225\begin{array}{c|c} \text{instruction}&\text{valeur de }x\\ \hline \text{initialisation}&4\\ x\leftarrow2x&8\\ x\leftarrow x-3&5\\ x\leftarrow x^2&25 \end{array} La valeur finale est 25\boxed{25}.

Correction 2 — 2

Une solution complète est :

def signe_nombre(x):
    if x > 0:
        return 1
    elif x < 0:
        return -1
    else:
        return 0

Le premier test traite les positifs. Le second ne se fait que si le premier est faux ; le dernier cas est alors exactement x=0x=0.

Correction 3 — 3

On initialise la somme à zéro, puis on ajoute les trois éléments : 0+3=3,3+(−1)=2,2+4=6.0+3=3,\qquad3+(-1)=2,\qquad2+4=\boxed6. Par exemple :

def somme_liste(valeurs):
    total = 0
    for valeur in valeurs:
        total = total + valeur
    return total

L’initialisation à zéro est adaptée car zéro est l’élément neutre de l’addition.

Correction 4 — 4

Une solution par boucle est :

def doubles_positifs(valeurs):
    resultat = []
    for valeur in valeurs:
        if valeur > 0:
            resultat.append(2 * valeur)
    return resultat

Pour [−2,3,4,0][-2,3,4,0], seules 33 et 44 sont strictement positives, donc le résultat est [6,8]\boxed{[6,8]}. Le zéro est exclu par « strictement ».

Fiche 03 / 04

Corrections des exercices 5 à 8

Correction 5 — 5

On teste la longueur avant de diviser :

def moyenne(valeurs):
    if len(valeurs) == 0:
        return None
    total = 0
    for valeur in valeurs:
        total = total + valeur
    return total / len(valeurs)

Pour la liste vide, la fonction renvoie 𝙽𝚘𝚗𝚎\boxed{\texttt{None}}, car une division par zéro n’est pas définie. Pour [4,6][4,6], elle calcule 4+62=5.\frac{4+6}{2}=\boxed5.

Correction 6 — 6

La boucle parcourt 1,2,3,41,2,3,4. Le reste de la division par 22 vaut zéro pour les nombres pairs : 2%2=0,4%2=0.2\mathbin{\%}2=0,\qquad4\mathbin{\%}2=0. Les valeurs ajoutées sont donc 22 et 44, et le programme renvoie [2,4]\boxed{[2,4]}. Le symbole % calcule le reste de la division euclidienne.

Correction 7 — 7

Une fonction possible est :

def premier_carre(limite):
    n = 0
    while n <= limite and n*n < 50:
        n = n + 1
    if n <= limite:
        return n
    return None

Les carrés sont 02,…,720^2,\ldots,7^2, et 72=49<507^2=49<50. Le rang suivant vaut 88, et 82=64≥508^2=64\geq50. Le résultat est donc 8\boxed8. Le test de n <= limite prévoit le cas où aucun rang ne convient.

Correction 8 — 8

On peut écrire :

from random import random

def frequence_piles():
    piles = 0
    for i in range(1000):
        if random() < 0.5:
            piles = piles + 1
    return piles / 1000

La valeur renvoyée est la fréquence observée de piles dans une réalisation de 10001000 lancers. Elle devrait souvent être proche de 0,50{,}5, mais elle peut être 0,4760{,}476, 0,5030{,}503 ou une autre valeur : aucune valeur exacte n’est imposée par la simulation.

Point de méthodeUne correction de programme doit préciser ce qu’il renvoie, pas seulement fournir du code. Pour une liste, vérifier l’ordre, les valeurs retenues et le cas vide. Pour une boucle de recherche, vérifier le rang trouvé et le rang précédent.

Fiche 04 / 04

Rappel différé : corrections

Correction R1

range(3) produit 0,1,20,1,2, donc 𝚕𝚒𝚜𝚝(𝚛𝚊𝚗𝚐𝚎(𝟹))=[0,1,2].\texttt{list(range(3))}=\boxed{[0,1,2]}.

Correction R2

return transmet une valeur à l’appelant et permet de la réutiliser dans un calcul. print affiche une valeur à l’écran, mais ne la transmet pas comme résultat de la fonction. Une fonction qui fait seulement print renvoie généralement None.

Correction R3

Zéro est l’élément neutre de l’addition : 0+a=a.0+a=a. Une somme peut donc commencer à zéro sans modifier le résultat. Chaque élément sera ensuite ajouté exactement une fois.

Correction R4

On peut tester moyenne([4,6]), dont le résultat attendu est 55. On peut aussi tester une liste constante comme [7,7,7][7,7,7], dont la moyenne doit être 77, ou la liste vide si le programme prévoit ce cas.