Recherche un algo de tri pour mon programme

Résolu
akybienvenu Messages postés 53 Statut Membre -  
akybienvenu Messages postés 53 Statut Membre -
bonsoir ,
dans un programme de calcul de moyennes que j'ai écris a la fin de mon programme la moyenne de chaque étudiant est dans un tableau que j'ai déclarer dans mon typesdef, pour le terminer je recherche un algo qui me permettrait que classer ces étudiant selon leur moyenne obtenue dans ingenieur[index].moygenerale[j]
voici ma fonction qui calcul les moyennes

void calculMoyenne_Ingenieur(Ingenieur ingenieur[], unsigned int index , unsigned int nb_moyennes)
{
   int j;
   for(j=0;j<nb_moyennes;j++)
   {
      ingenieur[index].moygenerale[j]=(ingenieur[index].moyenne_avec_coefficient/ingenieur[index].TotalDesCoefficient);
   }
}

void calculMoyenne(Ingenieur ingenieur[], unsigned int nb_ingenieurs, unsigned int nb_moyennes)
{  int i;
   for(i=0;i<nb_ingenieurs;i++)
   {
     calculMoyenne_Ingenieur(ingenieur,i,nb_moyennes);
   }
}

void afficheMoyenne_Ingenieur(Ingenieur ingenieur[], unsigned int index , unsigned int nb_moyennes)
{
   int j;
   for(j=0;j<Ingenieur_Moyenne_Generele;j++)
   {
        printf( "La moyenne de : \n"  );
        printf("%s est = ",ingenieur[index].nom);
        printf("\n\n");
        printf("                                           \n");
        printf("  ......................................   \n");
        printf("               est %f                      \n",ingenieur[index].moygenerale[j]
);
        printf("  ......................................   \n");
   }
}

void afficheMoyenne(Ingenieur ingenieur[], unsigned int nb_ingenieurs, unsigned int nb_moyennes)
{
  int i;
   for(i=0;i<nb_ingenieurs;i++)
   {
      afficheMoyenne_Ingenieur(ingenieur,i,nb_moyennes);
   }
}

4 réponses

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,

    Il existe de nombreux algorithmes de tri, pour un nombre raisonnable d'ingénieurs, un tri par insertion est suffisant.
    Le problème est que dans ton exemple chaque ingenieur a plusieurs moygenerale qui sont dans un tableau, alors sur laquelle trier?
    0
    1. akybienvenu Messages postés 53 Statut Membre
       
      non chaque ingénieur a une seule moyenne générale. le probleme est que je ne maitrise pas totalement les algo de tri qui me permettrait des les classer selon leur moyenne
      0
    2. Pierre1310 Messages postés 8854 Statut Membre 652
       
      Bonjour,

      Un algo qui peut fonctionner, par ordre croissant.

      Pour i allant de 0 à la fin de ton tableau
          Pour b allant de 0 à la fin de ton tableau
               si i -> 0 alors
                  si tab[j]<tab[i] alors
                         tab[i] = tab[j]
                  fin si
               sinon
                  si tab[j]<tab[i]  ET tab[j]>tab[i-1]alors
                         tab[i] = tab[j]
                  fin si
          fin pour
      fin pour
      
      0
    3. akybienvenu Messages postés 53 Statut Membre > Pierre1310 Messages postés 8854 Statut Membre
       
      merci je vais essayer de l'adapter a mon programme,
      0
    4. Pierre1310 Messages postés 8854 Statut Membre 652
       
      Tiens moi au courant, ça fait un moment que je n'ai plus touché à du C ^^'
      0
    5. akybienvenu Messages postés 53 Statut Membre
       
      comment je pourrait utiliser un tableau lorsqu’on l'a déclarer auparavant dans un typedef
      
      
      typedef struct
      {
      double moygenerale[MAX_ELEVES];
      }Ingenieur;
      0
  2. akybienvenu Messages postés 53 Statut Membre
     
    bonjour, merci j'ai pu trouver un programme me permettant de faire mes tri . qui permet aussi de gérer mon classement.
    0
  3. akybienvenu Messages postés 53 Statut Membre
     


    void enrgMoyennes(Ingenieur ingenieur[],double table[], unsigned int nb_ingenieurs)
    {
    size_t i;
    for(i = 0; i < nb_ingenieurs; i++)
    {
    table[i]=ingenieur[i].moygenerale;
    }
    }
    void echanger(double table[], size_t i)
    { size_t tmp;
    tmp = table[i];
    table[i] = table[i+1];
    table[i+1] = tmp;
    }
    void trierMoyennes(double table[], unsigned int nb_ingenieurs)
    {
    size_t i, j;
    for( i=0;i<nb_ingenieurs-1;i++)
    {
    for( j=0;j<nb_ingenieurs;j++)
    {
    if(table[i]<table[i+1])
    {
    echanger(table,i);
    }
    }
    }
    }
    void affichetable(Ingenieur ingenieur[],double table[], unsigned int nb_ingenieurs)
    {
    size_t i,j;
    enrgMoyennes(ingenieur,table, nb_ingenieurs);
    trierMoyennes(table, nb_ingenieurs);
    printf("voici le classement des ingenieurs\n\n");
    for(i = 0; i < nb_ingenieurs; i++)
    {
    for(j = 0; j < nb_ingenieurs; j++)
    {
    if(table[i]==ingenieur[j].moygenerale)
    {
    printf("%s %f \n\n",ingenieur[j].nom,ingenieur[j].moygenerale);
    }
    }
    }
    printf("Ce programme a ete compile le %s a %s\n", __DATE__, __TIME__);

    }
    0