cs_sonic1
Messages postés3Date d'inscriptionmardi 5 août 2008StatutMembreDernière intervention15 mars 2009
-
14 mars 2009 à 19:11
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
16 mars 2009 à 01:54
Bonjour, ma question serait de savoir si on peut trier un tableau de structures de la même manière qu'un tableau simple. Voici un code ou j'essaie de trier un tableau de moyenne dans un tableau de structure mais ça ne fonctionne pas. Est-ce quelqu'un peut me donner une indication. Merci.
#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()
{
float tempo;
/* --- 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:
Tableau de structure c
Tableau de structure c++ - Meilleures réponses
Initialiser un tableau de structure en c - Meilleures réponses
cs_sonic1
Messages postés3Date d'inscriptionmardi 5 août 2008StatutMembreDernière intervention15 mars 2009 15 mars 2009 à 19:30
Juju12, merci pour ta réponse mais je ne comprend pas ta répone;
coucou47, j'ai étudié la fonction qsort mais je ne sais pas comment l'implémenter dans mon code. Est-ce que il faut que je modifie mon code avec des pointeurs de structures ? Si oui, je ne maîtrise pas encore les pointeurs, donc, si tu a un exemple, il sera le bienvenue. merci pour ta réponse .