for

Afficher une suite d'entiers .

Écrire un programme qui affiche les entiers de 200 à 0 par pas de 4 : 200, 196, 192, 188...

Arrêt d'une boucle.

Tom écrit la boucle suivante :

et prévoit que l'affichage obtenu sera : 2 3 4.

Il fait en effet le raisonnement suivant :

  • On commence avec l'initialisation 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 + ' ');.
  • On revient alors au test 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 + ' ');.
  • On revient alors au test 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 + ' ');.
  • On revient alors au test 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 :

  • On commence avec l'initialisation 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.
  • On revient alors au test 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.
  • On revient alors au test 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.
  • On revient alors au test 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 :

Factorielle d'un entier.

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:

Population.

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: