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 -
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.
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
Bonjour,
Je vais peut-être dire une bêtise, car je n'ai jamais pratiqué Scilab...
Mais dans ta boucle while :
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
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