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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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..

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