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 :

ranger par ordre alphabétique


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut ranger par ordre alphabétique
    bonjour

    j essaye avec ce code de trier des mot dans une chaine separe par des espaces

    exemple:

    il fait beau
    beau fait il
    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
    50
    51
    52
    53
     
    #include<stdio.h> 
     
    #define NBRMOTS 3 
    #define LGMOT 20 
     
    void tri_chaine_caract(char tableau[],int tabLength, int wordLength); 
     
    main() 
    { 
       char tab[NBRMOTS][LGMOT]; 
       int i; 
       char choix; 
     
       printf("encodez une série de 3 mots! \n"); 
     
       for(i=0;i<NBRMOTS;i++) 
       { 
          printf("Mot %d : ", i); 
          scanf("%s", tab[i]); 
       } 
       do 
       { 
          printf("appuyez sur 'r' pour effectuer le tri \n"); 
          printf("appuyez sur 'q' pour quitter \n\n"); 
          choix=getch(); 
          if(choix=='q') 
          abort(); 
          else if(choix=='r') 
          { 
             tri_chaine_caract(tab,NBRMOTS,LGMOT); 
          } 
       } 
       while(choix!='q' && choix!='r'); 
    } 
     
    void tri_chaine_caract(char tableau[],int tabLength, int wordLength) 
    { 
       int i,k; 
       char temp[wordLength]; 
     
       for(i=0;i<tabLength;i++) 
       { 
          k=i; 
          while((k>=0) || (strcmp(tableau[k],tableau[k-1]<0))) 
          { 
             temp=tableau[k]; 
             tableau[k]=tableau[k-1]; 
             tableau[k-1]=temp; 
             k=k-1; 
          } 
       } 
    }

  2. #2
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut
    Bonjour

    est-ce-que il y a pas de réponse à mon problème?

    Merci

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dev0712 Voir le message
    est-ce-que il y a pas de réponse à mon problème?
    http://emmanuel-delahaye.developpez.com/qsort.htm

  4. #4
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut
    Merci, mais je ne dois pas utiliser des fonctions existantes. Pourriez vous m'aider à utiliser des fonction personnelles en utilisant des pointeurs ?

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dev0712 Voir le message
    Merci, mais je ne dois pas utiliser des fonctions existantes. Pourriez vous m'aider à utiliser des fonction personnelles en utilisant des pointeurs ?
    J'ai passé un temps non négligeable à rendre ton code compilable et à mettre au point une saisie stable ...
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
     
    #define NBRMOTS 3
    #define LGMOT 20
     
    void tri_chaine_caract (char tableau[NBRMOTS][LGMOT], int tabLength,
                            int wordLength)
    {
       int i, k;
       char *temp = malloc (wordLength);
       if (temp != NULL)
       {
          for (i = 0; i < tabLength; i++)
          {
             k = i;
             while ((k >= 0) || (strcmp (tableau[k], tableau[k - 1]) < 0))
             {
                strcpy (temp, tableau[k]);
                strcpy (tableau[k], tableau[k - 1]);
                strcpy (tableau[k - 1], temp);
                k--;
             }
          }
     
          free (temp);
       }
    }
     
    static void purge (void)
    {
       int c;
       while ((c = getchar ()) != '\n' && c != EOF)
       {
       }
    }
     
    int main (void)
    {
       char tab[NBRMOTS][LGMOT];
       int i;
       int choix;
     
       printf ("Saisir une série de 3 mots! \n");
     
       for (i = 0; i < NBRMOTS; i++)
       {
          printf ("Mot %d : ", i);
          scanf ("%s", tab[i]);
          purge ();
       }
     
       for (i = 0; i < NBRMOTS; i++)
       {
          printf ("Mot %d : %s\n", i, tab[i]);
       }
     
       do
       {
          printf ("'r' pour effectuer le tri \n");
          printf ("'q' pour quitter \n\n");
          choix = getchar ();
          if (choix != '\n')
          {
             purge ();
          }
     
          if (choix == 'r')
          {
             tri_chaine_caract (tab, NBRMOTS, LGMOT);
             for (i = 0; i < NBRMOTS; i++)
             {
                printf ("Mot %d : %s\n", i, tab[i]);
             }
          }
       }
       while (choix != 'q');
     
       return 0;
    }
    Mais le tri ne fonctionne pas et mon crédit de temps est épuisé.

    La prochaine fois, poste du code plus simple qui traite uniquement du sujet important...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    dans ta fonction de tri ceci est faux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
             temp=tableau[k]; 
             tableau[k]=tableau[k-1]; 
             tableau[k-1]=temp;
    Les chaînes se copient en C avec strcpy

  7. #7
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut
    j'ai essaye avec ce code mais c fonctionne pas

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    #include<stdio.h>
     
    int init(char *t,char *p[])
    {
    	int i,k;
    	p[0]=t;
    	k=1;
    	for (i=1;t[i]='\0';i++)
    	 if(t[i]==' ')
    	   {
    					while(t[i]++ ==' ')i++;}
    					p[k]=t+i;
    					k++;
    					return k;
    					}
     
    	int comparer(char *u,char *v)
    	{
    		while(*u!=' ' && *u++==*v++)
    		     {
    							u++;
    							v++; 
    							}	
     
    								if(*u==*v)return 0;
    							 if(*u==''&&*v=='\0') return 0;
    							 if(*u==''&&*v=='\0') return 0;
    							 if(*u=='\0'&&*v=='') return 0;
    							 if(*u<*v) return -1;
    							 return 1;
      }
    void permuter(char **u,char **v)
    {
    	char *w;
    	w=*u;
    	*u=*v;
    	*v=w;
    }
    int trier(char *t,char *p[])
    {
    	int n,i,k,j;
    	n=init(t,p);
    	for(i=0;i<n-1;i++)
    	{
    		k=0;
    		for(j=k+1;j<n;j++)
    		   if(comparer(p[j],p[k])<0)
    					    k=j;
    					if(k!=i)
    					  permuter(p[i],p[k]);
    		}
    	return n;
    }
     
    int main()
    {
    	char *t="omar byblos hhdi";
    	int i,n;
    	char *p[100];
     n=trier(t,p);
    	for(i=0;i<n;i++)
    	    printf("%s",p[i]);
    		scanf("%d",&i);
    	}
    50 C:\cours\Desktop\tp3.cpp cannot convert `char*' to `char**' for argument `1' to `void permuter(char**, char**)'

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        
       for(i=0;i<tabLength;i++) 
       { 
          k=i; 
          while((k>=0) || (strcmp(tableau[k],tableau[k-1]<0))) 
          { 
             strcpy ( temp, tableau[k] ) ; 
             strcpy ( tableau[k], tableau[k-1] ); 
             strcpy ( tableau[k-1], temp ); 
             k=k-1; 
          } 
       }
    Maintenant tu peux améliorer l'algo..

  9. #9
    Membre éprouvé Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Par défaut
    salut

    Voici un tit exemple si ça peut faire ton affaire
    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
     
    void tri(char *tab[], int taille)
    {
    	char * temp;
    	int i,j;
    	for (i = 0 ; i < taille ; i++)
    	{
    		for ( j = 0 ; j < taille ; j++)
    		{
    			if (strcmp(tab[i] , tab[j]) < 0)
    			{
    				temp = tab[i];
    				tab[i] = tab[j];
    				tab[j] = temp;
    			}
    		}
    	}
    }
     
    int main()
    {
    	char *chaine[]= {"je", "suis" ,"entrain", "de", "trier"};
    	int i;
    	tri(chaine,5);
    	for ( i = 0 ; i < 5; i++)
    		printf("%s  ",chaine[i]);
     
    	return 0;
    }
    Bon triage

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par bobmidou Voir le message
    salut

    Voici un tit exemple si ça peut faire ton affaire
    ...
    Bon triage
    ne raconte pas n'importe quoi, tu viens de faire la même faute ..

  11. #11
    Membre éprouvé Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Par défaut
    salut

    pourtant ça marche très bien


  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Jai,
    Citation Envoyé par bobmidou Voir le message
    salut

    pourtant ça marche très bien

    Oui, la comparaison étant bien faite (strcmp), tu te contentes de déplacer les pointeurs au lieu des chaînes pointées : ça marche, et c'est plus rapide.

  13. #13
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par bobmidou Voir le message
    salut

    pourtant ça marche très bien

    Oui sauf que le PO ne veut pas trier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *chaine[]= {"je", "suis" ,"entrain", "de", "trier"};
    mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char tab[NBRMOTS][LGMOT];
    il faut donc bien des strcpy

Discussions similaires

  1. ADO + ACCESS : Ranger par ordre alphabétique
    Par kurkaine dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/06/2006, 10h05
  2. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53
  3. Affichage par ordre alphabétique
    Par masseur dans le forum Langage
    Réponses: 8
    Dernier message: 08/12/2005, 11h41
  4. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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