[C]problème pucle langage C
Sportif_C
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai un problème avec les boucles dans ce petit bout de programme. En fait, je cherche à sortir des boucle dès que modifie ==1.
Là, mon programme ne s'arréte pas :(. Je ne vois pas pourquoi!
Pourriez-vous m'aider à identifier eet à la corriger?
Merci par avance.
J'ai un problème avec les boucles dans ce petit bout de programme. En fait, je cherche à sortir des boucle dès que modifie ==1.
Là, mon programme ne s'arréte pas :(. Je ne vois pas pourquoi!
Pourriez-vous m'aider à identifier eet à la corriger?
Merci par avance.
void calculeCircuitExchangeNouveau2(GestionNoeuds *pGestionNoeuds, double **distanceEntreNoeuds, Circuit *pCircuit) { int i, j; int modifie; double cout = 0; do { modifie=0; i=1; do { j=i+1; do { cout = differenceCout(i,j,distanceEntreNoeuds,pCircuit); if(cout < 0.0) { echangeCircuit(i, j, pCircuit ); printf("\n"); affichageCircuit(pCircuit); if((pGestionNoeuds->tableau[pCircuit->tableau[1]].demandProduit1>=0 && pGestionNoeuds->tableau[pCircuit->tableau[1]].demandProduit2 >= 0) && (pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit1 <=0 && pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit2<=0)) { modifie==1; affichageCircuit(pCircuit); } } }while(j<nbreNoeuds); j++; }while(i<nbreNoeuds); i++; }while(modifie==1); }
A voir également:
- [C]problème pucle langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
2 réponses
Je pense que ta principale erreur vient de la ligne modifie==1 dans ton if, qui devrait plutôt être modifie=1.
Sinon l'usage de boucles for est très certainement à privilégier vu tes calculs :
Remarque : vu que tu n'as mis qu'une partie de ton code, je n'ai pas pu vérifier que cela fonctionnait correctement...
Sinon l'usage de boucles for est très certainement à privilégier vu tes calculs :
void calculeCircuitExchangeNouveau2(GestionNoeuds *pGestionNoeuds, double **distanceEntreNoeuds, Circuit *pCircuit)
{
int i, j, modifie;
do
{
modifie=0;
for (i=1; i<nbreNoeuds; i++)
for (j=i+1; j<nbreNoeuds; j++)
{
if(differenceCout(i,j,distanceEntreNoeuds,pCircuit) < 0)
{
echangeCircuit(i, j, pCircuit );
printf("\n");
affichageCircuit(pCircuit);
if( pGestionNoeuds->tableau[pCircuit->tableau[01]].demandProduit1 >=0
&& pGestionNoeuds->tableau[pCircuit->tableau[01]].demandProduit2 >=0
&& pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit1 <=0
&& pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit2 <=0)
{
modifie=1;
affichageCircuit(pCircuit);
}
} // if differenceCout<0
} // for i et j
}
while(modifie==1);
}
Remarque : vu que tu n'as mis qu'une partie de ton code, je n'ai pas pu vérifier que cela fonctionnait correctement...
Bonjour,
J'ai effecté la modification.
Mais le compilateur maintenant n'entre pas dans la boucle do while :(Du coup il n'exécute pas le programme
Des idées pour corriger ça?
Merci par avance de votre aide.
J'ai effecté la modification.
Mais le compilateur maintenant n'entre pas dans la boucle do while :(Du coup il n'exécute pas le programme
Des idées pour corriger ça?
Merci par avance de votre aide.
void calculeCircuitExchangeNouveau2(GestionNoeuds *pGestionNoeuds, double **distanceEntreNoeuds, Circuit *pCircuit) { int i, j, k; int modifie; double cout = 0; do { modifie=0; for(i=1;i<nbreNoeuds;i++) { for(i=j+1;j<nbreNoeuds;j++) { printf("i:%d\n",i); printf("j:%d\n",j); cout = differenceCout(i,j,distanceEntreNoeuds,pCircuit); printf("cout %lf\n",cout); if(cout < 0.0) { echangeCircuit(i, j, pCircuit ); printf("\n"); affichageCircuit(pCircuit); printf("demandP1[10]:%d\n", pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit1 ); printf("demandP1[1]:%d\n", pGestionNoeuds->tableau[pCircuit->tableau[1]].demandProduit1 ); printf("demandP2[10]:%d\n", pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit2 ); printf("demandP2[1]:%d\n", pGestionNoeuds->tableau[pCircuit->tableau[1]].demandProduit2 ); if((pGestionNoeuds->tableau[pCircuit->tableau[1]].demandProduit1>=0 && pGestionNoeuds->tableau[pCircuit->tableau[1]].demandProduit2 >= 0) && (pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit1 <=0 && pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit2<=0)) { modifie=1; affichageCircuit(pCircuit); } } } } }while(modifie==1); }
Qu'est-ce que tu veux dire par il me renvoie la dernière valeur ? Ta fonction ne renvoie aucun résultat !
Personnellement je ne sais pas ce qu'est censé faire ton code, alors il est difficile de savoir sur le fond ce qui peut poser problème... Peut-être qu'avec cet affichage là tu y verras un peu plus clair :
Personnellement je ne sais pas ce qu'est censé faire ton code, alors il est difficile de savoir sur le fond ce qui peut poser problème... Peut-être qu'avec cet affichage là tu y verras un peu plus clair :
void calculeCircuitExchangeNouveau2(GestionNoeuds *pGestionNoeuds, double **distanceEntreNoeuds, Circuit *pCircuit) { int modifie; do { modifie=0; int i,j; for(i=1; i<nbreNoeuds;i++) for(j=i+1;j<nbreNoeuds;j++) { double cout = differenceCout(i,j,distanceEntreNoeuds,pCircuit); printf("i=%d\tj=%d\tcout=%f\n",cout); if (cout<0) { printf("\nEchange %d-%d\n",i,j); printf("Avant\n"); affichageCircuit(pCircuit); echangeCircuit(i, j, pCircuit ); printf("Apres\n"); affichageCircuit(pCircuit); printf("\nTests\n"); printf("demandP1[ 1]=%d\t >=0 ?\n",pGestionNoeuds->tableau[pCircuit->tableau[ 1]].demandProduit1); printf("demandP1[10]=%d\t <=0 ?\n",pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit1); printf("demandP2[ 1]=%d\t >=0 ?\n",pGestionNoeuds->tableau[pCircuit->tableau[ 1]].demandProduit2); printf("demandP2[10]=%d\t <=0 ?\n",pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit2); if( pGestionNoeuds->tableau[pCircuit->tableau[ 1]].demandProduit1>=0 && pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit1<=0 && pGestionNoeuds->tableau[pCircuit->tableau[ 1]].demandProduit2>=0 && pGestionNoeuds->tableau[pCircuit->tableau[10]].demandProduit2<=0) { modifie=1; //affichageCircuit(pCircuit); printf("Modifie ! modifie==1\n"); } else { printf("Non modifie ! modifie==%d\n",modifie); } } // if cout } // for i,j } // do while(modifie==1); }