Boucle infinie

Résolu
AmIlLoU33 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
AmIlLoU33 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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   Statut Membre Dernière intervention  
 
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