psykostik
Messages postés23Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention30 mai 2006
-
20 avril 2006 à 09:19
psykostik
Messages postés23Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention30 mai 2006
-
20 avril 2006 à 10:45
Bonjour, j'ai un problème étrange avec une boucle que je n'arrive pas à résoudre. voici le code :
if(val<18)
{
Tdez.Text = Convert.ToString(val);
if (Tab[val] > Tab[val]+1)
{
compte = val;
do
{
mem = Tab[compte + 1];
Tab[compte + 1] = Tab[compte];
Tab[compte] = mem;
compte = compte - 1;
if (compte < 0)
{
compte = 0;
}
timer1.Start();
timer2.Start();
} while (Tab[compte + 1] < Tab[compte]);
}
val = val + 1;
}
la variable val est une variable static et n'est utilisée qu'ici dans ce code, or malgrès le if la boucle ne s'éxécute qu'une fois ( malgrès les 18 fois demandées) et si je mets une boucle for alors la c'est les timers qui ne sont plus respectées car la boucle s'éxecute avant que le timer ne ce soit terminé.
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 20 avril 2006 à 10:41
Donc tu l'a dis toi même, Tab[val+1] devient forcement plus grand que Tab[val], donc tu sors tout de suite du while, et ca ne boucle plus...
Par contre, tu dis : ensuit j'incrément val donc je passe à un cas suivant. Ce n'est pas ce que tu fais dans l'exemple que tu as mis ici : tu incrémente val, mais tu ne fais rien d'autre... tu étais dans un if, donc ca ne boucle pas (le if n'est pas une boucle). Tu incrémente val, et tu sors.
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 20 avril 2006 à 10:22
Dans ton premier if, tu test si Tab[val] > Tab[val + 1], et tu rentre si c'est vrai...
Ensuite, tu inverse ces deux éléments.
Puis tu boucle tant que Tab[val +1] < Tab[val]...
Ce qui est forcément faut puisque c'était vrai mais que tu viens de les inverser...
Tu ressors donc tout de suite de ta boucle apres la premiere inversion...
psykostik
Messages postés23Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention30 mai 2006 20 avril 2006 à 10:27
Non car en utilisant ma fonction j'inverse les nombres, de ce fait Tab[val+1] devient forcement plus grand que Tab[val] au bout d'un moment mais ensuit j'incrément val donc je passe à un cas suivant, donc je sors normalement quand tout les cas de mon tableau sont analysés or la j'analyse que la première valeur malgrès le if(val<18).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 20 avril 2006 à 10:28
Comme tu le dis, Tab[val+1] est plus grand que Tab[val], donc tu sort du while, tu sors tu if, tu incrémente val, tu sors de l'autre if... et fin du code. A moins qu'il y est une autre boule ?