IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Programme qui ne réalise pas le tri


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Programme qui ne réalise pas le tri
    Bonjour,

    j'ai ce code qui est censé m'affiché les éléments triés mais ça me renvoit les éléments dans le même ordre.
    Est-ce quelqu'un voit ou le code cloche et aussi s'il y a des trucs à améliorer ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    void bubbleSort(char **tab, int (*cmp)(void *, void *))
    {
      char **p1, **p2;
      for(p1=tab; *p1!=NULL; ++p1)
        for(p2=p1+1; *p2!=NULL; ++p2)
          if((*cmp)(p1,p2)>0)
    	{
    	  char *tmp;
    	  tmp = *p1;
    	  *p1 = *p2;
    	  *p2 = tmp;
    	}
    }
     
    void printTable(FILE *fdo, char **tab)
    {
      for(; *tab!=NULL; ++tab) fprintf(fdo,"%s\n", *tab);
    }
     
    int main(int argc, char *argv[])
    {
      char **t; unsigned int i,l;
      if((t=(char**)malloc(sizeof(char*)*argc))==NULL)
        {
          fprintf(stderr,"Error in memory allocation\n");
          return EXIT_FAILURE;
        }
      l=(unsigned int)argc-1U;
      for(i=0U; i<l; ++i)
        {
          if((t[i]=(char*)malloc(strlen(argv[i+1])+1))==NULL)
    	{
    	  fprintf(stderr,"Error in memory allocation\n");
    	  return EXIT_FAILURE;
    	}
          strcpy(t[i],argv[i+1]);
        }
      t[l]=NULL;
      printTable(stdout,t);
      bubbleSort(t, (int (*)(void *, void *))&strcmp);
      printf("\n");
      printTable(stdout, t);
      return EXIT_SUCCESS;
    }

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    - Pas de cast sur le retour du main...

    Ceci :

    Devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((*cmp)(*p1,*p2)>0)
    Par contre cela donne :
    ./a.out 5 1 23 3
    5
    1
    23
    3

    1
    23
    3
    5
    Logique, c'est lexicographiquement trié...

    Jc

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par fearyourself
    - Pas de cast sur le retour du main...

    Ceci :

    Devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((*cmp)(*p1,*p2)>0)
    Par contre cela donne :


    Logique, c'est lexicographiquement trié...

    Jc
    Si on ne met pas les *, c'est les adresses qui sont comparées ?
    Pourquoi est-ce que ça ne faisait aucun changement ?

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Premium
    Si on ne met pas les *, c'est les adresses qui sont comparées ?
    Pourquoi est-ce que ça ne faisait aucun changement ?
    Réfléchis à ce que tu passais à strcmp et pourquoi cela ne faisait rien... Aller, un petit débuggage ne te fera pas de mal.

    Jc

Discussions similaires

  1. programme qui ne reconnait pas la taille d'un tableau
    Par alvanoto dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/03/2009, 14h33
  2. Un programme qui n'a pas besoin d'un OS ? (Boot Loader)
    Par kedare dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 04/09/2008, 13h52
  3. Réponses: 6
    Dernier message: 11/11/2007, 17h34
  4. Programme qui ne fonctionne pas
    Par jipé95 dans le forum C
    Réponses: 7
    Dernier message: 26/04/2006, 19h08
  5. Réponses: 18
    Dernier message: 13/12/2005, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo