A › 5 - Boucles

Les boucles servent à exécuter certaines instructions d'un programme de manière répétitive. Les instructions d'une boucle peuvent être soit exécutées un nombre prédéfini de fois, soit exécutées tant qu'une condition est vérifiée.

Structure itérative : instruction for

La syntaxe générale de la boucle for est :

for (initialisation ; condition ; actualisation)

  { instructions à répéter

  }

Une version courante est de la forme :

for (int i=valeurDépart ; i < valeurMax ; i=i+pas)

  { instructions à répéter

  }

Les instructions sont exécutées une première fois si valeurDépart < valeurMax, puis la valeur de i est modifiée par l'instruction i=i+pas. Tant qu'après cette modification la condition i < valeurMax reste vérifiée, les instructions sont répétées et la valeur de i modifiée.

Lorsque la condition i < valeurMax cesse d'ête vraie, on "sort" de la boucle.

Ainsi, pour que la boucle ne soit pas exécutée indéfiniment, il est nécessaire de s'assurer que la condition i < valeurMax finira par ne plus être vraie.

Quelques exemples ?

background(238,51,87);

for (int i=30; i<80 ; i=i+10) // i prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 10 en 10 : l'instruction de la boucle sera donc exécutée 5 fois, et i prendra les valeurs : 30, 40, 50, 60 et 70

  {line(i,40,i,60); // pour chaque valeur de i un segment vertical d'abscisse i est tracé entre les ordonnées 40 et 60

  }

Voici quelques codes très similaires, faisant intervenir la même boucle. L'indice de la boucle est utilisé pour faire varier la position du centre d'une ellipse et/ou ses dimensions . Tous les codes des figures de ce paragraphe commencent par les 3 lignes :

background(238,170,0);

noFill();

for (int i=30; i<80 ; i=i+10) // i prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 10 en 10

  {ellipse(i,50,30,30); // i est l'abscisse des centres des ellipses, qui sont toutes des cercles de même diamètre

  }

  {ellipse(i,i,30,30); // i est à la fois l'abscisse et l'ordonnée des centres des ellipses, qui sont toutes des cercles de même diamètre

  }

  {ellipse(50,50,i,30); // les ellipses ont le même centre et i influe sur la largeur uniquement

  }

  {ellipse(50,50,i,i); // i est le diamètre des ellipses, qui sont des cercles de même centre fixe

  }

  {ellipse(i,50,i,i); // i est à la fois l'abscisse des centres des cercles, et leur diamètre

  }

Boucles imbriquées

On peut "imbriquer" plusieurs boucles for pour disposer de plusieurs variables, évoluant chacune de façon déterminée.

Par exemple, deux variables permettent de faire varier des coordonnées dans un plan.

Voici à nouveau quelques codes très similaires, faisant intervenir les deux mêmes boucles imbriquées. Les indices des boucles sont utilisés ici uniquement pour faire varier la position des objets tracés.

Tous les codes des figures de ce paragraphe commencent par :

background(244,109,31);

for (int i=30; i<80 ; i=i+10) // i prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 10 en 10

  {for (int j=30; j<80 ; j=j+20) // j prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 20 en 20

    {ellipse(i,j,8,8); // tracé d'un cercle de diamètre 8, centré en (i,j)

    } // fin des instructions du 2e for

  } // fin des instructions du 1er for

for (int i=30; i<80 ; i=i+10) // i prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 10 en 10

  {for (int j=30; j<80 ; j=j+20) // j prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 20 en 20

    {rect(i,j,3,8); // tracé d'un rectangle à partir du point de coordonnées (i,j)

    } // fin des instructions du 2e for

  } // fin des instructions du 1er for

for (int i=30; i<80 ; i=i+10) // i prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 10 en 10

  {for (int j=30; j<80 ; j=j+20) // j prend toutes les valeurs de 30 (inclus) à 80 (exclus), de 20 en 20

    {rect(i,j,10,20); // tracé d'un rectangle à partir du point de coordonnées (i,j)

    } // fin des instructions du 2e for

  } // fin des instructions du 1er for

Une autre structure pour la boucle for

On peut faire parcourir à une variable toutes les valeurs d'un tableau à l'aide de l'instruction for.

La syntaxe est alors : for (typeDeLaVariable nomDeLaVariable : nomDuTableau)

où nomDuTableau est un tableau de données du type typeDeLaVariable.

Un exemple :

background(31,158,234);

stroke(255);

int[] tableau = { 11, 13, 17, 25, 37, 53, 73, 97 }; // tableau d'entiers

for (int i : tableau) // i parcourt l'ensemble des valeurs du tableau

  {

  line(10,i,90,i); // ligne horizontale d'ordonnée i

  }

Compléments

L'instruction continue; permet de suspendre l'exécution des instructions d'une boucle pour une ou plusieurs valeurs de la variable de la boucle for.

L'instruction break; permet d'interrompre l'exécution des instructions d'une boucle et de "sortir" de la boucle.

Deux exemples :

background(31,158,234);

stroke(255);

for (int i=10;i<100; i=i+10)

  {

  if (i==70){

    continue; // Le tracé ne sera pas effectué pour i=70

    }

  line(10,i,90,i); // ligne horizontale d'ordonnée i

  }

background(31,158,234);

stroke(255);

for (int i=10;i<100; i=i+10)

  {

  for (int j=10;j<100; j=j+10)

    {

    if (i+j >90){

      break; // si i+j>90, on sort de la boucle en cours, portant sur j : les valeurs suivantes de j ne sont pas prises en compte ; on poursuit avec la valeur suivante de i

      }

    rect(i,j,5,5);

    } // fin 2e for

  } // fin 1er for