Aller au contenu

Exercices corrigés — Algorithmique et programmation Python (Seconde)

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 « Maîtrise ». Voir les 8 exercices.

Exercice 5 Maîtrise

Compléter une fonction plus_grand_multiple(a, b) qui renvoie le plus grand multiple de a inférieur ou égal à b, pour a > 0 et b ≥ 0.

Voir la correction
Correction détaillée

le quotient entier b // a indique combien de fois a « rentre » dans b ; le multiple cherché est ce quotient multiplié par a :

def plus_grand_multiple(a, b):
    return (b // a) * a

Exemple : pour a = 7 et b = 50, 50 // 7 vaut 7 (car 7 × 7 = 49 ≤ 50 < 56), et la fonction renvoie 49. Autre écriture équivalente : b - b % a, puisque 50 − 50 % 7 = 50 − 1 = 49.
Cas limites : si b est déjà un multiple de a, par exemple a = 7 et b = 49, 49 // 7 * 7 vaut 49, le nombre lui-même ; si b < a, le quotient vaut 0 et la fonction renvoie 0, qui est bien le plus grand multiple de a inférieur ou égal à b.
L'hypothèse a > 0 évite une division par zéro et garantit le sens du quotient entier.

Exercice 6 Maîtrise

On veut trouver le premier entier n tel que 1,1n > 2 avec le programme : n = 0 ; p = 1 ; while p <= 2 : n = n + 1. Expliquer le problème, corriger le programme et donner le résultat.

Voir la correction
Correction détaillée

la variable p, censée représenter 1,1n, n'est jamais modifiée dans la boucle : la condition p <= 2 reste toujours vraie et la boucle ne s'arrête jamais. C'est une boucle infinie, le défaut le plus fréquent d'une boucle while.
Correction : à chaque passage, il faut multiplier p par 1,1 en même temps qu'on augmente n :

n = 0
p = 1
while p <= 2:
    p = p * 1.1
    n = n + 1
print(n)

Déroulement : p prend les valeurs 1,1 ; 1,21 ; 1,331 ; 1,4641 ; 1,6105 ; 1,7716 ; 1,9487 ; 2,1436. Au huitième passage, p dépasse 2 et n vaut 8 : la boucle s'arrête. Le programme affiche 8, et l'on vérifie 1,17 ≈ 1,95 ≤ 2 < 1,18 ≈ 2,14.
Terminaison : comme 1,1 > 1, les puissances 1,1n finissent toujours par dépasser 2. Avec une raison inférieure à 1, la boucle corrigée serait de nouveau infinie.