Recherche un algo de tri pour mon programme

Résolu
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -  
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -
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

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 
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
Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
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
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   > Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention  
 
merci je vais essayer de l'adapter a mon programme,
0
Pierre1310 Messages postés 8564 Date d'inscription   Statut Membre Dernière intervention   651
 
Tiens moi au courant, ça fait un moment que je n'ai plus touché à du C ^^'
0
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 
comment je pourrait utiliser un tableau lorsqu’on l'a déclarer auparavant dans un typedef


typedef struct
{
double moygenerale[MAX_ELEVES];
}Ingenieur;
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Salut akybienvenu,

La bibliothèque standard du C dispose de qsort.

http://www.cplusplus.com/reference/cstdlib/qsort/


Dal
0
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour, merci j'ai pu trouver un programme me permettant de faire mes tri . qui permet aussi de gérer mon classement.
0
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 



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