Besoin d'aide avec qsort

Besoin d'aide avec qsort - C - Programmation

Marsh Posté le 07-11-2013 à 19:51:54    

Bonjour à vous tous, je suis sur un ex:
Ecrire un programme c qui lit une dizaine de mots dans un tableau puis trier ce tableau
selon le choix de l’utilisateur.
1 : selon la longueur des mots
2 : selon la précédence lexicographique
3 : selon le nombre de voyelle par mot

 
J'ai déjà fait la strucuture du programme mais j'arrive pas à trier les elements, je sais que ça doit se faire avec qsort mais je ne sais pas comment, j'ai beaucoup cherché sur le forum, j'ai trouvé mais je ne comprends pas le langage standard (char*stringblabla bla bla.... je n'ai trouvé aucun exemple donc si vous pouvez m'aider je vous serai reconnaissant! merci
 
Voilà mon code
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. { //exercie base de données NOTES
  6.     int n=0, ne=0, i=0, j=0,choix=0, p;
  7.     char MOTS[100][100], var[100];
  8.     do  {
  9.         printf("Introduire le nombre des mots " );
  10.         scanf("%d",&n);
  11.         fflush(stdin);
  12.         if (n<=1)
  13.             printf("le nombre des mots est incorrect \n" );
  14.         }
  15.     while (n<=1);
  16.     for (i=0;i<n;i++){// saisie mots
  17.         printf("Quel est la mot %d:",(i+1));
  18.         gets(MOTS[i]);
  19.         fflush(stdin);
  20.     }
  21.         do{ //controle saisie navigation menu
  22.             system("cls" ); // clean screen
  23.             printf("\n\n\t\t\t\t*****MENU RESULTAT*****\n\n\n1- Selon longueur de mots\n2- Selon précédence lexicographique\n3- Selon nombre de voyelles par mots\n\t\t\t\tChoix: " );
  24.             scanf("%d",&choix);
  25.             fflush(stdin);
  26.             if ((choix<=0)||(choix>=5)) printf("Choix incorrect, merci de verifier\n" );
  27.         }
  28.         while ((choix<=0)||(choix>=5));
  29.         switch (choix){
  30.             case 1: { // SELON LONGUEUR
  31.                     system("cls" );
  32.                     printf("Vous avez choisit d'afficher la meilleure note pour une matiere donnee\n" );
  33.                     fflush(stdin);
  34.                     i=0;j=0; p=1;//initialisation des param
  35.                     for (i=0;(i<n-1);i++){
  36.                         p=0;j=n-1;
  37.                         for (j=n-1;(j>i);j--){
  38.                             if (strcmp(MOTS[j-1],MOTS[j])>=0){
  39.                                 strcpy(var,MOTS[j-1]);
  40.                                 strcpy(MOTS[j-1],MOTS[j]);
  41.                                 //MOTS[j-1]=MOTS[j];
  42.                                 strcpy(MOTS[j],var);
  43.                                 //MOTS[j]=var;
  44.                                 p=1;
  45.                             }
  46.                         }
  47.                         if (!p) break;
  48.                     }
  49.                     i=0;
  50.                     for (i=0;(i<n);i++){
  51.                         printf("Mot num %d = %s\n",i+1,MOTS[i]);
  52.                     }
  53.                     break;
  54.                 }
  55.             case 2:{ // ordre alphabetique
  56.                     system("cls" );
  57.                     qsort()
  58.             }
  59.             case 2:{ // par nombre de voyelles
  60.                     system("cls" );
  61.                     //...
  62.             }
  63.         }
  64.     return 0;
  65. }


Message édité par gilou le 07-11-2013 à 20:58:09
Reply

Marsh Posté le 07-11-2013 à 19:51:54   

Reply

Marsh Posté le 07-11-2013 à 21:25:12    

qsort est une fonction générique de tri qui s'appuye sur 2 "entrées" :
- le tableau (pointeur sur le le premier element, taille d'un element, et nombre d'éléments)
- le pointeur sur la fonction de comparaison de 2 éléments du tableau donnés sous forme de pointer...
 
La fonction de comparaison doit avoir la meme philosophie que strcmp (retourner -1 si le premier element est plus petit, 0 si égalité, 1 si plus grand)
 
une utilisation possible est la suivante

Code :
  1. int cmp_long(const long *ap, const long *bp){
  2.   if(*ap>*bp){ return 1;}
  3.   else if(*ap==*bp){return 0;}
  4.   else{ return -1;}
  5. }
  6. ....
  7. {
  8.      long tab[5]={2,34,-1,-34,3};
  9.     qsort(tab,5, sizeof(long),cmp_long);
  10.    //Le tableau est trié à ce moment
  11. }


 
Le type long est à changer par le type de donnée souhaitée pour ton usage (genre char*)
A toi de voir comment l'utiliser au mieux, propose une utilisation, on corrigera si nécessaire


Message édité par dreameddeath le 07-11-2013 à 21:33:13
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed