IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le C en 20 heures


précédentsommairesuivant

VIII. Boucles

VIII-A. Et les Shadoks pédalèrent pendant 15 tours

Afin d'effectuer un certain nombre de fois une tâche, nous utilisons l'instruction for de la façon suivante (avec i, une variable de type entier [int par exemple]) :

 
Sélectionnez
for (i=point de départ; i<point d'arrivée; i=i+pas) {
   instruction(s) répétées(s);
}

Ceci est rigoureusement équivalent à cela :

 
Sélectionnez
i=point de départ;

while (i<point d'arrivée) {
   instruction(s) répétées(s);

   i=i+pas;
}

Par souci de simplicité, nous dirons simplement que l'incantation suivante :

 
Sélectionnez
for (i=0; i<15; i++) {
   instr;
}

signifie que l'on va exécuter instr pour i variant de 0 à 14 inclus (<15) c'est-à-dire 15 fois.

Par exemple :
 
Sélectionnez
#include <stdio.h>
int main () {
   int i;
   for (i=0; i<15; i++){
      printf("Je me répète pour i valant %d\n",i);
   }
   printf("L'instruction a été répétée... 15 fois\n");
   return 0;
}

VIII-B. Syntaxe

De la même façon que le if, le for ne nécessite pas d'accolades s'il n'y a qu'une instruction à répéter.

Nous pouvons utiliser cette fonctionnalité dans le programme précédent en remplaçant :
 
Sélectionnez
for (i=0; i<15; i++) {
   printf("Je me répète pour i valant %d\n",i);
}

par :
 
Sélectionnez
for (i=0; i<15; i++)
   printf ("Je me répète pour i valant %d\n",i);

VIII-C. Notion de double boucle

Il est possible de remplacer les instructions contenues dans une boucle par une autre boucle afin de réaliser une double boucle. Nous obtenons donc :

 
Sélectionnez
Pour i allant de ... à ... {
   ...
   Pour j allant de ... à ... {
      ...
   }
}
Par exemple :
 
Sélectionnez
#include <stdio.h> 
int main () {
   int i;
   int j;
   for (i=0; i<5; i++){
      printf("\nJe suis dans la boucle i, i vaut %d\n",i);
      for (j=3; j>0; j--)
         printf("Je suis dans la boucle j, j vaut %d\n",j);
   }
   return 0;
}

Image non disponible Exercice n°7.1 — Étoiles

p.11En utilisant une double boucle, écrire un programme qui affiche une étoile, passe à la ligne, affiche deux étoiles, passe à la ligne, affiche trois étoiles… jusqu'à cinq étoiles afin d'obtenir ceci :

 
Sélectionnez
*
**
***
****
*****

VIII-D. Et les Shadoks fêtèrent Noël…

VIII-D-1. Affichage des ramures du sapin

Image non disponible Exercice n°7.2 — Sapin

À l'aide d'une double boucle, réalisez un cône pour dessiner le haut du sapin sur 10 lignes.

Vous devriez obtenir ceci :

 
Sélectionnez
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************

Image non disponible Instructions :

  • sur la ligne n° 1, afficher 9 espaces puis 1 étoile ;
  • sur la ligne n° 2, afficher 8 espaces puis 3 étoiles ;
  • sur la ligne n° 3, afficher 7 espaces puis 5 étoiles ;
  • sur la ligne n° i, afficher 10-iespaces puis 2*i-1 étoiles.

Nous obtenons donc par exemple pour l'affichage des étoiles sur la ligne i :

 
Sélectionnez
for (j=0; j<((2*i)-1); j++) {
   printf ("*");
}

VIII-D-2. Affichage du tronc

Image non disponible Exercice n°7.3 — Tronc

Pour poursuivre le sapin, il nous faut maintenant dessiner le tronc. Écrivez la suite du programme en dessinant le tronc à l'aide du caractère @. Vous devriez obtenir ceci (juste pour le tronc) :

 
Sélectionnez
@@@
@@@
@@@

VIII-E. Table Ascii

Les codes Ascii (c'est‐à‐dire les nombres qui représentent les caractères en informatique) vont de 0 à 255.

Image non disponible Exercice n°7.4 — Code Ascii

Écrivez un programme qui fait afficher, sur des lignes successives, les codes Ascii avec les caractères qui leur correspondent (vous pouvez commencer l'affichage à partir du code 32 et vous arrêter au code 127).

Pour faire afficher le caractère associé à un code Ascii, vous utiliserez l'instruction ci‐dessous (le %3d signifie que le nombre va être affiché en utilisant un emplacement qui fait trois caractères de long) :

 
Sélectionnez
printf ("%3d : %c", code_ascii, code_ascii);
Par exemple :
 
Sélectionnez
int i = 65;
printf("%3d : %c", i, i); // affichera 65 : A

Image non disponible Exercice n°7.5 — Un beau tableau

Même chose, mais avec un joli affichage, par exemple sous la forme d'un tableau sur huit colonnes…

VIII-F. Corrigés des exercices du chapitre

Image non disponible Corrigé de l'exercice n°7.1 — Étoiles

 
Sélectionnez
#include <stdio.h> 
#include <stdlib.h> 
int main () {
   int i;
   int j;
   for (i=1; i<=5; i++){
      for (j=1; j<=i; j++){
         printf ("*");
      }
      printf ("\n");
   }
   return 0;
}

Nous aurions aussi pu écrire :

 
Sélectionnez
#include <stdio.h> 
#include <stdlib.h> 
int main () {
   int i;
   int j;
   for (i=1; i<=5; i++){
      for (j=1; j<=i; j++) // pas d'accolades nécessaires...
         printf("*");
      printf("\n");
   }
   return 0;
}

Image non disponible Corrigé de l'exercice n°7.2 — Sapin

 
Sélectionnez
#include <stdio.h> 
#include <stdlib.h> 
int main () {
   int i;
   int j;
   for (i=1; i<=10; i++) {
      for (j=0;j<10-i;j++) // les espaces...
         printf(" ");
      for (j=0; j<(i*2-1); j++)
         printf("*");
      printf("\n");
   }
   return 0;
}

Image non disponible Corrigé de l'exercice n°7.3 — Tronc

Vous ajoutez ceci :

 
Sélectionnez
...
for (i=1; i<=3; i++)
    printf(" @@@\n");
...

Image non disponible Corrigé de l'exercice n°7.4 — Code Ascii

 
Sélectionnez
#include <stdio.h> 
#include <stdlib.h> 
int main () {
   int i;
   int j;
   for (i=32; i<128; i++)
      printf("%3d %c\n",i,i);
   return 0;
}

Image non disponible Corrigé de l'exercice n°7.5 — Un beau tableau

 
Sélectionnez
#include <stdio.h> 
#include <stdlib.h> 
int main () {
   int i;
   int j;
   for (i=4; i<16; i++) {
      for(j=0; j<8; j++) {
            printf("%3d %c  ",i*8+j,i*8+j);
      }
      printf("\n");
   }
   return 0;
}

VIII-G. À retenir

Retenez l'équivalence entre les deux programmes suivants :

 
Sélectionnez
for (i=1; i<100; i=i+2) {
   printf("i vaut:%d",i);
}
 
Sélectionnez
i=1;
while (i<100) {
   printf("i vaut:%d",i);
   i=i+2;
}

précédentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Eric Berthomier et Daniel Schang et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.