Boucle non bornée - Corrigé

Télécharger au format PDF

Exercice

Écrire une fonction max_cube(n) qui prend un entier naturel n en argument et qui renvoie le plus grand entier dont le cube est inférieur ou égal à n.

Analyse de l’énoncé

Prenons pour exemple le cas n=30n = 30.

On cherche le plus grand entier naturel (0, 1, 2, …) dont le cube est inférieur à 30.

Naturellement nous testons les entiers un par un :

  • Si entier = 0
03=0<300^3=0 < 30
  • Si entier = 1
13=1<301^3=1 < 30
  • Si entier = 2
23=8<302^3=8 < 30
  • Si entier = 3
33=27<303^3=27 < 30
  • Si entier = 4
43=64>304^3=64 > 30

Le cube de 4 étant trop grand, l’entier recherché est 3 : c’est en effet le plus grand nombre dont le cube est inférieur à 30.

Grâce à cet exemple, on a pu identifier la structure de la fonction que l’on va écrire :

  1. On initialise une variable entier à 0
  2. On teste si “entier au cube” est inférieur ou égal à n
  3. Si c’est le cas, on ajoute 1 à entier
  4. Si ce n’est pas le cas, la réponse est “entier - 1” (car entier au cube dépasse n)
  5. On recommence à l’étape 2

Vous reconnaissez une structure de boucle while :

python while condition: instruction

Ici la condition est “entier au cube est inférieur ou égal à n” :

python entier**3 <= n

Et l’instruction est “ajouter 1 à entier” :

python entier = entier + 1

Résolution

image 1

Remarque pour finir

Pour incrémenter un nombre d’une même valeur à chaque fois, vous pouvez écrire

python entier += 1

à la place de

python entier = entier + 1

Un autre exercice à traiter

Écrire une fonction facteurs(n) qui prend un nombre entier en argument et renvoie la liste des diviseurs de sa decomposition en facteurs premiers.

Corrigé

image 2

Quelques remarques sur le corrigé

Structure du code

On crée une liste des diviseurs premiers de n que l’on va remplir à chaque fois que l’on en trouve un : liste_div.

On commence par tester si n est divisible par 2.

Si c’est le cas, on stocke 2 dans liste_div et on remplace n par n/2.

Puis on recommence par tester si 2 divise le nouveau n.

Si ce n’est pas le cas, on ajoute 1 à 2 et on teste donc si le nouveau n est divisible par 3.

Ainsi de suite jusqu’à ce qu’à force de diviser n par ses diviseurs premiers, on arrive à n = 1.

Pour ajouter un élément à une liste, on utilise la fonction append. Pour ajouter l’élément 5 à une liste L, on écrira :

>>> L=[1,2]
>>> L.append(5)
>>> L
[1,2,5]