INF1563 Programmation I


Instructions répétitives



Introduction

Une itération est un processus dans lequel une opération peut être effectuée plus d'une fois.

Exemples :


Combien de fois répéter une action ?

Pour arrêter l'itération :


La boucle "while"

boucle while

Exemple :

"mesurer la température"
tant que "la température < 20 degrés"
  "ajouter du bois de chauffage"
  "attendre 3 minutes"
  "mesurer la température"

En Java :

float temp = Chauffage.getTemperature();
while (temp < 20) {
  Chauffage.ajouterBois();
  Thread.sleep(180000);
  temp = getTemperature()
}

Attention

Exemple : calcul de la somme 1 + 2 + ... + 100

Algorithme (pseudocode) :

somme = 0;
"choisir la première valeur"
while "il reste des valeurs à additionner"
  somme += valeur
  "choisir la valeur suivante"

Code Java

int somme = 0;
int valeur = 1;
final int derniere = 100;

while (valeur <= derniere) {
  somme += valeur;
  valeur++ ;
}
Exemple : calcul de la somme des entiers lus au clavier

Algorithme (pseudocode) :

somme = 0;
"lire la première valeur"
while "il reste des valeurs à additionner"
  somme += valeur
  "lire la valeur suivante"
"afficher la somme"

Code Java

// condition d'arrêt : la dernière valeur est suivie de -1
int valeur, somme = 0;
BufferedReader b = new BufferedReader(new InputStreamReader(System.in));

try {
  String s = b.readLine();       // lecture de la
  valeur = Integer.parseInt(s);  // prochaine valeur
  while (valeur != -1) {
    somme += valeur;
    s = b.readLine();              // lecture de la
    valeur = Integer.parseInt(s);  // prochaine valeur
  }
}
catch (IOException e){
}
System.out.println("somme = " + somme);

La boucle "do while"

On répète au moins une fois un groupe d'instructions; on arrête la boucle lorsque la condition est fausse,

boucle do while

Exemple :

do {
  "faire un traitement";
  "évaluer les résultats";
} while "les résultats ne sont pas satisfaisants";

La boucle "for"

Syntaxe

for ( <instruction d'initialisation>; <condition de continuation>; <instruction de mise à jour> ) <instruction à répéter>;

Problème : afficher les valeurs paires entre 0 et 100 (inclusivement)

Solution

for (int compteur = 0; compteur <= 100; compteur++)
  if (compteur % 2 == 0)
    System.out.println(compteur);

Une autre solution

for (int compteur = 0; compteur <= 100; compteur+=2)
  System.out.println(compteur);

Problème : afficher les valeurs paires entre 1 et 100 (inclusivement), 10 valeurs par ligne

Solution incluant du pseudo-code

for (int compteur = 1; compteur <= 100; compteur++){
  if (compteur % 2 == 0) {
    System.out.print(compteur + " ");
    if ("10 valeurs affichées sur cette ligne")
      System.out.println();
  }
}

Solution

for (int compteur = 1; compteur <= 100; compteur++){
  if (compteur % 2 == 0) {
    System.out.print(compteur + " ");
    if (compteur % 20 == 0)
      System.out.println();
  }
}

Bonne pratique de la programmation

Les deux programmes suivants bouclent infiniment :

La version correcte :

int n = 0;
while (n < 10) {
  System.out.println(n);
  n = n + 1;
}

Conseil :

Quiz

Le programme doit

Quel type de boucle utiliserez-vous ?

while do while for