Bonjour, je voudrais trié un tableau de moyenne inclus dans un tableau de structure mais apparement le codage que j'ai fait n'a pas l'air de fonctionner. Ma question est : est-ce que l'on peut effectuer un tri dans un tableau de structure de la même manière que dans un tableau simple ?
merci pour vos réponses.

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
/* --- déclaration des constantes --- */ 
#define TAILLE_NOM 10 
#define TAILLE_PRENOM 2*TAILLE_NOM 
#define NB_NOTES 5 /* nombre de notes par étudiants */
#define MAX 25 /* nombre de notes pour tous les étudiants */
#define MAX_ETUDIANTS 50
 
/* --- declaration du type etudiant --- */
    struct etudiant {
            char nom[TAILLE_NOM]       ;
            char prenom[TAILLE_PRENOM] ;
            float notes[MAX];
            float moyennes[MAX/NB_NOTES];
            float somme;
            int age;
        } ;
 
/* --- variables globales --- */
int nbeleves = 0;                                                           */
int i, j, k,l;
float tempo;
struct etudiant tab_eleves[MAX_ETUDIANTS];
 
/* --- procédures et fonctions --- */
void saisie_eleves();
void affichage1();
void affichage2();
void moyennes();
void tri_tab();
 
int main(void)
{
  int choix = -1 ; 
 
  /* -- boucle d'affichage du menu -- */ 
  while (choix != 0 )
  {
     printf(" \n------------------------------------------------------------------\n");
     printf("  -1- Saisie d'une liste d'élèves \n");
     printf("  -2- Affichage de la liste des noms, prénoms, âges et leurs notes\n");
     printf("  -3- Affichage de la liste des noms, prénoms, âges et leurs moyennes\n");
     printf("  -4- Affichage uniquement du tableau de moyennes\n");
     printf("  -5- Affichage du tri du tableau de moyennes\n");
     printf("  -0- Quitter\n");
     printf(" --------------------------------------------------------------------\n");
     printf("Choix :\n");
     scanf("%d",&choix);
 
     /* -- selecteur : appel des procedures -- */
     switch (choix)
     {
       case 1 : saisie_eleves();
                break ;
 
       case 2 : affichage1();
                break ;
 
       case 3 : affichage2();
                break;
 
       case 4 : moyennes();
                break;
 
       case 5 : tri_tab();
                break;
 
       case 0 : printf("Au revoir \n");
                break ;
 
       default: printf("Erreur de saisie\n");
                break;                   
     }
  }
 
  printf( "\n" );
 
  return EXIT_SUCCESS;
}    
 
void saisie_eleves()
{
  i = 0,j = 0, k = 0;
 
  struct etudiant contenue ; 
  int termine ;
  termine = 0;
                                                   */
  while ( ! termine )
   {
     printf( "Entrez un nom ( nom = \"fin\" pour terminer) :" );
     scanf( "%s", contenue.nom );
 
     termine = (( strcmp( contenue.nom, "fin" ) ) == 0 );
 
     if ( ! termine )
      {
        printf( "Entrez un prénom :" );
        scanf( "%s", contenue.prenom );
 
        printf( "Entrez un âge :" );
        scanf( "%d", &contenue.age );
 
        contenue.somme = 0;
 
        for( j = 0;j < NB_NOTES; j++ ) 
         {
           printf("notes : ");
 
           scanf("%f",contenue.notes+j); 
           /* calcul des 5 1eres notes entrées et dont la somme est affe- */
           /* -ctée au champ somme de la variable contenue                */
           contenue.somme += contenue.notes[j]; 
 
           /* tous les NB_NOTES lues au clavier, on calcule leur moyenne  */
           if ((j+1)%NB_NOTES == 0) 
            {
              contenue.moyennes[(j+1)/NB_NOTES - 1] = contenue.somme/NB_NOTES;
              contenue.somme = 0;
            }
          }
         /* affectation du contenu de la variable struct au tableau */
         /* tab_eleve[] déclaré en variable globale                 */
         tab_eleves[nbeleves] = contenue ;
         nbeleves++ ;
      } /* fin de la 1ere condition if */
     printf( "\n" );
   } /* fin de la boucle while */
   /* on met a jour la variable de controle du tableau */
}
 
 
/* --- fonction affichage nom, prénom, âge et nombre de notes --- */
void affichage1()
{
  int i;
    printf( "\n----- Virification saisie ------\n" );
 
    for ( i = 0; i < nbeleves; i++ )
    {
        printf( "\neleve %2d : ", ( i + 1 ) );
        printf( "%10s %10s ", tab_eleves[i].nom, tab_eleves[i].prenom );
        printf( "%2d \n", tab_eleves[i].age );
        printf( "\nNotes :" );
        for ( j = 0; j < NB_NOTES; j++ )
            printf( "%6.2f", tab_eleves[i].notes[j] );  
 
        printf( "\n" );
    }
}
 
/* --- fonction affichage nom, prénom et moyenne --- */
void affichage2()
{
    printf( "\nNoms, prénoms et moyennes :\n" );
 
    for (i = 0; i < nbeleves; i++)
    {
        printf("\n%10s %10s %6.2f\n", tab_eleves[i].nom, 
        tab_eleves[i].prenom, tab_eleves[i].moyennes[k]);
    }
}
 
/* --- fonction affichage tableau des moyennes --- */
void moyennes()
{
   printf("\nTableau des moyennes :\n");
   for (i = 0; i < NB_NOTES; i++)
   printf("\n%6.2f\n", tab_eleves[i].moyennes[k]);
}
 void tri_tab()
 {
    /* --- TRI du tableau --- */
    for (i = 0 ; i < NB_NOTES ; i++)
     {
       /* boucle inverse, d'inversion des cases */
       while ( (k > 0) && (tab_eleves[i].moyennes[k] < tab_eleves[i].moyennes[k-1]) )
       {
         tempo = tab_eleves[i].moyennes[k-1] ;
         tab_eleves[i].moyennes[k-1] = tab_eleves[i].moyennes[k];
         tab_eleves[i].moyennes[k--] = tempo;
       }
     } 
    printf("Les valeurs triées sont :\n");
    for (i = 0 ; i < NB_NOTES ; i++)
    printf("%6.2f", tab_eleves[i].moyennes[k]);
    printf("\n");
}
/* ------------------------------------------------- */