Afficher une suite d'entiers .
Écrire un programme qui affiche les entiers de 200 à 0 par pas de 4 : 200, 196, 192, 188...
Écrire un programme qui affiche les entiers de 200 à 0 par pas de 4 : 200, 196, 192, 188...
Tom écrit la boucle suivante :
et prévoit que l'affichage obtenu sera : 2 3 4.
Il fait en effet le raisonnement suivant :
i = 1, puis le test i <= 3 est évalué, il retourne True.
La variable i est alors incrémentée avec i += 1 et vaut donc 2.
Puis on entre dans la boucle : 2 est alors affiché avec l'instruction document.write( i + ' ');. i <= 3, il retourne True.
La variable i est alors incrémentée avec i += 1 et vaut donc maintenant 3.
Puis on entre dans la boucle : 3 est alors affiché avec l'instruction document.write( i + ' ');. i <= 3, il retourne True.
La variable i est alors incrémentée avec i += 1 et vaut donc maintenant 4.
Puis on entre dans la boucle : 4 est alors affiché avec l'instruction document.write( i + ' ');. i <= 3, il retourne False.
La boucle est stoppée. Est-ce bien l'affichage qui aura lieu ? Comment rectifier le raisonnement ?
L'affichage obtenu est celui ci-dessous :
L'erreur de Tom est de penser que l'incrémentation a lieu juste après le test (comme peut le suggérer l'ordre dans lequel on écrit les instructions).
En fait l'incrémentation a lieu après les instructions exécutées dans les accolades. Le déroulement est le suivant :
i = 1, puis le test i <= 3 est évalué, il retourne True.
Puis on entre dans la boucle : 1 est alors affiché avec l'instruction document.write( i + ' ');.
La variable i est alors incrémentée avec i += 1 et vaut donc 2.
i <= 3, il retourne True.
Puis on entre dans la boucle : 2 est alors affiché avec l'instruction document.write( i + ' ');.
La variable i est alors incrémentée avec i += 1 et vaut donc maintenant 3. i <= 3, il retourne True.
Puis on entre dans la boucle : 3 est alors affiché avec l'instruction document.write( i + ' ');.
La variable i est alors incrémentée avec i += 1 et vaut donc maintenant 4.
i <= 3, il retourne False.
La boucle est stoppée. On pourrait présenter la même boucle avec une boucle while (tant que).
L'équivalent de notre boucle for est :
Tandis que Tom, trompé par l'ordre d'écriture, a pensé que l'on devait lire :
Soit n un entier positif.
On appelle factorielle n (et on note n!) l'entier égal au produit des entiers de 1 à n.
Par exemple \(5! = 1\times 2 \times 3 \times 4 \times 5.\)
On a donc \(5! = 120.\)
Écrire un programme qui calcule n! , n étant un entier donné dans le texte du programme.
Variante:
On note p(n) l'effectif de la population d'une fourmilière le mois n.
On sait qu'au départ (n=0), l'effectif de la population est p(0) = 3 (en centaines).
On sait aussi que chaque mois, l'effectif de la population est multipliée par 2.
On a donc \(p(1)= 2\times p(0) = 2 \times 3 = 6.\)
Et \(p(2)= 2\times p(1) = 2 \times 6 = 12.\)
Et \(p(3)= 2\times p(2) = 2 \times 12 = 24.\)
Et \(p(4)= 2\times p(3) = 2 \times 24 = 48.\)
Pour tout entier naturel n : \( p(n) = 2\times p(n-1) \).
Écrire un programme qui calcule p(n) (la valeur de n sera indiquée dans le texte du programme).
Variante: