Aller au contenu

Exercices corrigés — Algorithmique et Python (Terminale)

Quatre niveaux de difficulté, du plus simple au plus exigeant. Chaque exercice a sa correction détaillée, étape par étape.

2 exercices de niveau « Application ». Voir les 8 exercices.

Exercice 3 Application

On considère le script suivant.

n = 0
u = 1
while u < 100:
    u = 2 * u
    n = n + 1
print(n, u)

a) Dresser le tableau des valeurs successives de u et n. b) Qu'affiche le script ? c) Quel problème mathématique résout-il ? d) Que se passerait-il si l'on remplaçait u = 2 * u par u = u / 2 ?

Voir la correction
Correction détaillée

a) Avant la boucle, u = 1 et n = 0. La condition u < 100 est testée avant chaque passage.

passagedépart1234567
u1248163264128
n01234567
Après le septième passage, u = 128 : la condition 128 < 100 est fausse, la boucle s'arrête.
b) Le script affiche 7 128.
c) Il détermine le plus petit entier n tel que 2n ≥ 100 : c'est une recherche de seuil pour la suite géométrique un = 2n. On vérifie : 26 = 64 < 100 ≤ 128 = 27, et par le logarithme, ln 100ln 2 ≈ 6,64, dont le premier entier supérieur est 7.
d) Avec u = u / 2, la variable u prendrait les valeurs 12, 14, 18, …, toujours strictement inférieures à 100 : la condition resterait vraie indéfiniment et le programme ne s'arrêterait jamais. Une boucle while n'est correcte que si une variable évolue vers la sortie ; ici, il faut que u finisse par dépasser 100, ce qui est garanti par 2n → +∞.

Exercice 4 Application

Corriger la fonction censée compter les entiers de 1 à n divisibles par 3 : for k in range(1,n): if k/3 == 0: compteur += 1.

Voir la correction
Correction détaillée

le code comporte trois erreurs.
1. range(1, n) parcourt les entiers de 1 à n − 1 : la borne droite est exclue. Pour aller jusqu'à n inclus, il faut range(1, n + 1).
2. k/3 == 0 teste si le quotient k/3 vaut 0, ce qui n'arrive que pour k = 0 : la divisibilité se teste avec le reste de la division euclidienne, k % 3 == 0.
3. La variable compteur est incrémentée sans avoir été créée : il faut l'initialiser à 0 avant la boucle, puis la renvoyer.
Fonction corrigée :

def multiples_de_3(n):
    compteur = 0
    for k in range(1, n + 1):
        if k % 3 == 0:
            compteur += 1
    return compteur

Test : multiples_de_3(10) renvoie 3, pour les entiers 3, 6 et 9 ; multiples_de_3(9) renvoie aussi 3, ce qui vérifie la borne incluse. Le résultat attendu est la partie entière de n3, soit n // 3 en Python.