Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1430 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Besoin d'aide avec qsort

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besoin d'aide avec qsort

n°2209677
lemedfr
Posté le 07-11-2013 à 19:51:54  profilanswer
 

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
mood
Publicité
Posté le 07-11-2013 à 19:51:54  profilanswer
 

n°2209685
dreameddea​th
Posté le 07-11-2013 à 21:25:12  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Besoin d'aide avec qsort

 

Sujets relatifs
aide VBSAide Programmation en C
[Excel] Données / convertir aideaide requête sql updateen fonction champ autre table
Application de smileys : Besoin de conseils !Aide pour création Patch Pes 2014
[C] Besoin d'aide pour le Jeux de la Viebesoin d'aide pour completer un programme
Plus de sujets relatifs à : Besoin d'aide avec qsort


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR