problème de compréhension pour ce code - C - Programmation
Marsh Posté le 29-03-2010 à 18:14:27
Je comprends pas ta question. En C, les indices de tableau partent de 0, donc si ton tableau a 10 cases (cf. déclaration), pour le parcourir, tu dois décrire les indices 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9. C'est à dire de 0 à (taille du tableau - 1).
Le gros problème du code que t'as collé, c'est que tu fais une première boucle for(j), mais que t'utilises jamais le j en question.
Marsh Posté le 29-03-2010 à 18:14:48
Pour gagner une itération. De toute façon ce tri n'est pas optimisé, alors une boucle de plus ou de moins ...
Marsh Posté le 29-03-2010 à 18:20:19
snafu8 >> C'est le tri bulle, version de base sans aucune optimisation, donc la première boucle est obligatoire.
Marsh Posté le 29-03-2010 à 20:06:12
Trap D a écrit : snafu8 >> C'est le tri bulle, version de base sans aucune optimisation, donc la première boucle est obligatoire. |
Merci Trap..
Alors le -1 de la boucle for (j = 0; j < tailleTableau-1; j++) ne sert a rien car cette boucle ne parcourt pas le tableau met permet de répéter la 1ere boucle.. Alors pourquoi mettre le -1 dans cette boucle?
Marsh Posté le 29-03-2010 à 20:31:06
Pour répéter la boucle tailleTableau-1 fois parce que ce n'est pas nécessaire de la répéter plus (la boucle intérieure place au moins un élément à sa place et dans un contexte tel qu'il ne sera plus déplacé)
Marsh Posté le 29-03-2010 à 22:24:03
Donc le fait de mettre -1 dans la 1ere boucle (j = 0; j < tailleTableau-1; j++) cela va permettre de faire une boucle en moins?
Par contre mettre -1 dans la 2eme boucle (i = 0; i < tailleTableau-1; i++) est indispensable pour ne pas sortit du tableau.
J'ai essayé de (j = 0; j < 1000; j++) et cela fonctionne parfaitement..
Je comprend plus rien..
Marsh Posté le 01-04-2010 à 23:47:05
lassault1 a écrit : Donc le fait de mettre -1 dans la 1ere boucle (j = 0; j < tailleTableau-1; j++) cela va permettre de faire une boucle en moins? |
dans ton exemple tu donnes un tableau d'entiers avec 10 elements, et si tu regardes dans la seconde boucle tu compares
Code :
|
donc si, i arrive a 9 , tu vas comparer tableau[i]<==>tableau[i+1] donc [i]tableau[9]<==>tableau[10] et tu risque d'avoir un joli SEGFAULT ^^ ou bien valgrind va te gueuler dessus car la dernière case de ton tableau est tableau[9].
dans un algo pareil, un tour de boucle en plus ou en moins ne se verra pas du tout, c'est juste pour eviter que tu ailles trop loin dans ta memoire.
Lance valgrind et il me semble qu'il va te dire "invalid read [...]".
Je peux te proposer autre chose:
Code :
|
Dite moi si vous voyez une faute dans mon algo.
Marsh Posté le 02-04-2010 à 09:49:05
Lassault1, t'es un peu gonflé d'ouvrir un 2ième topic pour le même code qu'on t'as déjà expliqué dans l'autre en long, en large et en travers, surtout pour un algo aussi simple
http://forum.hardware.fr/hfr/Progr [...] 8344_1.htm
Marsh Posté le 29-03-2010 à 17:25:40
Bonjour a tous
J'ai un petit problème de compréhension pour ce code :
Le -1 de la boucle for (i = 0; i < tailleTableau-1; i++) sert a ne sortir du tableau car cette boucle parcourt le tableau donc le -1 est indispensable... j'ai compris c'est ok!
Mais le -1 de la boucle for (j = 0; j < tailleTableau-1; j++) ne sert a rien car cette boucle ne parcourt pas le tableau met permet de répéter la 1ere boucle.. Alors pourquoi mettre le -1 dans cette boucle?
Message édité par lassault1 le 29-03-2010 à 17:29:20