Boucle infinie

Résolu/Fermé
AmIlLoU33 Messages postés 10 Date d'inscription vendredi 7 juin 2013 Statut Membre Dernière intervention 10 juillet 2013 - 17 juin 2013 à 15:50
AmIlLoU33 Messages postés 10 Date d'inscription vendredi 7 juin 2013 Statut Membre Dernière intervention 10 juillet 2013 - 18 juin 2013 à 09:05
Bonjour,

j'ai un problème sur un algorithme Scilab, lors de l'exécution le programme plante et la boucle while tourne indéfiniment. Je n'arrive pas à voir pourquoi. Si quelqu'un passe par là et peut m'aider, il est le bienvenu. Voici mon code:


//On veut générer toutes les permutations de n elements
n=input('Entrez le nombre d''elements a permuter');
land=zeros(1,n); // vecteur des surfaces
X=zeros(1,n); //vecteur de la permutation des n elements a permuter
Y=zeros(1,n); //vecteur des couts marginaux par joueur
for i=1:n;
land(i)=input('Entrer la surface de l''asa')
X(i)=i;
end
A=perms(X)
disp(A) //matrice de toutes les permutations de n elements (taille n*n!)
j=factorielle(n);
for i=1:j;
LP(i)=(A(i,:)); //on extrait chaque ligne de A (=>liste des permutations)
disp(LP(i))
N(i)=string(LP(i));
P(i)=strcat(N(i));
disp(P(i))

end

//Calcul des couts marginaux
for i=1:n //pour chaque joueur i on veut son vecteur de couts marginaux
for j=1:factorielle(n) // on parcourt les permutations
b=string(LP(j));
c=part(b,j);
while evstr(c)~=i,// on recherche l'ordre d'apparition du joueur i
som_surf=som_surf+land(evstr(c))
end
cout1=cout1+cout(som_surf)
som_glob=som_surf+land(i)
cout2=cout2+cout(som_glob)
Y(j)=cout2-cout1
end
end

Merci d'avance.

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
17 juin 2013 à 17:17
Bonjour,

Je vais peut-être dire une bêtise, car je n'ai jamais pratiqué Scilab...

Mais dans ta boucle while :
while evstr(c)~=i,// on recherche l'ordre d'apparition du joueur i
    som_surf=som_surf+land(evstr(c))
end 

Tu fais un test impliquant c et i (je ne sais même pas ce que ~= signifie...), et ni l'un ni l'autre ne sont modifiés dans le corps de la boucle.
Résultat, c et i auront toujours la même valeur à chaque itération de la boucle, et celle-ci se répètera à l'infini.

Xavier
1
AmIlLoU33 Messages postés 10 Date d'inscription vendredi 7 juin 2013 Statut Membre Dernière intervention 10 juillet 2013
18 juin 2013 à 09:05
Bonjour Xavier,

merci beaucoup pour ta réponse, en effet tu as surement raison il faut que je fasse un opération sur c ... ("~=" signifie "différent de").

Merci pour ton aide :)
0