[alg3ir cpp] bouclage infini

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [alg3ir cpp] bouclage infini

Message  Dj x-fuse le Jeu 11 Oct 2012, 18:17

Hello tout le monde,

Dans le cadre du projet de cpp de 3ième je code en ce moment la méthode play (oui j'ai un peu de retard), mais je fais face à une boucle infinie dès que je dois déplacer des pions qui dépasse la fin du deque (et donc qui doivent être placés sur ceux du début).

Voici le code source : https://gist.github.com/91d47ba7f1bb47b9d23e
Le main correspond à quelque chose comme : https://gist.github.com/5a49df8266cd97c6dbe8
Et la sortie à ceci :
Code:
[0:R 1:R 2:N 3:B 4:N 5:N 6:R 7:B 8:B ]
bouclage 1
[0: 1:RR 2:N 3:B 4:N 5:N 6:R 7:B 8:B ]
bouclage 2
bouclage 3
[0: 1: 2:NR 3:BR 4:N 5:N 6:R 7:B 8:B ]
bouclage 3
bouclage 4
[0: 1: 2: 3:BRN 4:NR 5:N 6:R 7:B 8:B ]
bouclage 4
bouclage 5
bouclage 6
[0: 1: 2: 3: 4:NRB 5:NR 6:RN 7:B 8:B ]
bouclage 5
bouclage 6
bouclage 7
[0: 1: 2: 3: 4: 5:NRN 6:RNR 7:BB 8:B ]
bouclage 6
bouclage 7
bouclage 8
[0: 1: 2: 3: 4: 5: 6:RNRN 7:BBR 8:BN ]
bouclage 7
bouclage 8
bouclage 9
bouclage 1
bouclage 2
bouclage 3
bouclage 4
bouclage 5
bouclage 6

Une idée ? ^^


Dernière édition par Dj x-fuse le Ven 12 Oct 2012, 12:11, édité 1 fois

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

resolu Re: [alg3ir cpp] bouclage infini

Message  Jhon le Jeu 11 Oct 2012, 23:51

Exécute le code sur papier, tu va voir que c'est un problème de logique.
Quand tu joues le tas 6, à un moment donné nStack=6, lastStackUsed=6 et i=6. Du coup, la ligne 27 devient true, et tu rentres dans viderStack, qui va copier le R à la fin du tas, puis N à la fin du tas, puis R à la fin du tas, et ainsi de suite. Le test ligne 37 va toujours renvoyer false puisque tu ne vides jamais ton tas. D'où la boucle infinie.
Je te laisse trouver la solution Wink

Remarque : on peut virer bouclage et remplacer la ligne 21 par
Code:
i++;
if(i>= this->plateau.size())
    i = 0;
Pour gagner en code et en clarté (et pas écrire pour rien dans i une valeur identique à celle qu'il a déjà).

Jhon

Nombre de messages : 212
Age : 28
Prénom : Jonathan
Statut : promo réseaux 2012
Localisation : 50.879858N,4.34801E
Date d'inscription : 23/09/2008

Revenir en haut Aller en bas

resolu Re: [alg3ir cpp] bouclage infini

Message  Dj x-fuse le Ven 12 Oct 2012, 12:11

Jhon a écrit:Exécute le code sur papier, tu va voir que c'est un problème de logique.
Quand tu joues le tas 6, à un moment donné nStack=6, lastStackUsed=6 et i=6. Du coup, la ligne 27 devient true, et tu rentres dans viderStack, qui va copier le R à la fin du tas, puis N à la fin du tas, puis R à la fin du tas, et ainsi de suite. Le test ligne 37 va toujours renvoyer false puisque tu ne vides jamais ton tas. D'où la boucle infinie.
Je te laisse trouver la solution Wink

Remarque : on peut virer bouclage et remplacer la ligne 21 par
Code:
i++;
if(i>= this->plateau.size())
    i = 0;
Pour gagner en code et en clarté (et pas écrire pour rien dans i une valeur identique à celle qu'il a déjà).

Yep, c'était ça le bug, j'avais fixé ce truc ce matin mais oublié d'edit le post. Wink

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

resolu Re: [alg3ir cpp] bouclage infini

Message  Contenu sponsorisé Aujourd'hui à 08:42


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum