Chapitre 5 : les répétitives

Mise en Projet

Nous allons voir que, en plus d'aligner des instructions les unes derrière les autres et de gérer des conditions, il y a des moments où il faudra tenir compte qu'un certain nombre d'instructions devront être répétées un certain nombre de fois, ce nombre dépendant d'une ou plusieurs conditions.

Il s'agira de comprendre et de voir comment faire pour gérer ces situations correctement et avec efficacité.

Nous verrons aussi pourquoi le terme "répétitives" est au pluriel et les distinctions à y apporter.

Un test de 7 questions et 5 robots à programmer permettront de vérifier si cette étape importante de la programmation est bien maîtrisée.

Objectifs

À l'issue de ce chapitre, l'élève sera capable :

  1. de comprendre le fait que certaines instructions d'un programme sont amenées à se réaliser plusieurs fois;
  2. de bien comprendre les différences entre les différentes structures de contrôle répétitives et de voir dans quels cas précis on doit faire appel à l'une ou l'autre;
  3. de gérer parfaitement les sauts de lignes produits dans le programme par les différents éléments des structures de contrôle répétitives;
  4. de pouvoir vérifier si un programmme faisant appel à des structures de contrôle répétitives est correct ou non;
  5. de mettre en œuvre les structures de contrôle répétitives afin de gérer parfaitement les situations rencontrées.

Exposé

On pourrait se demander : "Alors que la conditionnelle était au singulier, pourquoi les répétitives sont-elles au pluriel ?". Tout simplement parce qu'il y en a deux : le RÉPÈTE et le TANT QUE.

"Mais pourquoi y en a-t-il deux ?" Cela peut se comprendre en examinant certains cas : comparons les deux algorithmes suivants destinés à aller observer le paysage du haut d'une falaise :

Comparaison des répétitives

Ces deux formes de la répétitive semblent équivalentes... à première vue... mais tout dépend des conditions de départ...

Si je suis déjà au bord de la falaise, je préfèrerais utiliser l'algorithme avec le TANT QUE plutôt que l'autre... Je suppose qu'il ne faut pas entrer dans plus d'explications... :O)

Concrétement, dans le RÉPÈTE, les instructions de la boucle devront être exécutées au moins une fois avant que la condition puisse être testée. Dans le TANT QUE, il se peut que les instructions de la boucle ne soient jamais exécutées. Remarque : la condition du TANT QUE est l'inverse de celle d'un RÉPÈTE "équivalent".

En conséquence, la règle sera la suivante :

  • - Quand je suis certain que je peux faire exécuter les instructions de la répétitive au moins une fois sans risque, j'utiliserai un RÉPÈTE;
  • - S'il y a un risque que la première exécution des instructions de la répétitive pose un problème, j'utiliserai un TANT QUE.

Mais, me direz-vous : "Pourquoi alors ne pas utiliser que le TANT QUE ? Il n'y aurait jamais de risque !" Parce que le RÉPÈTE est plus facile à mettre en œuvre, et qu'il économise un test. Voyons cela...

Attention : l'utilisation conjointe d'un RÉPÈTE et d'un SI portant sur les mêmes conditions est une mauvaise pratique, cela traduit en fait la nécessité d'un TANT QUE.

Qui dit "Structure de contrôle" dit "sauts dans la marche à suivre". Quels seront les particularités des sauts dans les répétitives ?

Commençons par examiner la structure RÉPÈTE dans cet algorithme réalisé pour un robot gardien de musée.

Saut de ligne dans le répète

Le RÉPÈTE n'engendre aucune réaction visible dans l'exécution du programme, c'est simplement une balise qui va signaler au programme là où commence la boucle de répétition (tout comme le FIN SI de la conditionnelle signale la fin des instructions du SI correspondant).
En revanche, la condition du JUSQU'À CE QUE va être testée et, à cet endroit, un saut peut avoir lieu :

  • - Soit le résultat du test est FAUX, la boucle doit recommencer et le programme saute à la ligne qui suit le RÉPÈTE correspondant.
  • - Soit le résultat du test est VRAI et le programme sort alors de la boucle en passant à la ligne suivante.

Voyons maintenant la structure TANT QUE, toujours pour un robot gardien de musée, mais avec un programme légèrement différent du précédent :

Saut de ligne dans le TANT QUE

La condition du TANT QUE va être testée et, à cet endroit, un saut peut avoir lieu :

  • - Soit le résultat du test est FAUX, la boucle ne doit plus recommencer et le programme saute à la ligne qui suit le FIN TANT QUE correspondant.
  • - Soit le résultat du test est VRAI, la boucle doit avoir lieu et le programme commence cette boucle en passant à la ligne suivante.
Le FIN TANT QUE a une réaction automatique en toutes circonstances : il provoque d'office un saut à la ligne du TANT QUE correspondant afin que la condition puisse à nouveau être testée.

Réfléchissons un peu...

Ce programme de remplissage de bocaux de cornichons est-il correct ? Fonctionne-t-il en fonction des bocaux différents à remplir ? Pouvez-vous simuler son fonctionnement ?

Mise en bocal de cronichons

À quel stade du programme correspond cette situation ? Quel est le travail qui a déjà été fait ? Que reste-t-il à faire ?

Mise en bocal avancée de cronichons

Ci-dessous, un programme pour une cyber-souris qui doit se nourrir du morceau de fromage. Le souci est que la personne qui a réalisé ce programme ne savait pas, dans cet enclos bordé d'un mur, où se trouvaient exactement la rivière et le pont. Ce programme fonctionne-t-il en toutes circonstances, quelle que soit la disposition des lieux ? L'instruction "Saute" indique à la cyber-souris d'avancer d'un quadrillage.

Programme pour la cyber-souris

Parcours de la cyber-souris

Reste à faire le test pour vérifier la bonne compréhension de cette matière et les exercices des robots. Bon travail.

Retour