PB de tri

dodo1309 Messages postés 218 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 30 mai 2011 - 21 févr. 2009 à 23:09
cs_sonic1 Messages postés 3 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 mars 2009 - 21 mars 2009 à 20:57
Bonjour,

Voila je suis entrain de faire un programme qui doit permettre à l'utilisateur d'encoder les valeurs de son choix pour ensuite
l'ajouter à la bonne possition dans une liste chainée .

L'ajout à la bonne place s'effectue d'abord sur la date et ensuite l'heure de début.
Le problème  est que lorsque l'on ajoute 4 dates identiques et 4 heures de début différentes cela ne place pas la derniere  serie de valeur au bon endroit .

Voila le code :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct  {
  char nom[41];
  char date[13];
  char heureDeb[6];
  char heureFin[6];
  char chaine[11];
  char genre[21];
  struct programmeTv *suivant;
 } programmeTv;

main(){
programmeTv *depart, *noeud,*lecture,*intercale,*nouveau_noeud,*noeud_precedent;
      depart=NULL;
      noeud=NULL;
      lecture=NULL;
      intercale=NULL;
      nouveau_noeud=NULL;
      noeud_precedent=NULL;
     void effacerSautLigne(char chaine[]);
     int compare(char ch1[],char ch2[]);

     int choix,n=1,rep=-1,place[100]={0},i=0,j=0,k=0;
     char ligne[92],nomFichier[50],tmp[100],nom[22],nomprog[41],date[13],heureDeb[7],heureFin[7],chaine[22],genre[22],suppr[2],nomtmp[41];
 printf("Veuillez saisir le nom :");               
          fgets(nom,sizeof(nom),stdin);
          effacerSautLigne(nom);
         
               
        printf("Veuillez saisir la date :");
                fgets(date,sizeof(date),stdin);
          effacerSautLigne(date);
       
             
          printf("Veuillez saisir l'heure de début :");
                fgets(heureDeb,sizeof(heureDeb),stdin);
          effacerSautLigne(heureDeb);
       
             
              printf("Veuillez saisir l'heure de fin :");
                fgets(heureFin,sizeof(heureFin),stdin);
          effacerSautLigne(heureFin);
       
           
           printf("Veuillez saisir la genre :");
                fgets(genre,sizeof(genre),stdin);
          effacerSautLigne(genre);
         

         printf("Veuillez saisir la chaine :");
                fgets(chaine,sizeof(chaine),stdin);
          effacerSautLigne(chaine);
       
  
                    noeud_precedent=depart;
              noeud=(programmeTv*) depart->suivant;
             
              while((noeud) ){
                               if (compare(date,noeud->date)>0){
                      noeud = noeud->suivant;
                      noeud_precedent = noeud_precedent->suivant;
                      break;
                 }
                  if (compare(date,noeud->date)==0){
               
                                        if(compare(heureDeb,noeud->heureDeb)>0){
                          noeud = noeud->suivant;
                                  noeud_precedent = noeud_precedent->suivant;
                              //noeud = noeud->suivant;
                                  //noeud_precedent = noeud_precedent->suivant;
                          break;
                    }
                    else break;
                }                       
               

               }
             

            nouveau_noeud = (programmeTv *) malloc(sizeof(programmeTv));
            nouveau_noeud->suivant=noeud;
            noeud_precedent->suivant = nouveau_noeud;
       
            strcpy(nouveau_noeud->nom,nom);
            strcpy(nouveau_noeud->date,date);
            strcpy(nouveau_noeud->heureDeb,heureDeb);
            strcpy(nouveau_noeud->heureFin,heureFin);
            strcpy(nouveau_noeud->genre,genre);
            strcpy(nouveau_noeud->chaine,chaine);
}

void effacerSautLigne(char chaine[]){
 char *positionEntree = NULL;
 positionEntree = strchr(chaine, '\n'); // On recherche l'"Entrée"
        if (positionEntree != NULL) // Si on a trouvé le retour à la ligne
        {
            *positionEntree = '\0'; // On remp
        }
}

void effacerEspace(char* str) {
char c, *p;

    p = str;
    do        while ((c *p++) ' ') ;
    while (*str++ = c);
    return;
}

int compare(char ch1[],char ch2[]){
   
    void effacerEspace(char* str);
    void modif(ch1,ch2);

          char copie1[45],copie2[45];
         
             strcpy(copie1,ch1);
             effacerEspace(copie1);
         strcpy(copie2,ch2);
             effacerEspace(copie2);
         modif(copie1,copie2);

      
      return strcmp(copie1,copie2);
}

Merci d'avance

Dodo1309

1 réponse

cs_sonic1 Messages postés 3 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 mars 2009
21 mars 2009 à 20:57
Les prototypes de fonctions seraient mieux en en-têtes, non ?

Par contre, il l manque la fonction modif !
0
Rejoignez-nous