Tri tableau de structures
sonic1ne
Messages postés
8
Statut
Membre
-
sonic1ne Messages postés 8 Statut Membre -
sonic1ne Messages postés 8 Statut Membre -
Bonjour, voici un code de gestion d'élèves et de leur moyennes. Le problème est que la fonction tri moyennes ne fonctionne pas. Est-ce que le code de tri est bien correct ? Merci pour vos réponses.
#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; /* variable qui va servir à mémoriser le nombre d' */
/* eleves */
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;
/* déclaration d'une variable struct qui prend les champs nom, */
/* prénom, âge, notes, somme et moyennes pour tab_eleves (). */
struct etudiant contenue ;
int termine ;
termine = 0;
/* boucle de saisie qui démarre si l'entrée du champ nom est dif-*/
/* -férent de 0 */
while ( ! termine )
{
printf( "Entrez un nom ( nom = \"fin\" pour terminer) :" );
scanf( "%s", contenue.nom );
/* fonction strcmp qui comparaît le nom entré et le mot fin */
termine = (( strcmp( contenue.nom, "fin" ) ) == 0 );
/* si la saisie est différente de 0 représenté par le mot fin */
/* on demande le reste des informations */
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 : ");
/* à chaque entrée, case suivante */
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");
}
/* ------------------------------------------------- */
A voir également:
- Tri tableau de structures
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Logiciel tri photo - Guide
- Imprimer un tableau excel - Guide
3 réponses
Modifier ta fonction comme cela :
void tri_tab()
{
/* --- TRI du tableau --- */
for (i = 0 ; i < NB_NOTES ; i++)
{
/* boucle inverse, d'inversion des cases */
while (k > 0)
{
if( (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");
}
void tri_tab()
{
/* --- TRI du tableau --- */
for (i = 0 ; i < NB_NOTES ; i++)
{
/* boucle inverse, d'inversion des cases */
while (k > 0)
{
if( (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");
}
Merci foufar pour ta réponse mais ça ne marche toujours pas.
------------------------------------------------------------------ -1- Saisie d'une liste d'élèves -2- Affichage de la liste des noms, prénoms, âges et leurs notes -3- Affichage de la liste des noms, prénoms, âges et leurs moyennes -4- Affichage uniquement du tableau de moyennes -5- Affichage du tri du tableau de moyennes -0- Quitter -------------------------------------------------------------------- Choix : 1 Entrez un nom ( nom = "fin" pour terminer) :top Entrez un prénom :bob Entrez un âge :20 notes : 12 notes : 15 notes : 16 notes : 12 notes : 10 Entrez un nom ( nom = "fin" pour terminer) :tep Entrez un prénom :greg Entrez un âge :25 notes : 13 notes : 10 notes : 5 notes : 12.5 notes : 20 Entrez un nom ( nom = "fin" pour terminer) :tip Entrez un prénom :denis Entrez un âge :19 notes : 20 notes : 20 notes : 19 notes : 15 notes : 10 Entrez un nom ( nom = "fin" pour terminer) :tap Entrez un prénom :sam Entrez un âge :18 notes : 14.5 notes : 14 notes : 15 notes : 20 notes : 0 Entrez un nom ( nom = "fin" pour terminer) :tup Entrez un prénom :lulu Entrez un âge :23 notes : 20 notes : 11 notes : 12 notes : 15 notes : 20 Entrez un nom ( nom = "fin" pour terminer) :fin ------------------------------------------------------------------ -1- Saisie d'une liste d'élèves -2- Affichage de la liste des noms, prénoms, âges et leurs notes -3- Affichage de la liste des noms, prénoms, âges et leurs moyennes -4- Affichage uniquement du tableau de moyennes -5- Affichage du tri du tableau de moyennes -0- Quitter -------------------------------------------------------------------- Choix : 5 Les valeurs triées sont : 13.00 12.10 16.80 12.70 15.60