Boucles for imbriquées

Boucles for imbriquées - C - Programmation

Marsh Posté le 21-09-2009 à 17:02:26    

Bonjour,
 
Voici un code imbriquant deux boucles for:
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.   int i,j;
  6.   for (i=0;i<3;i++){
  7.     for (j=1;j<=2;j++){
  8.       printf("%d %d ", i, j);
  9.     }
  10.   }
  11.   printf("\n" );
  12.   return 0;
  13. }


 
Après exécution, on se rend compte que le programme affiche 0 1 0 2 1 1 1 2 2 1 2 2.
Seulement, j'aurais bien aimé comprendre comment ça fonctionne, en le faisant pas à pas:
 
au départ, on part avec i=0 et j=1; la condition dans chacune des boucles est respectée, on affiche donc i et j, soit 0 et 1. Jusque là ça va. :)  
Ensuite, on incrémente j de 1, on passe donc à j=2, condition de boucle toujours respectée, on affiche donc 0 et 2. Cela va toujours. ;)  
C'est maintenant que ça bloque.. on incrémente j de 1, j passe donc à 3, et la condition de boucle n'étant plus respectée, on en sort, et on se retrouve avec la première (c'est bien ça?)  
i est incrémenté de 1, soit i=1, mais après je ne vois plus comment raisonner, étant sorti de la seconde boucle..  :??:  
 
Merci d'avance!

Reply

Marsh Posté le 21-09-2009 à 17:02:26   

Reply

Marsh Posté le 21-09-2009 à 20:15:50    

ton raisonnement est bon.
 
Quand tu sors de la deuxième boucle (j), i est incrémenté de 1, et j retourne à 1 (for j=1; ...), tu affiches donc 1 1, puis 1 2 ...
 
Ca serait surement plus lisible si tu remplaçait ton printf par :  

Code :
  1. printf("i=%d j=%d\n",i,j);

Reply

Marsh Posté le 22-09-2009 à 01:04:31    

D'après ton autre post, tu utilises un IDE, il doit sûrement inclure un debugger. Sinon tu devrais facilement pouvoir en trouver un. C'est l'outil idéal pour les questions comme celles là puisque cela te permet de suivre l'exécution de ton programme ligne par ligne en te donnant la possibilité de voir le contenu de toutes tes variables.
N'hésite pas à t'en servir au maximum et à poser des questions si tu as besoin d'un coup de main pour son utilisation.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 22-09-2009 à 01:24:22    

dj_titeuf a écrit :


C'est maintenant que ça bloque.. on incrémente j de 1, j passe donc à 3, et la condition de boucle n'étant plus respectée, on en sort, et on se retrouve avec la première (c'est bien ça?)  
i est incrémenté de 1, soit i=1, mais après je ne vois plus comment raisonner, étant sorti de la seconde boucle..  


Ben ensuite comme le corps de la première boucle (celle qui fait varier i) s'exécute de nouveau intégralement, tu recommences entièrement la seconde boucle qui repart à son initialisation j=1 et cette seconde boucle se redéroule de nouveau intégralement (comme tu l'as analysée la première fois mais à la différence que i vaut maintenant 1)...


Message édité par Sve@r le 22-09-2009 à 01:33:59

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed