langage C: problème avec mon programme
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 31

langage C: problème avec mon programme



  1. #1
    invite8b421ec7

    langage C: problème avec mon programme


    ------

    Bonjour,

    SVP j'ai besoin de votre aide dans mon programme qui ne renvoie pas le bon résutat.
    Merci par avance.
    J'ai une suite des noeuds suivante:

    0, 1, 2, 3, 4, 5.
    J'ai la demande respectivement sur les noeuds
    0, -1, 1, 3, -3, 1

    J'ai aussi les distances entre tous les noeuds (la distance est symètrique):
    distance(0,0) = 0
    distance(0,1) = 4
    distance(0,2) = 3
    distance(0,3) = 2
    distance(0,4) = 5
    distance(0,5) = 1
    distance(1,0) = 4
    distance(1,1) = 0
    distance(1,2) = 3
    distance(1,3) = 4
    distance(1,4) = 5
    distance(1,5) = 6
    distance(2,0) = 4
    distance(2,1) = 1
    distance(2,2) = 0
    distance(2,3) = 4
    distance(2,4) = 5
    distance(2,5) = 6
    distance(3,0) = 2
    distance(3,1) = 3
    distance(3,2) = 4
    distance(3,3) = 0
    distance(3,4) = 5
    distance(3,5) = 6
    distance(4,0) = 4
    distance(4,1) = 0
    distance(4,2) = 3
    distance(4,3) = 4
    distance(4,4) = 0
    distance(4,5) = 6
    distance(5,0) = 1
    distance(5,1) = 4
    distance(5,2) = 3
    distance(5,3) = 1
    distance(5,4) = 5
    distance(5,5) = 0

    Je cherche à insérer à chaque fois le noeud le plus proche dans la variable tableau et je teste si la charge entre les noeuds précedent et ce noeud est positive ou égale à zero.Si c'est OK(la condition est vrai), je l'insère . Sinon, je cherche un autre noeud plus proche au noeud précédent. Je vérifie ensuite que la condition est vrai et ainsi de suite jusqu'à ce que tous les noeuds sont insérés.
    Voici la formule de calcul de la charge:
    charge = demande (i-1)+ demande(i).

    Voici à quoi ressemble le résultat:
    i=0
    je mets zero au debut dans mon tableau
    tableau[0] = 0
    i=1
    je cherche le noeud le plus proche par rapport au noeud précedent (le noeud 0):
    Quel est le noeud le plus proche à zero?
    C'est le noeud 5 car distance(0,5) est la plus petite. La charge entre le noeud precedent (le noeud zero)et ce noeud (neoud 5) est négative. Donc, je ne prends pas.
    -->Je vais chercher alors une autre noeud parmi les noeuds restants.
    tableau[1] = ?
    i=2
    Quel est le noeud le plus proche au noeud 0?
    on a la distance (0,3) est plus petite car distance(0,5)<distance(0,3). Je vérifie la charge. La charge est positive. Donc, je le prends.
    tableau [2]= 3

    i=3
    quel est le neoud le plus proche au noued 3?
    C'est le noeud 1.Car la distance(3,1)est plus la plus petite. Je ne peut pas prendre le neoud 0 ou le noeud 3 car je l'ai dejà dans mon tableau.
    Je verifie le test: la charge est >=0? oui car 1+(-1)=0.
    Donc, je prends
    tableau[3] = 1
    et ainsi de suite.

    Ci-dessous mon programme. Mon problème c'est dans le cas où le noeud le plus proche sélectionnée ne vérifie pas la condition (la condition est faux).
    Je m'explique.

    Dans l'exemple ci-dessus à i=1:le noeud le plus proche est 5.
    Mais, la condition n'est pas vrai( la charge est négative).
    Alors, je dois chercher un autre noeud proche au noeud précédent (noeud zéro)et qui vérifie cette condition.
    Mon algorithme me prends toujours le noeud 5.
    Je ne vois pas comment corriger ça . Il doit prendre le noeud suivant le plus proche au noeud zero à savoir le neoud 3.
    Merci par avance de vos aides.
    Voici mon code.
    Code:
     typedef struct Noeuds Noeuds ;
    struct Noeuds
    {
          int no;
          double x;
          double y;
          int demand;
     };
    
    /* cette strucutre n'est pas indispensable, mais fourni une aide */
    typedef struct GestionNoeuds GestionNoeuds;
    struct GestionNoeuds
    {
          Noeuds tableau[nbreNoeuds]; /* tableau de Noeuds */
          double **distanceEntreVertices;
    
    };
    struct Circuit
    {
         int tableau[nbreNoeuds];
    
    };
    typedef struct Circuit Circuit;
    /**
    *allocation dynamique de la structure Circuit
    */
    
    Circuit *allocationCircuit(void)
    {
         Circuit *pCircuit;
          pCircuit = malloc(sizeof *pCircuit);
    
          return pCircuit;
    }
    
    /**
    *Cette fonction permet de construire la Circuit->tableau
    */
    Circuit* creationCircuit(int noeudDepart, double **distanceEntreNoeuds, Noeuds tableau[nbreNoeuds] )
    {
         int i;
         int j;
         Circuit *pCircuit;
         pCircuit= allocationCircuit();
    
        /* Ici, on va constituer une solution. */
    
        /* On initialise */
         for (i=0 ; i<nbreNoeuds ; i++)
            pCircuit->tableau[i] = i;
         int noeudDebut = 0;
         int temp;
         int charge = 0;
         pCircuit->tableau[0] = noeudDebut;
         charge += tableau[0].demand;
         printf("\ncharge:%d\n", charge);
         for(j=1;j<nbreNoeuds;j++)
         {
              i=0;
              temp = chercherNoeudPlusProche(distanceEntreNoeuds, pCircuit->tableau[j-1]);
              capacite -=tableau[temp].demand;
              charge += tableau[temp].demand;
              printf("\n charge: %d\n", charge);
              printf("temp: %d\n",temp);
    
              if(charge>=0)
              {
                   //insérer l'élement dans le tableau
                   pCircuit->tableau[j]=  temp;
                   printf("supprimer temp\n");
                   memmove (tableau +temp, tableau + temp+1, sizeof (int) * nbreNoeuds);
    
              }
              else
              {
                   i=1;
              }
              i++;
         }
         return pCircuit;
    
    }
    /*
    *Renvoie l'indice du noeud le plus proche
    */
    int chercherNoeudPlusProche(double **distanceEntreNoeuds, int noeudDebut)
    {
    
        double distanceMin = 1000;
    
        int noeudProche = 0;
        int i;
        for (i=1; i < nbreNoeuds; i++)
        {
              if ( (i != noeudDebut) && distanceEntreNoeuds[noeudDebut][i] < distanceMin)
              {
                   distanceMin = distanceEntreNoeuds[noeudDebut][i] ;
    
                    noeudProche = i;
              }
         }
         return noeudProche;
    }

    -----

  2. #2
    bzh_nicolas

    Re : langage C: problème avec mon programme

    Citation Envoyé par celine2 Voir le message
    Quel est le noeud le plus proche à zero?
    C'est le noeud 5 car distance(0,5) est la plus petite. La charge entre le noeud precedent (le noeud zero)et ce noeud (neoud 5) est négative. Donc, je ne prends pas.
    -->Je vais chercher alors une autre noeud parmi les noeuds restants.
    tableau[1] = ?
    i=2
    Quel est le noeud le plus proche au noeud 0?
    on a la distance (0,3) est plus petite car distance(0,5)<distance(0,3). Je vérifie la charge. La charge est positive. Donc, je le prends.
    tableau [2]= 3
    Pour moi le problème dans ton algo vient des lignes en rouge.
    Pourquoi, si le premier que tu trouves ne correspond pas à ta condition, passes-tu à l'élément i+1 alors que i n'est pas encore alloué ?
    Tu ne devrai pas avoir tableau[2] = 3 mais tableau[1] = 3. Tant que tu n'as pas mit un élément dans tableau[i], i ne doit pas changer et tu dois continuer à chercher.
    Ou alors, il y a une raison dans ton programme pour laisser des "cases vides" dans ton tableau.
    Je viens de regarder ton code : Vérifie cette boucle, déjà i, tel qu'il est utilisé, ne sert à rien, tu n'utilises jamais sa valeur.
    Code:
    for(j=1;j<nbreNoeuds;j++)
    {
      i=0;
      temp = chercherNoeudPlusProche(distanceEntreNoeuds, pCircuit->tableau[j-1]);
      capacite -=tableau[temp].demand;
      charge += tableau[temp].demand;
      printf("\n charge: %d\n", charge);
      printf("temp: %d\n",temp);
    
      if(charge>=0)
      {
         //insérer l'élement dans le tableau
         pCircuit->tableau[j]=  temp;
         printf("supprimer temp\n");
         memmove (tableau +temp, tableau + temp+1, sizeof (int) * nbreNoeuds);
    
      }
      else
      {
         i=1;
      }
      i++;
    }
    Je rajouterai :
    Il te manque une boucle quelque part :
    Parcours de ton tableau de résultat en le remplissant au fur et à mesure
    --Parcours de recherche de ta liste de noeud pour trouver la plus petite distance suivante
    ----Parcours des éléments déjà dans le tableau pour voir si celui que tu viens de trouver n'est pas déjà dans les résultats.

    Ou alors ça à un rapport avec cette ligne :
    Code:
    memmove (tableau +temp, tableau + temp+1, sizeof (int) * nbreNoeuds);
    Peux-tu m'éclairer sur ce qu'elle est censée faire ?

    Je crois avoir vu d'autres erreurs mais ça dépendra de ta réponse pour que j'en sois sûr.

    P.S. : Quand tu fais une boucle de recherche, utilise plutôt un while qu'un for, ainsi tu peux arrêter proprement ta boucle dès que tu as trouvé l'élément cherché. Ca évite de parcourir tout un tableau alors que le premier élément est le bon.

  3. #3
    invite8b421ec7

    Re : langage C: problème avec mon programme

    Citation Envoyé par bzh_nicolas Voir le message
    Pour moi le problème dans ton algo vient des lignes en rouge.
    Pourquoi, si le premier que tu trouves ne correspond pas à ta condition, passes-tu à l'élément i+1 alors que i n'est pas encore alloué ?
    Tu ne devrai pas avoir tableau[2] = 3 mais tableau[1] = 3. Tant que tu n'as pas mit un élément dans tableau[i], i ne doit pas changer et tu dois continuer à chercher.
    Ou alors, il y a une raison dans ton programme pour laisser des "cases vides" dans ton tableau.
    .
    C'est que je veux dire par ça, c'est que pour remplir un élément dans le tableau[i],on parcourt la liste des noeuds.On s'arrete au noued qui vérifie la condition.
    Citation Envoyé par bzh_nicolas Voir le message
    Je viens de regarder ton code : Vérifie cette boucle, déjà i, tel qu'il est utilisé, ne sert à rien, tu n'utilises jamais sa valeur.
    Code:
    for(j=1;j<nbreNoeuds;j++)
    {
      i=0;
      temp = chercherNoeudPlusProche(distanceEntreNoeuds, pCircuit->tableau[j-1]);
      capacite -=tableau[temp].demand;
      charge += tableau[temp].demand;
      printf("\n charge: %d\n", charge);
      printf("temp: %d\n",temp);
    
      if(charge>=0)
      {
         //insérer l'élement dans le tableau
         pCircuit->tableau[j]=  temp;
         printf("supprimer temp\n");
         memmove (tableau +temp, tableau + temp+1, sizeof (int) * nbreNoeuds);
    
      }
      else
      {
         i=1;
      }
      i++;
    }
    Je rajouterai :
    Il te manque une boucle quelque part :
    .
    Oui, mais je ne sais pas où?
    Citation Envoyé par bzh_nicolas Voir le message

    Parcours de ton tableau de résultat en le remplissant au fur et à mesure
    --Parcours de recherche de ta liste de noeud pour trouver la plus petite distance suivante
    ----Parcours des éléments déjà dans le tableau pour voir si celui que tu viens de trouver n'est pas déjà dans les résultats.
    .
    C'est ce que je cherche à faire par la fonction chercherPludProcheNoeud.
    Citation Envoyé par bzh_nicolas Voir le message

    Ou alors ça à un rapport avec cette ligne :
    Code:
    memmove (tableau +temp, tableau + temp+1, sizeof (int) * nbreNoeuds);
    Cette ligne c'est pour supprimer le noeud qu'on a déjà mis dans le tableau.
    Peux-tu m'éclairer sur ce qu'elle est censée faire ?
    .
    Citation Envoyé par bzh_nicolas Voir le message

    Je crois avoir vu d'autres erreurs mais ça dépendra de ta réponse pour que j'en sois sûr.

    P.S. : Quand tu fais une boucle de recherche, utilise plutôt un while qu'un for, ainsi tu peux arrêter proprement ta boucle dès que tu as trouvé l'élément cherché. Ca évite de parcourir tout un tableau alors que le premier élément est le bon.
    .[/QUOTE]
    hum.
    Merci pour vos corrections.

  4. #4
    bzh_nicolas

    Re : langage C: problème avec mon programme

    Citation Envoyé par celine2 Voir le message
    memmove (tableau +temp, tableau + temp+1, sizeof (int) * nbreNoeuds);

    Cette ligne c'est pour supprimer le noeud qu'on a déjà mis dans le tableau.

    .
    C'est bien ce que je pensais, donc il y a un problème :
    Déjà tu supprimes trop d'élément ou plutôt tu va piquer des éléments ailleurs dans la mémoire après la fin de ton tableau. Gare au plantage, quasi-assuré.
    Là tu prends à partir l'élément n+1 pour les copier à l'élément n, tu écrases bien l'élément n mais :
    tu ne copies pas le bon nombre d'élément. Et je serais bien en peine de dire ce que tu copies exactement...
    Tu devrais faire quelque chose du genre :
    memmove (tableau +temp, tableau + temp+1, sizeof (noeuds) * (nbreNoeuds - temp));

    Je ne te le conseille pas vraiment car : les éléments non encore traités ne vont plus occuper tout ton tableau mais un nombre qui va diminuer de 1 à chaque élément trouvé (là n'est pas vraiment le soucis).
    MAIS dans le même temps ton tableau distanceEntreNoeuds lui n'évolue pas. Et comme les éléments supprimés de ton tableau de noeud peuvent l'être n'importe où dans le tableau :
    il faudrait garder un tableau supplémentaire pour faire la correspondance entre les indices de ton tableau de distance et celui de noeuds
    ou
    il faut diminuer les deux tableaux en même temps.
    Et garder une variable avec le nombre d'élément restant dans le tableau des noeuds.

    Je pense qu'il est plus simple de faire une boucle de recherche supplémentaire dans ta fonction chercherNoeudPlusProche et de ne pas supprimer d'éléments dans ton tableau de noeuds.
    Par exemple :
    Code:
    pour i de 1 à nbreNoeuds
      i_trouve = faux
      si i != noeud debut et distance entre les noeuds < distanceMin
        // il correspond aux attentes
        tant qu'on a pas parcouru tout le tableau des résultats et que i_trouve est faux 
           // parcours du tableau de résultat pour vérifier que l'on a pas déjà cet élément
           si i est dans tableau de résultat
               i_trouve = vrai //il est déjà dans les résultat on sort de la boucle au prochain tour
           fin si
        fin tant que
        si i_trouve est faux
           // on ne l'a pas trouvé dans le tableau des résultats, on sauvegarde sa valeur et on continu de regarder pour voir s'il n'y en a pas un autre plus "intéressant"
           // si on l'a trouvé, on passe au suivant sans rien faire.
           distanceMin = distanceEntreNoeuds[noeudDebut][i] 
           noeudProche = i
        fin si
      fin si
    fin pour
    retourne i
    Et la vérification de la charge positive doit également être faite dans cette fonction, pour ne pas faire évoluer j si ce n'est pas nécessaire.

    P.S. revérifie l'algo quand même il est fait de tête
    Dernière modification par bzh_nicolas ; 27/06/2011 à 22h31.

  5. A voir en vidéo sur Futura
  6. #5
    bzh_nicolas

    Re : langage C: problème avec mon programme

    correction :
    Pour ne pas modifier j si ce n'est pas nécessaire il faut vérifier la charge dans la même boucle :
    Code:
    pour i de 1 à nbreNoeuds
      i_trouve = faux
      si i != noeud debut et distance entre les noeuds < distanceMin
        tant qu'on a pas parcouru tout le tableau des résultats et que i_trouve est faux 
           // parcours du tableau de résultat pour vérifier que l'on a pas déjà cet élément
           si i est dans tableau de résultat
               i_trouve = vrai //il est déjà dans les résultat on sort de la boucle au prochain tour
           fin si
        fin tant que
        si i_trouve est faux
           // on ne l'a pas trouvé dans le tableau des résultats
           calcul de la charge
           si charge >= 0
               // il correspond aux besoins
               // on sauvegarde sa valeur et on continu de regarder pour voir s'il n'y en a pas un autre plus "intéressant"
               distanceMin = distanceEntreNoeuds[noeudDebut][i] 
               noeudProche = i
           fin si
        fin si
        // on l'a trouvé ou il ne correspond pas aux besoins on continu sans rien faire
      fin si
    fin pour
    retourne i

  7. #6
    invite8b421ec7

    Re : langage C: problème avec mon programme

    Merci pour votre réponse.
    J'ai essayé de coder l'algorithme en C. Pourriez-vous me dire si c'est correcte?
    Merci encore.
    Code:
    int chercherNoeudPlusProche(double **distanceEntreNoeuds, GestionNeouds * pGestionNoeuds, Circuit *pCircuit, int noeudDebut)//strcuture Circuit contient le tableau de résultat, la structure GestionNoeud contient le tableau des noeuds
    {
        int i,j;
        int trouve;
        int noeudProche;
        for(i=0;i<NbreNoeuds;i++)
       {
           trouve =0;//trouve est faux
           if(i != noeudDebut && distanceEntreNoeuds[noeudDebut][i] < distanceMin)
          {
              while(j<nbreNeouds && trouve = 0)
              {
                   for(j=0;j<nbreNeouds;j++)
                   {
                                if(i=pCircuit->tableau[j])
                                   trouve = 1;
                   }
               }
               if(trouve=0)
                 noeudProche = i;
             }
    return noeudproche;
         
    
    }

  8. #7
    bzh_nicolas

    Re : langage C: problème avec mon programme

    Il y a quelques erreurs :
    Code:
    int chercherNoeudPlusProche(double **distanceEntreNoeuds, GestionNeouds * pGestionNoeuds, Circuit *pCircuit, int noeudDebut)//strcuture Circuit contient le tableau de résultat, la structure GestionNoeud contient le tableau des noeuds
    {
        int i,j;
        int trouve;
        int noeudProche;
        for(i=0;i<NbreNoeuds;i++)
        {
            trouve =0;//trouve est faux
            if(i != noeudDebut && distanceEntreNoeuds[noeudDebut][i] < distanceMin)
            {
                while(j<nbreNeouds && trouve = 0)
                {
                    for(j=0;j<nbreNeouds;j++)
                    // ta boucle for est inutile c'est la boucle while qui va parcourir le tableau
                    // donc n'oublie pas de réinitialiser j à chaque fois que tu va commencer une recherche dans le tableau des résultats
                    // tu ne dois pas parcourir le tableau des résultats pour "NbreNoeuds" éléments
                    // car il ne va pas forcément en contenir autant car tu le remplis au fur et à mesure de l'exécution de ton programme
                    // il te faut donc utiliser une variable qui te dit combien d'éléments sont déjà dans ton tableau de résultat
                    // et ne pas en traiter plus
                    // indice : tu as cette valeur dans ta boucle dans principale dans creationCircuit
                    {
                        if(i==pCircuit->tableau[j])
                            // grosse faute d'innatention
                            trouve = 1;
                    }
                }
                if(trouve==0)
                    // re-grosse faute d'innatention
                    // N'oublie pas de vérifier ici la charge avant de récupérer la valeur de i
                    // (cf ce message)
                    // sinon tu va te retrouver avec des trous dans ton tableau
                    noeudProche = i;
            }
        } // il te manque une accolade fermante ici
        return noeudproche;
    }

  9. #8
    invite8b421ec7

    Question Re : langage C: problème avec mon programme

    Bonjour,

    Merci bzh_nicolas pour votre aide précieuse.
    Code:
     for(j=0;j<nbreNeouds;j++)
                    // ta boucle for est inutile c'est la boucle while qui va parcourir le tableau
                    // donc n'oublie pas de réinitialiser j à chaque fois que tu va commencer une recherche dans le tableau des résultats
                    // tu ne dois pas parcourir le tableau des résultats pour "NbreNoeuds" éléments
                    // car il ne va pas forcément en contenir autant car tu le remplis au fur et à mesure de l'exécution de ton programme
                    // il te faut donc utiliser une variable qui te dit combien d'éléments sont déjà dans ton tableau de résultat
                    // et ne pas en traiter plus
                    // indice : tu as cette valeur dans ta boucle dans principale dans
    Je ne sais pas comment faire .
    Sinon, j'ai essayé d'effectuer les autres modifications que vous m'avez demandées.
    Merci pour vos corrections.
    Code:
    int chercherNoeudPlusProche(double **distanceEntreNoeuds, GestionNeouds * pGestionNoeuds, Circuit *pCircuit, int noeudDebut)//strcuture Circuit contient le tableau de résultat, la structure GestionNoeud contient le tableau des noeuds
    {
        int i,j;
        int trouve;
        int noeudProche;
        for(i=0;i<NbreNoeuds;i++)
        {
            trouve =0;//trouve est faux
            if(i != noeudDebut && distanceEntreNoeuds[noeudDebut][i] < distanceMin)
            {
                j=0;
                while(j<nbreNeouds && trouve = 0)
                {
                  
                    
                        if(i==pCircuit->tableau[j])
                         {
                              trouve = 1;
                         }
                         j++;
                    
                }
                if(trouve==0)
                {
                     capacite -=tableau[i].demand;
                     charge += tableau[i].demand;
                     if(charge>=0)
                      {
                           noeudProche = i;
                      }
                   }
        } 
        return noeudproche;
    }

  10. #9
    bzh_nicolas

    Re : langage C: problème avec mon programme

    Citation Envoyé par celine2 Voir le message
    Je ne sais pas comment faire .
    Sinon, j'ai essayé d'effectuer les autres modifications que vous m'avez demandées.
    Tu l'as fait

    Il te reste juste à faire ça :
    Code:
    int chercherNoeudPlusProche(int nbNoeudTrouve, double **distanceEntreNoeuds, GestionNeouds * pGestionNoeuds, Circuit *pCircuit, int noeudDebut)//strcuture Circuit contient le tableau de résultat, la structure GestionNoeud contient le tableau des noeuds
    {
    	int i,j;
    	int trouve;
    	int noeudProche;
    	
    	for(i=0;i<NbreNoeuds;i++)
    	{
    		if(i != noeudDebut && distanceEntreNoeuds[noeudDebut][i] < distanceMin)
    		{
    			j=0;
    			trouve = 0;
    			while(j<nbNoeudTrouve && trouve == 0)
                             // faute d'innattention
    			{
    				if(i==pCircuit->tableau[j])
    				{
    					trouve = 1;
    				}
    				j++;
    			}
    			if(trouve==0)
    			{
    				capacite -=tableau[i].demand;
    				charge += tableau[i].demand;
    				if(charge>=0)
    				{
    					noeudProche = i;
    				}
    			}
    		} 
    	}
    	return noeudproche;
    }
    Et pour l'appeler dans creationCircuit :
    Code:
    temp = chercherNoeudPlusProche(j, distanceEntreNoeuds, pCircuit->tableau[j-1]);
    Et on ne devrait plus être très loin du résultat.

  11. #10
    invite8b421ec7

    Question Re : langage C: problème avec mon programme

    Bonjour,

    Merci bzh_nicolas pour votre réponse.
    Là, le programme plante . Le debeggeur m'indique une erreur dans la fonction chercherNoeudPlusProche()sur cette ligne
    Code:
     if(i != noeudDebut && pGestionNoeuds->distanceEntreVertices[noeudDebut][i] < distanceMin)
    Je ne comprends pas d'où parvient l'erreur. Voici ci-joint mon programme complet compilé sous CodeBlocks (la fonction se trouve dans le fichier Circuit.c). Pourriez-vous m'aider?
    Merci encore.
    Fichiers attachés Fichiers attachés

  12. #11
    ventilopomme

    Re : langage C: problème avec mon programme

    bon alors déja à la compilation j'ai cela

    Circuit.c: In function `creationCircuit':
    Circuit.c:92: warning: passing arg 3 of `chercherNoeudPlusProche' makes pointer
    from integer without a cast

    normalement quand on debugge on regarde deja si les parametres sont bons c'est le B A BA ....
    pas étonnant que cela parte au bouillon ton affaire si tu mets un entier (14) alors qu'il attends une adresse sur circuit (pcircuit )

    voila ou cela coince ....

    pCircuit->tableau[j-1] vaut 14 .... alors que tu lui dis que c'est un pointeur sur circuit ...

    comme je vois que tu debutes en c il serait bon que tu mettes dans tes .h les prototypes de tes fonctions ...



    temp = chercherNoeudPlusProche(j, pGestionNoeuds, pCircuit->tableau[j-1], noeudDebut);



    nbreNoeudsTrouve = 2
    pGestionNoeuds = 804a628
    pCircuit = 14
    noeudDebut = 0
    exclu à jamais du présent

  13. #12
    invite8b421ec7

    Re : langage C: problème avec mon programme

    Citation Envoyé par ventilopomme Voir le message
    bon alors déja à la compilation j'ai cela

    Circuit.c: In function `creationCircuit':
    Circuit.c:92: warning: passing arg 3 of `chercherNoeudPlusProche' makes pointer
    from integer without a cast

    normalement quand on debugge on regarde deja si les parametres sont bons c'est le B A BA ....
    pas étonnant que cela parte au bouillon ton affaire si tu mets un entier (14) alors qu'il attends une adresse sur circuit (pcircuit )
    voila ou cela coince ....

    pCircuit->tableau[j-1] vaut 14 .... alors que tu lui dis que c'est un pointeur sur circuit ...
    Ah:comme je suis pff:. Merci.

    Citation Envoyé par ventilopomme Voir le message
    comme je vois que tu debutes en c il serait bon que tu mettes dans tes .h les prototypes de tes fonctions ...
    Je vais faire ça quand ça s'exécute correctement.
    Citation Envoyé par ventilopomme Voir le message

    temp = chercherNoeudPlusProche(j, pGestionNoeuds, pCircuit->tableau[j-1], noeudDebut);



    nbreNoeudsTrouve = 2
    pGestionNoeuds = 804a628
    pCircuit = 14
    noeudDebut = 0
    Combien vaut la variable nbreNoeudsTrouve dans l'algorithme plus haut de bzh_nicolas?

    Merci.

  14. #13
    ventilopomme

    Re : langage C: problème avec mon programme

    Citation Envoyé par celine2 Voir le message
    Je vais faire ça quand ça s'exécute correctement.
    bah non car si tu l'avais fait au début ton programme aurait généré des anomalies
    exclu à jamais du présent

  15. #14
    invite8b421ec7

    Question Re : langage C: problème avec mon programme

    là, le debeggeur m'indique une erreur dans la fonction chercherNoeudPlusPoche() sur cette ligne
    Code:
     if(i != noeudDebut && pGestionNoeuds->distanceEntreVertices[noeudDebut][i] < distanceMin)
    Des idées??

  16. #15
    ventilopomme

    Re : langage C: problème avec mon programme

    et bien utilise des printfs pour afficher les valeurs et si le debugguer t'affiche la ligne je pense que tu es capable de recuperer les valeurs des parametres ...
    exclu à jamais du présent

  17. #16
    invite8b421ec7

    Re : langage C: problème avec mon programme

    Re,


    j'ai essayé de corriger les bugs.
    Mainteant le programme s'exécute sauf que j'obtiens pas le bon résultat.
    Je m'explique, normalement je devrais remplir la variable pCircuit->tableau de la manière suivante:
    en premier je mets zero.
    Ensuite, je mets le résultat de la fonction chercherIndiceNoeudPlusGrosseD emande()
    puis pour tous les élements restants du tableau (il contient 5 éléments donc de 2 jusqu'à 4), je mets le résultat de la fonction chercherNoeudPlusProche() et je reboucle.
    Là, quand j'affiche le contenu de ma variable pCircuit->tableau qui contient 5 elements. Je trouve que :
    pCircuit->tableau[0] = une adresse est pas zero
    pCircuit->tableau[1] = la meme adresse que pCircuit->tableau[0]
    pCircuit->tableau[2] = pCircuit->tableau[3]= pCircuit->tableau[4] = la même valeur alors qu'ils doivent être différentes
    Des idées pour corriger ça ?
    Merci par avance de vos aides.
    Ci-joint la dernière version de mon programme.
    Fichiers attachés Fichiers attachés

  18. #17
    invite8b421ec7

    Re : langage C: problème avec mon programme

    Re,

    En affichant les valeurs de ma variable [I]pCircuit->tableau, j'ai trouvé que la fonction chercherNoeudPlusProche ne s'exécute pas correctement puisqu'il y a un noeud qui le prend pas
    Des idées pour corriger ça?
    Merci.

  19. #18
    ventilopomme

    Re : langage C: problème avec mon programme

    commence déjà par voir comment tu alimentes ton tableau
    exclu à jamais du présent

  20. #19
    invite8b421ec7

    Unhappy Re : langage C: problème avec mon programme

    Si je veux afficher les valeurs de ma variable pCircuit->tableau[i].
    Je fais ceci non?
    Code:
    /**
    Fonction qui permet d'afficher la  circuit du camion
    **/
    void affichageCircuit(Circuit *pCircuit)
    {
         int i;
         for(i=0;i<nbreNoeuds;i++)
         {
              printf("pCircuit->tableau [%d]: %d\n", i, pCircuit->tableau[i]);
    
         }
    
    }
    Sinon, j'ai suit l'algorithme à la lettre. Je ne vois pas où est l'erreur?
    Voici l'algorithme
    remplir la variable pCircuit->tableau de la manière suivante:
    en premier je mets zero.
    Ensuite, je mets le résultat de la fonction chercherIndiceNoeudPlusGrosseD emande()
    puis pour tous les élements restants du tableau (il contient 5 éléments donc de 2 jusqu'à 4), je mets le résultat de la fonction chercherNoeudPlusProche() et je reboucle.

  21. #20
    ventilopomme

    Re : langage C: problème avec mon programme

    donc tu as pCircuit->tableau[0]=0; au depart
    exclu à jamais du présent

  22. #21
    invite8b421ec7

    Unhappy Re : langage C: problème avec mon programme

    Citation Envoyé par ventilopomme Voir le message
    donc tu as pCircuit->tableau[0]=0; au depart
    oui
    ensuite, j'ai pCircuit->tableau[1]=chercherNoeudPlusGrosseDemand ()
    Après, je recherche le plus proche noeud et je l'ajoute dans pCircuit->tableau[i] avec i allant de 2 jusqu'à 4. Je boucle jusquà il n y a plus des noeuds.
    Il devrait y avoir une erreur dans la fonction chercherNoeudProche() mais je ne la vois pas

  23. #22
    Xoxopixo

    Re : langage C: problème avec mon programme

    Bonjour,

    Je vais essayer de comprendre ceci.
    Code:
    remplir la variable pCircuit->tableau de la manière suivante:
    en premier je mets zero.
    Ensuite, je mets le résultat de la fonction chercherIndiceNoeudPlusGrosseDemande()
    puis pour tous les élements restants du tableau (il contient 5 éléments donc de 2 jusqu'à 4), je mets le résultat de la fonction chercherNoeudPlusProche() et je reboucle.
    Citation Envoyé par Celine2
    Si je veux afficher les valeurs de ma variable pCircuit->tableau[i].
    Je fais ceci non?
    Oui ca me parait bon.
    Juste une remarque, de forme.

    Personnellement, pour augmenter la lisibilité, au lieu d'écrire ceci :
    for(i=0;i<NbreNoeuds;i++)

    j'ecris cela
    for(i=0;i<=NbreNoeuds-1;i++)

    A moins qu'on ne cherche de la performance en temps de calcul, le -1 ne va pas jouer beaucoup.
    Ce qui permet de toujours raisonner sur l'interval réel 0...N-1 et donc de pouvoir faire tourner le programme "dans sa tête" plus directement. Apres c'est vrai que ça dépend des habitudes.

    Code:
    if(i != noeudDebut && distanceEntreNoeuds[noeudDebut][i] < distanceMin)
    Ici, c'est une variable globale ? DistanceMin.
    Il faudrait l'initialiser sinon je pense.

    Sinon concernant ce code.
    Code:
    int chercherNoeudPlusProche(int nbNoeudTrouve, double **distanceEntreNoeuds, GestionNeouds * pGestionNoeuds, Circuit *pCircuit, int noeudDebut)//strcuture Circuit contient le tableau de résultat, la structure GestionNoeud contient le tableau des noeuds
    {
    	int i,j;
    	int trouve;
    	int noeudProche;
    	
    	for(i=0;i<NbreNoeuds;i++)
    	{
    		if(i != noeudDebut && distanceEntreNoeuds[noeudDebut][i] < distanceMin)
    		{
    			j=0;
    			trouve = 0;
    			while(j<nbNoeudTrouve && trouve == 0)
                             // faute d'innattention
    			{
    				if(i==pCircuit->tableau[j])
    				{
    					trouve = 1;
    				}
    				j++;
    			}
    			if(trouve==0)
    			{
    				capacite -=tableau[i].demand;
    				charge += tableau[i].demand;
    				if(charge>=0)
    				{
    					noeudProche = i;
    				}
    			}
    		} 
    	}
    	return noeudproche;
    }
    Il est à mon avis dangereux.
    Je m'explique.
    Ici on veut un code qui fonctionne à tous les coups

    Il devrait donc se présenter de la facon suivante.

    Fonction(données) => Resultat
    [
    Declaration locale de R

    R=ValeurInit

    Si Condition Réalisée
    Calcul R selon données
    Fin Condition Réalisée

    Return R
    ]

    Pour prendre un exemple, de ce qui peut arriver, si on ne s'astreint pas à un model de ce type.

    ici
    Code:
    return noeudproche;
    Peut fournir une valeur non initialisée via le return.

    noeudproche n'ayant pas été initialisé par défaut.

    Code:
    while(j<nbNoeudTrouve && trouve == 0)
    Ici par exemple, j'ai un doute.

    ne devrait-on pas écrire
    Code:
    while(j<=nbNoeudTrouve && trouve == 0)
    Sinon si j=0 et nbNoeudTrouve=0 alors la condition est impossible
    0<0 est faux.

    a moins que NbNoeudTrouve soit égal à 1 au premier appel de la fonction ?
    En bon vivant, rien ne vaut un bonne logique ternaire.

  24. #23
    ventilopomme

    Re : langage C: problème avec mon programme

    j'utilise netbeans et cygwin c'est plus facile qu'utiliser ton truc muche
    Me revoilà j'ai trouver le bug
    j'ai cela dans le main
    creationCircuit(noeudDepart, distanceEntreNoeuds, pGestionNoeuds );
    et dans la declaration de fonction j'ai ...
    Circuit* creationCircuit(int noeudDepart, GestionNoeuds *pGestionNoeuds )
    donc c'est sur qu'en supprimant distanceEntreNoeuds dans le main au niveau de l'appel de fonction cela marche mieux
    apres j'ai cela ...

    Code:
    0.000000
    
    5.000000
    
    4.000000
    
    6.000000
    
    10.000000
    distance[0][0]= 0.000000
    distance[0][1]= 7.071068
    distance[0][2]= 6.403124
    distance[0][3]= 11.661904
    distance[0][4]= 14.142136
    distance[1][0]= 7.071068
    distance[1][1]= 0.000000
    distance[1][2]= 1.000000
    distance[1][3]= 5.099020
    distance[1][4]= 7.071068
    distance[2][0]= 6.403124
    distance[2][1]= 1.000000
    distance[2][2]= 0.000000
    distance[2][3]= 5.385165
    distance[2][4]= 7.810250
    distance[3][0]= 11.661904
    distance[3][1]= 5.099020
    distance[3][2]= 5.385165
    distance[3][3]= 0.000000
    distance[3][4]= 4.000000
    distance[4][0]= 14.142136
    distance[4][1]= 7.071068
    distance[4][2]= 7.810250
    distance[4][3]= 4.000000
    distance[4][4]= 0.000000
     i=1 i=2temp: 2
     i=1 i=4temp: 4
     i=1temp: 1
    time : 0.000000 secondes
    
    
    RUN SUCCESSFUL (total time: 2s)
    en piece jointe le code
    Fichiers attachés Fichiers attachés
    exclu à jamais du présent

  25. #24
    invite8b421ec7

    Unhappy Re : langage C: problème avec mon programme

    Merci c'est réglé.
    Par contre maintenant, je dois vérifier ma capacité du camion permet ou pas et que j'ai une charge suffisante (>=0) avant d'insérer le noeud proche dans mon tableau résultat [I]pCircuit->tableau.
    J'ai essayé de faire ceci dans ma fonction chercherNoeudPlus Proche() mais ça marche pas pourtant j'ai initialisé ma variable charge et ma variable capaciteRestante dans la fonction creationCircuit() car j'ai déjà dans mon tableau pCircuit->tableau[i] deux éléments avant d'insérer le noeud le plus proche et j'ai mis à jour mes deux variables charge et capaciteRestante en sortant du noeud inséré.

    Quelqu'un pourrait-il m'aider?
    N'hésitez pas à me demander plus d'explications si ce n'est pas clair. Merci.
    Voici mes deux fonctions:
    Code:
    int chercherNoeudPlusProche(int nbreNoeudsTrouve, double **distanceEntreVertices,  GestionNoeuds *pGestionNoeuds, Circuit *pCircuit, int noeudDebut)
    {
        int i,j;
        int trouve;
        int noeudProche = 0;
        int charge = 0;
        int capaciteRestante = 0;
    
        double distanceMin =1000;
    
        for(i=0;i<nbreNoeuds;i++)
        {
    
    
            trouve =0;//trouve est faux
    
    
            if(i != noeudDebut && distanceEntreVertices[noeudDebut][i] < distanceMin)
            {
                j=0;
                while(j<nbreNoeudsTrouve && trouve == 0)
                {
    
    
                        if(i==pCircuit->tableau[j])
                         {
                              trouve = 1;
                         }
    
                         j++;
    
                }
    
               charge+= pGestionNoeuds->tableau[i].demand;
               capaciteRestante -= pGestionNoeuds->tableau[i].demand;
    
                if(trouve==0&&capaciteRestante >=0&&charge>=0)
                {
    
                        noeudProche = i;
    
                   }
    
              }
         }
    
    
    
        return noeudProche;
    }Circuit* creationCircuit(int noeudDepart, GestionNoeuds *pGestionNoeuds )
    {
         int i;
         int j;
         Circuit *pCircuit;
         pCircuit= allocationCircuit();
    
        /* Ici, on va constituer une solution. */
    
        /* On initialise */
         for (i=0 ; i<nbreNoeuds ; i++)
            pCircuit->tableau[i] =-1;
    
         int temp;
         int deuxiemeNoeud;
         int capaciteRestante = 0;
         int charge = 0;
         double **distanceEntreNoeuds = calculDistance(pGestionNoeuds);
    #if TRACE
         pCircuit->tableau[0] = 0;
    #endif
    #if TRACE
         deuxiemeNoeud = chercherIndiceNoeudPlusGrosseDemande(pGestionNoeuds);
    
         charge+= pGestionNoeuds->tableau[deuxiemeNoeud].demand;
         capaciteRestante = capaciteMax - pGestionNoeuds->tableau[deuxiemeNoeud].demand;
    #endif
    #if TRACE
         pCircuit->tableau[1] = deuxiemeNoeud;
    
    #endif
    #if TRACE
         for(j=2;j<nbreNoeuds;j++)
         {
    
                   temp = chercherNoeudPlusProche(6,  distanceEntreNoeuds, pGestionNoeuds, pCircuit,   pCircuit-> tableau[j-1]);
    
                   //insérer l'élement dans le tableau
                   pCircuit->tableau[j]=  temp;
                   printf("  pCircuit->tableau[%d]:%d",  j, pCircuit->tableau[j]);
    
    
         }
    
         #endif
    
         return pCircuit;
    
    }

  26. #25
    ventilopomme

    Re : langage C: problème avec mon programme

    un truc que je comprends pas comment tu développes
    y a pas un debugueur sur ton systeme
    tu peux pas le faire marcher pas a pas ?
    c'est ce que j'ai fait pour trouver tes coquilles
    cela te permettra de decouvrir comment il fonctionne
    d'ajouter des points d'arret
    de regarder l'etat de tes variables
    c comme cela qu'on devient informaticien
    et je presumes que tu te mets directement dans le code
    fais tourner ton algo a la main avant plutot que retranscrire directement tes pensees ...
    car a force de faire comme tu fais
    tu vas finir par lasser les gens
    et ce que j'ai trouvé tu aurais pu le trouver si tu avais lu ton code comme il faut ...
    exclu à jamais du présent

  27. #26
    invite8b421ec7

    Unhappy Re : langage C: problème avec mon programme

    Bonsoir,
    J'ai passé toute la journée à chercher la solution mais je n'ai pas réussi à la trouver. Je sais que c'est un truc très bete. J'ai essayé. ça s'exécute mais je n'obtiens pas les bons résultats.
    Je m'arrache les cheveux . Je veux savoir la solution .
    Quelqu'un pourrait-il m'aider?
    En fait, je voudrais faire le test suivant sur le noeudProche avant de le prendre:
    si la demande du noeudProche est négative, je calcule la charge. Si celle-ci est positive je le prends. Sinon, je recherche un autre noeudProche qui satisfait cette condition.
    Si la demande du noeudProche est positivee, je calcule la capaciteRestante. Si celle-ci est positive, je le prends. Sinon, je cherche un autre noeudProche.
    Voici ma fonction
    Code:
    /**
    *Cette fonction permet de chercher le noeud le plus proche
    */
    int chercherNoeudPlusProche(int nbreNoeudsTrouve, double **distanceEntreVertices,  GestionNoeuds *pGestionNoeuds, Circuit *pCircuit, int noeudDebut)
    {
        int i,j;
        int trouve;
        int noeudProche = 0;
        int charge;
        int capaciteRestante ;
    
    
        double distanceMin =1000;
    
        for(i=0;i<nbreNoeuds;i++)
        {
    
            trouve =0;//trouve est faux
    
            if(i != noeudDebut && distanceEntreVertices[noeudDebut][i] < distanceMin)
            {
    
                j=0;
                while(j<=nbreNoeudsTrouve && trouve == 0)
                {
                         if(i==pCircuit->tableau[j])
                         {
                              trouve = 1;
                         }
    
                         j++;
    
                }
                charge+=pGestionNoeuds->tableau[i].demand;
                capaciteRestante-= pGestionNoeuds->tableau[i].demand;
    
                if(trouve==0&&pGestionNoeuds->tableau[i].demand<=0&&charge >=0)
                {
                     noeudProche = i;
                 }
                 if(trouve==0&&pGestionNoeuds->tableau[i].demand>=0&&capaciteRestante >=0)
                 {
                      noeudProche = i;
    
                   }
    
              }
         }
    
         return noeudProche;
    }
    ci-joint mon programme.
    Merci par avance.
    Fichiers attachés Fichiers attachés

  28. #27
    bzh_nicolas

    Re : langage C: problème avec mon programme

    Code:
    /**
    *Cette fonction permet de chercher le noeud le plus proche
    */
    int chercherNoeudPlusProche(int nbreNoeudsTrouve, double **distanceEntreVertices,  GestionNoeuds *pGestionNoeuds, Circuit *pCircuit, int noeudDebut)
    {
        int i,j;
        int trouve;
        int noeudProche = 0;
        
        // déjà dit mais je recommence : ça finira bien par rentrer
        // il faut initialiser les variables surtout quand on fait un += ou un -= après avec ces variables.
        // Ca ne changera peut-être rien mais ça évitera des bugs bizarres après
        int charge;
        int capaciteRestante ;
    
    
        double distanceMin =1000;
    
        for(i=0;i<nbreNoeuds;i++)
        {
    
            trouve =0;//trouve est faux
    
            if(i != noeudDebut && distanceEntreVertices[noeudDebut][i] < distanceMin)
            {
    
                j=0;
                while(j<=nbreNoeudsTrouve && trouve == 0)
                {
                         if(i==pCircuit->tableau[j])
                         {
                              trouve = 1;
                         }
    
                         j++;
    
                }
                charge+=pGestionNoeuds->tableau[i].demand;
                capaciteRestante-= pGestionNoeuds->tableau[i].demand;
    
                if(trouve==0&&pGestionNoeuds->tableau[i].demand<=0&&charge >=0)
                {
                     noeudProche = i;
                 }
                 if(trouve==0&&pGestionNoeuds->tableau[i].demand>=0&&capaciteRestante >=0)
                 {
                      noeudProche = i;
    
                   }
    
              }
         }
    
         return noeudProche;
    }
    Ensuite j'ai un peu de mal avec ça :
    si la demande du noeudProche est négative, je calcule la charge. Si celle-ci est positive je le prends. Sinon, je recherche un autre noeudProche qui satisfait cette condition.
    Si la demande du noeudProche est positivee, je calcule la capaciteRestante. Si celle-ci est positive, je le prends. Sinon, je cherche un autre noeudProche.
    Peux-tu expliciter ? Tu peux prendre le noeud dans 2 cas différents qui s'exclue partiellement ? C'est bien ça ?

    Et regarde comment évoluent tes variables charge et capaciteRestante car ça me parait étrange là. Je ne comprends pas pourquoi elles dépendent de tous les noeuds vérifiés (je pourrais comprendre qu'elles dépendent des noeuds retenus mais là j'ai du mal...). Mais je n'ai pas écrit ton programme, c'est peut-être normal...

    Autre problème tu ne mets jamais à jour la valeur de distanceMin.

  29. #28
    ventilopomme

    Re : langage C: problème avec mon programme

    en fait elle vient de créer des compilateurs et des debuggeurs humains ...
    quand on débute on ne se plonge pas directement dans le code
    si cela marche pas c'est qu'il y a un probleme de conception au depart
    ou que la conception est mal maitrisée
    et on essaie aussi de comprendre comment fonctionne le langage c
    le compilateur c n'est pas la pour palier a toutes tes erreurs ....
    il fait tout simplement ce que tu lui dis de faire ...
    c sur a force je vais finir par faire le programme moi meme ....
    exclu à jamais du présent

  30. #29
    invite8b421ec7

    Unhappy Re : langage C: problème avec mon programme

    Bonjour,
    Je sollicite vos aides pour avoir la bon résultat .
    Je voudrais écrire un bout de programme qui me permet de chercher le noeuds le plus proche (en terme de distance par rapport à un noeud de départ)et de faire le test sur ce noeud avant de prendre(la variable chargeProduit1, chargeProduit2 et capaciteRestante>=0).Si le noeud satisfait les conditions on le prend sinon on cherche un noeud plus loin qui satisfait ces conditions etc.
    Ci-dessous ma fonction. Toutefois, ça n'exécute pas correctement . ?
    Merci par avance.
    Code:
    int chercherNoeudPlusProche(int nbreNoeudsTrouve, double **distanceEntreVertices,  GestionNoeuds *pGestionNoeuds, Circuit *pCircuit, int noeudDebut)
    {
        int i,j;
    
        int trouve;
        int noeudProche = 0;
        double distanceMin =1000;
         int chargeProduit1 =0;
         int chargeProduit2 =0;
         int capaciteRestante = capaciteMax;
        for(i=0;i<nbreNoeuds;i++)
        {
    
               trouve =0;//trouve est faux
    
    
                   j=0;
                   while(trouve==0&&j<taille)
                   {
    
                         if(i==pCircuit->tableau[j])
                         {
                              trouve = 1;
    
    
                        }
                        else
                        {
    
                             j++;
                        }
    
                   }
                if(trouve==0 && distanceMin>distanceEntreVertices[noeudDebut][i])
                   {
                        distanceMin = distanceEntreVertices[noeudDebut][i];
                        chargeProduit1 += pGestionNoeuds->tableau[i].demandProduit1;
                        chargeProduit2 += pGestionNoeuds->tableau[i].demandProduit2;
                        capaciteRestante-=pGestionNoeuds->tableau[i].demandProduit1 + pGestionNoeuds->tableau[i].demandProduit2;
    
                        if(chargeProduit1>=0&&chargeProduit2>=0&&capaciteRestante>=0)
                        {
                             noeudProche = i;
                        }
                        else
                        {
                             j++;
                        }
    
    
                   }
    
         }
    
    
         return noeudProche;
    }

  31. #30
    Dlzlogic

    Re : langage C: problème avec mon programme

    Bonjour,
    A mon avis c'est à cause de la variable j. Cette variable n'est pas initialisée et vous l'incrémentez, la testée etc.
    Pour les variable de compteur, par exemple, i fans la boucle for, j'ai pris l'habitude d'écrire cela
    Code:
    for (int i=0; i<max, i++)
    C'est à dire que i n'est visible que dans la boucle for.
    Pour une boucle do ... while et while, c'est un peu plus compliqué, puisqu'il faut initialiser la variable compteur avant le début. donc je le fais juste avant, par exemple :
    Code:
       int jTab=0;
                    do
                   {
                         if(i==pCircuit->tableau[jTab])
                         {
                              trouve = 1;
                              break;
                         }
                         else
                         {
                             jTab++;
                         }
                   }
                   while(/*trouve==0 &&*/ jTab<taille);
    On remarque que là aussi on aurait pu mettre une boucle for.
    Je ne veux sûrement pas dire que une boucle for est meilleure qu'une boucle do, mais elle est souvent plus facile à lire et il faut être sûr d'en sortir.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Probleme avec mon programme
    Par invite46ba2680 dans le forum Programmation et langages, Algorithmique
    Réponses: 40
    Dernier message: 12/03/2011, 21h35
  2. Comment interagir avec mon programme ?
    Par invitef397beb4 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/03/2011, 08h34
  3. langage C : problème avec scanf
    Par invitedba13d1f dans le forum Logiciel - Software - Open Source
    Réponses: 20
    Dernier message: 20/04/2009, 17h41
  4. problème avec le langage pascal
    Par invite49b54ac2 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 28/01/2009, 11h45
  5. problème avec langage C++
    Par invite0f6e0be6 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 03/10/2007, 11h20