Recherche
1 connecté

  Actuellement : 4 commentaires Les boucles en Delphi

Les boucles en Delphi

 

Introduction

Vous avez pu voir que réaliser un programme consiste à écrire des lignes de codes qui seront exécutées. Ces lignes par défaut sont exécutées les une après les autres.

On a pu voir qu'avec une condition, on peut exécuter une série de lignes de code ou au contraire les sauter.

Exemple

if but='adition' then
begin
  resultat:=a+b;
  ...
end

Les if ne permettent pas de remonter plus haut dans les code. Pour cela, il va falloir employer des 'for', 'while' et autres 'repeat'

 


Les boucles for

  • Ouvrez un nouveau projet.
  • Placez un mémo sur votre form1. Un mémo est un composant qui permet d'afficher des lignes de texte. On va s'en servir pour écrire les résultats.
  • Placez un bouton sur la form1.
  • double cliquez sur ce bouton afin de rentrer le code de son événement OnClick:

Entrez le code suivant :

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;//déclaration de la variable i comme étant un entier
begin
   // effacement des lignes contenues dans le mémo
   Memo1.Lines.Clear;
   for i:=1 to 10 do // notre boucle
  //A noter également l'existence de 
  //for i:=10 downto 1 qui permettra de faire varier i de 10 à 1
   begin
     //ajout d'une ligne dans le mémo.
     // cette ligne aura pour valeur i
     // IntToStr sert à transformer un entier en une chaîne de caractères.
     Memo1.Lines.Add(IntToStr(i));
   end;//fin de la boucle for
end;

Lors du passage sur la ligne for :

  • i va prendre la valeur 1 (for i:=1 to 10...).
  • Le programme va tester si i est inférieur ou égal à 10 (for i:=1 to 10). Si ce n'est pas le cas, il quitte la boucle for c'est à dire qu'il va exécuter le code qui suit cette boucle. Sinon, il va exécuter le code qui se trouve dans la boucle.

Nota :

Si vous n'avez qu'une ligne à exécuter dans la boucle for, vous pouvez mettre directement :

for i:=1 to 10 do Memo1.Lines.Add(IntToStr(i));

(pas besoin dans ce cas du begin et du end).

A noter également l'existence de
for i:=10 downto 1 qui permettra de faire varier i de 10 à 1


 

Le while

  • Reprenez le précédent projet.
  • Placez un autre bouton sur la form1.
  • Double cliquez sur ce bouton afin de rentrer le code de son événement OnClick:

Entrez le code suivant :

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
   // effacement des lignes contenues dans le mémo
   Memo1.Lines.Clear;
   i:=1;
   while i*2<22 do
   begin
     Memo1.Lines.Add(IntToStr(i));
     i:=i+1;
   end;//fin while
end;

A chaque fois que le programme passe sur la ligne du while (en français : "tant que" ), il teste si la condition est remplie. Si elle l'est, les lignes dessous sont exécutées. Arrivé au end (celui que j'ai annoté //fin while), le programme remonte au while. Là il regarde si la condition est remplie... jusqu'au moment où la condition n'est plus remplie. Le programme exécute alors les lignes qui se trouvent sous le end (celui que j'ai annoté //fin while).

Testez votre code en faisant varier les conditions etc...

Nota :

  • On observera que le test est fait au départ. Il y a donc moyen de ne jamais rentrer dans le boucle.
  • i:=i+1 pourrait être avantageusement remplacer par inc(i).
  • Si vous supprimez le i:=i+1, le programme ne sortira jamais de la boucle!!!

 

 


Le repeat ... until

  • Reprenez le précédent projet.
  • Placez un autre bouton sur la form1.
  • double cliquez sur ce bouton afin de rentrer le code de son événement OnClick:

Entrez le code suivant :

procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
   // effacement des lignes contenues dans le mémo
   Memo1.Lines.Clear;
   i:=1;
   repeat
     Memo1.Lines.Add(IntToStr(i));
     i:=i+1;
   until i*2>22 ;
end;

Le repeat ressemble dans le principe au while mais avec les différences suivantes :

  • Le test est fait à la fin de la boucle et non au début => la boucle est toujours exécutée au moins une fois.
  • Le test est d'un point de vue logique le contraire du test à mettre dans un while (ici i*2>22 au lieu de i*2<22).

Testez votre code en faisant varier les conditions etc...

Cliquez ici pour télécharger le source de l'exemple.