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]) :
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 :
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 :
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.
#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.
for
(
i=
0
; i<
15
; i++
) {
printf
(
"
Je me répète pour i valant %d
\n
"
,i);
}
par :
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 :
Pour i allant de ... à ... {
...
Pour j allant de ... à ... {
...
}
}
#include <stdio.h>
int
main (
) {
int
i;
int
j;
for
(
i=
0
; i<
5
; i++
){
printf
(
"
\n
Je 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
;
}
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 :
*
**
***
****
*****
VIII-D. Et les Shadoks fêtèrent Noël…▲
VIII-D-1. Affichage des ramures du sapin▲
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 :
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
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 :
for
(
j=
0
; j<((
2
*
i)-
1
); j++
) {
printf (
"
*
"
);
}
VIII-D-2. Affichage du tronc▲
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) :
@@@
@@@
@@@
VIII-E. Table Ascii▲
Les codes Ascii (c'est‐à‐dire les nombres qui représentent les caractères en informatique) vont de 0 à 255.
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) :
printf (
"
%3d : %c
"
, code_ascii, code_ascii);
int
i =
65
;
printf
(
"
%3d : %c
"
, i, i); // affichera 65 : A
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▲
Corrigé de l'exercice n°7.1 — Étoiles
#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 :
#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
;
}
Corrigé de l'exercice n°7.2 — Sapin
#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
;
}
Corrigé de l'exercice n°7.3 — Tronc
Vous ajoutez ceci :
...
for
(
i=
1
; i<=
3
; i++
)
printf
(
"
@@@
\n
"
);
...
Corrigé de l'exercice n°7.4 — Code Ascii
#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
;
}
Corrigé de l'exercice n°7.5 — Un beau tableau
#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 :
for
(
i=
1
; i<
100
; i=
i+
2
) {
printf
(
"
i vaut:%d
"
,i);
}
i=
1
;
while
(
i<
100
) {
printf
(
"
i vaut:%d
"
,i);
i=
i+
2
;
}