Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2317 connectés 

  FORUM HardWare.fr
  Programmation
  C

  problème de tri par insertion : à l'aide !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de tri par insertion : à l'aide !!!

n°1478089
manu
Posté le 19-11-2006 à 14:44:37  profilanswer
 

bonjour à tous,
 
j'ai un problème avec un tri par insertion fait en même temps que le remplissage de la table à trier.
 
il s'agit d'un tri sur 3 colonnes (CodeLingerie, CodeService, et CodeArticle), il y a une quantité pour chaque triplet, et le truc c'est d'ajouter la quantité si un doublon a été détecté.
 
le problème semble être sur la gestion des doublons qui ne sont pas tous détectés.
le tri se fait bien, aucune ligne ne manque, et la quantité totale des articles est bonne par rapport au fichier d'entrée.
 
voici une partie du code : (je n'ai pas mis toutes les déclarations de variables car elle ne semblent pas être en cause)

Code :
  1. struct StructDonnees
  2. {
  3.   char dayte [TailleDate+1];
  4.   char CodeClient [TailleCodeClient+1];
  5.   char CodeLingerie [TailleCodeLingerie+1];
  6.   char CodeService [TailleCodeServiceGenerix+1];
  7.   char CodeArticle [TailleCodeArticleGenerix+1];
  8.   char NumBordereau [TailleNumBordereau+1];
  9.   char quantite [TailleQuantite+1];
  10. };
  11.  
  12. StructDonnees *TableDonnees;
  13.  
  14. void AjouteDonnees (StructDonnees *TableDonnees,long unsigned i,char *1,char *2,char *3,char *4,char *5,char *6,char *7)
  15. {
  16.     strcpy (TableDonnees [i].dayte,1);
  17.     strcpy (TableDonnees [i].CodeClient,2);
  18.     strcpy (TableDonnees [i].CodeLingerie,3);
  19.     strcpy (TableDonnees [i].CodeService,4);
  20.     strcpy (TableDonnees [i].CodeArticle,5);
  21.     strcpy (TableDonnees [i].NumBordereau,6);
  22.     strcpy (TableDonnees [i].quantite,7);
  23. }
  24.  
  25.     if (CompteurTable==0)
  26.     {
  27.                AjouteDonnees (TableDonnees,1,dayte,CodeClient,CodeLingerie,CodeService,CodeArticle,NumBordereau,quantite);
  28.            CompteurTable++;
  29.     }
  30.      else
  31.          {
  32.        i=CompteurTable;
  33.        while (i>=1 && strcmp (TableDonnees [i].CodeLingerie,CodeLingerie)>0)
  34.        {
  35.            i--;
  36.        }
  37.        if (strcmp (TableDonnees [i].CodeLingerie,CodeLingerie)!=0)
  38.        {// LE CODE LINGERIE N'EXISTE PAS => INSERTION DE LA LIGNE
  39.         for (j=CompteurTable;j>=i+1;j--)
  40.                {
  41.                       TableDonnees [j+1]=TableDonnees [j];
  42.                }
  43.                AjouteDonnees (TableDonnees,i,dayte,CodeClient,CodeLingerie,CodeService,CodeArticle,NumBordereau,quantite);
  44.               CompteurTable++;
  45.            }
  46.            else
  47.            {// LE CODE LINGERIE EXISTE => RECHERCHE DU CODE SERVICE
  48.         while (i>=1 && strcmp (TableDonnees [i].CodeLingerie,CodeLingerie)==0
  49.                && strcmp (TableDonnees [i].CodeService,CodeService)>0)
  50.               {
  51.                        i--;
  52.             }
  53.             if (strcmp (TableDonnees [i].CodeService,CodeService)!=0)
  54.               {// LE CODE SERVICE N'EXISTE PAS => INSERTION DE LA LIGNE
  55.                  for (j=CompteurTable;j>=i+1;j--)
  56.             {
  57.                       TableDonnees [j+1]=TableDonnees [j];
  58.                   }
  59.                AjouteDonnees (TableDonnees,i,dayte,CodeClient,CodeLingerie,CodeService,CodeArticle,NumBordereau,quantite);
  60.             CompteurTable++;
  61.              }
  62.            else
  63.            {// LE CODE SERVICE EXISTE => RECHERCHE DU CODE ARTICLE
  64.         while (i>=1 && strcmp (TableDonnees [i].CodeLingerie,CodeLingerie)==0
  65.                && strcmp (TableDonnees [i].CodeService,CodeService)==0
  66.               && strcmp (TableDonnees [i].CodeArticle,CodeArticle)>0)
  67.           {
  68.                       i--;
  69.             }
  70.         if (strcmp (TableDonnees [i].CodeArticle,CodeArticle)!=0)
  71.           {// LE CODE ARTICLE N'EXISTE PAS => INSERTION DE LA LIGNE
  72.             for (j=CompteurTable;j>=i+1;j--)
  73.             {
  74.                           TableDonnees [j+1]=TableDonnees [j];
  75.                       }
  76.                AjouteDonnees (TableDonnees,i,dayte,CodeClient,CodeLingerie,CodeService,CodeArticle,NumBordereau,quantite);
  77.             CompteurTable++;
  78.                }
  79.                  else
  80.                  {// LE CODE ARTICLE EXISTE
  81.             QteTotale=atoi (TableDonnees [i].quantite) + atoi (quantite);
  82.             sprintf (TableDonnees [i].quantite,"%lu",QteTotale);
  83.  
  84.                  }// FIN DU else DU if (strcmp (TableDonnees [i].CodeArticle,CodeArticle)!=0)
  85.               }// FIN DU else DU if (strcmp (TableDonnees [i].CodeService,CodeService)!=0)
  86.            }// FIN DU else DU if (strcmp (TableDonnees [i].CodeLingerie,CodeLingerie)!=0)
  87.     }// FIN DU else DU if (CompteurTable==0)


je n'ai pas mis toute la fonction car ça ferait un peu long, mais peut-être faudra-t'il ...
 
désolé pour l'indentation, je viens de me battre avec mais ça fait pas pareil en aperçu qu'en edit ...
 
je vous remercie d'avance pour toute réponse, je suis vraiment à la bourre sur mon projet, c'est pour le boulot donc ça rigole pas trop.


Message édité par manu le 19-11-2006 à 16:23:33
mood
Publicité
Posté le 19-11-2006 à 14:44:37  profilanswer
 

n°1478102
Siluro
Posté le 19-11-2006 à 15:17:34  profilanswer
 

mets ton code source entre les balises [cpp][/cpp] s'il te plaît, on verra mieux le tout :)

n°1478104
manu
Posté le 19-11-2006 à 15:22:20  profilanswer
 

Siluro a écrit :

mets ton code source entre les balises [cpp][/cpp] s'il te plaît, on verra mieux le tout :)


c'est fait.
merci du conseil.
 

n°1478115
Trap D
Posté le 19-11-2006 à 15:47:33  profilanswer
 

Ton code est pollué par les lignes de recopie de données (la suite des strcpy). Tu devrais mettre cette partie la dans une fonction, ce serait plus clair et on pourrait plus facilement trouver où est l'erreur.

n°1478120
manu
Posté le 19-11-2006 à 16:24:41  profilanswer
 

Trap D a écrit :

Ton code est pollué par les lignes de recopie de données (la suite des strcpy). Tu devrais mettre cette partie la dans une fonction, ce serait plus clair et on pourrait plus facilement trouver où est l'erreur.


c'est fait.
 
mais l'indentation est toujours pourrie, je sais pas trop comment faire pour ça.

n°1478409
manu
Posté le 20-11-2006 à 13:29:02  profilanswer
 

personne n'a le temps de se pencher sur mon problème ... ?

n°1478617
fabllot
Posté le 20-11-2006 à 17:13:29  profilanswer
 

Bonjour,
 
Ton problème n'est pas très clair...
Que dois tu trier et dans quoi?
Tu dis que tu as un problème, dis ce qui ne fonctionne pas, ça ira un peu plus vite...

n°1478622
Emmanuel D​elahaye
C is a sharp tool
Posté le 20-11-2006 à 17:16:11  profilanswer
 

manu a écrit :

personne n'a le temps de se pencher sur mon problème ... ?


Trop de code complexe. Identifie le problème et poste le code minimum et complet qui le montre. (Technique de débogage bien connue...)


Message édité par Emmanuel Delahaye le 20-11-2006 à 17:17:02

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  problème de tri par insertion : à l'aide !!!

 

Sujets relatifs
Problème avec structures et prototypage (Résolu)probleme FLASH/XML/HTML
problème de dateproblème de boucle sur vba
[Resolu] Redefinir une classe css à l'aide de PHP?probleme avec repertoire + lien en php
probleme de boucle while[resolu]problème avec une fonction
Aide pour module TV stream, ajouté une fonction SQL en plus.Probleme avec l'evenement onclick dans du code html généré par js
Plus de sujets relatifs à : problème de tri par insertion : à l'aide !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR