La boucle "répéter" en Delphi Pascal

Une première solution pour éviter l'ennui

Arc-en-ciel Les deux applications de la page précédente sont basées sur le même principe: on demande X fois de suite à l'utilisateur de fournir une information.
Il s'agit donc bien de répéter X fois la même séquence d'instructions.

La solution fatigante

 Pour la résolution de la première application, on pourrait proposer une solution du type suivant. 

  • Le composant TButton s'appelle Button et le composant TListBox s'appelle Couleurs
  • Nous utilisons donc la méthode  Add de la composante Items de l'objet Couleurs

(voir la leçon précédente).

procedure TForm1.Button1Click(Sender: TObject);
var UneCouleur: string;
begin
UneCouleur := InputBox('Tes couleurs préférées', 'Nom de la couleur', '');
Couleurs.Items.Add( UneCouleur);
UneCouleur := InputBox('Tes couleurs préférées', 'Nom de la couleur', '');
Couleurs.Items.Add( UneCouleur);
UneCouleur := InputBox('Tes couleurs préférées', 'Nom de la couleur', '');
Couleurs.Items.Add( UneCouleur);
end;
Ouais, et j'ai même tapé six fois la même chose pour le deuxième exercice.
Voyons comment simplifier.

Une solution plus élégante

On constate que le programme est bien composé de la répétition du bloc d'instructions :

UneCouleur := InputBox('Tes 3 couleurs préférées', 'Nom de la couleur', '');
Couleurs.Items.Add( UneCouleur);

Il suffirait donc de confier à l'ordinateur que l'on souhaite répéter plusieurs fois la même action. On aurait donc quelque chose comme:

Répéter

UneCouleur := InputBox('Tes 3 couleurs préférées', 'Nom de la couleur', '');
Couleurs.Items.Add(UneCouleur);

Jusqu'à

ce que ce soit fini

La structure indiquée ci-dessus et dans laquelle une ou plusieurs instructions sont répétées un certain nombre de fois est appelée une boucle

.

Nous verrons, dans le cadre de ce cours, qu'il existe plusieurs sortes de boucle. Durant cette leçon, nous n'étudierons que la boucle "répéter".

Je sens déjà que la formule "jusqu'à ce que ce soit fini" est trop compliquée pour être comprise par un ordinateur.

Beaucoup trop compliquée, effectivement. Il faut nous rabaisser à son niveau.

Arc-en-ciel Pour indiquer à l'ordinateur que toutes les informations ont été données, on pourrait utiliser plusieurs méthodes. Parmi celles-ci:

  1. compter le nombre de couleurs déjà fournies et arrêter la boucle quand on a compté 3;
  2. décider que, lorsque c'est fini, on n'indique aucune couleur et on laisse la zone de saisie vide;
  3. ...
Nous allons adopter cette deuxième méthode, bien qu'elle ne soit pas parfaite. Nous le montrerons plus tard.

La boucle devient.

Répéter
UneCouleur := InputBox('Tes couleurs préférées', 'Nom de la couleur', '');
Couleurs.Items.Add(UneCouleur);
Jusqu'à UneCouleur = ''

En langage Delphi Pascal, on écrira finalement:

procedure TForm1.Button1Click(Sender: TObject);
var UneCouleur: string;
begin
repeat
UneCouleur := InputBox('Tes couleurs préférées', 'Nom de la couleur', '');
Couleurs.Items.Add( UneCouleur);
until UneCouleur = '';
end;

La forme générale de la boucle "Répéter" en Delphi Pascal est donc

repeat
Instruction 1
Instruction 2
...
Instruction n
until <expresion logique>

La structure "repeat... until..." peut contenir un nombre indéfini d'instructions.

Le début du bloc est marqué par le mot-clef "repeat"; la fin du bloc est marquée par le mot-clef "until".

Il n'est donc pas nécessaire d'encadrer le bloc par "begin" et "end".

  • Dans le texte de ton programme Couleurs, introduis le texte ci-dessus en remplacement de la procédure existante.
  • Exécute l'application en mode "pas à pas approfondi" en suivant l'exécution des instructions. Veille à frapper simplement Enter, sans indiquer le moindre caractère, après avoir introduit la troisième couleur.
  • Vérifie que la boucle s'arrête quand la variable UneCouleur est vide.
  • Vérifie que la liste contient bien les trois couleurs données.

As-tu détecté le petit problème dans la méthode? Discutes-en avec le professeur.

Quand tu as bien compris le fonctionnement de la boucle présentée ici, passe à la page suivante. Vers la page suivante Page suivante


Dernière modification 20/08/2016 Test dans /info ...