[C]problème pucle langage C
Fermé
Sportif_C
-
23 juil. 2011 à 14:33
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 23 juil. 2011 à 18:06
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 23 juil. 2011 à 18:06
A voir également:
- [C]problème pucle langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Dev-Pascal - Télécharger - Édition & Programmation
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 juil. 2011 à 14:52
23 juil. 2011 à 14:52
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); }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 juil. 2011 à 16:16
23 juil. 2011 à 16:16
Si il entre dans la boucle do while, mais c'est au niveau des boucles for que ça coince...
Tu as mis for(i=j+1;j<nbreNoeuds;j++) au lieu de for(j=i+1;j<nbreNoeuds;j++) comme j'avais mis...
Comme j n'est pas initialisé, sa valeur est arbitraire, et on a potentiellement j>=nbreNoeud
Tu as mis for(i=j+1;j<nbreNoeuds;j++) au lieu de for(j=i+1;j<nbreNoeuds;j++) comme j'avais mis...
Comme j n'est pas initialisé, sa valeur est arbitraire, et on a potentiellement j>=nbreNoeud
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 juil. 2011 à 18:06
23 juil. 2011 à 18:06
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); }