Un club d’athlétisme organise chaque année une compétition de course (400 mètres et 3000 mètres) afin de sélectionner les athlètes contribuant aux compétitions nationales. Un athlète participant à la compétition est une personne identifiée par les informations suivantes : un code identifiant (code), le nom (nom), le prénom (prénom), et la date de naissance (date) et le score (score).
On considère les structures suivantes :
typedef struct {
int temps ; /* temps en seconde effectué pour terminer la course */
char distance[10] ; /* Distance de la course ( "400 m" ou "3000 m" ) */
char termine[4] ; /* Athlète a terminé la course ( "oui" ou "non" ) */
} Score ;
typedef struct {
int code ; /* code identifiant l’athlète */
char nom_prenom [10] ; /* Nom et prénom de l’athlète */
Score competition ; /* Résultat de l’athlète */
} Athlete ;
#define max 100
==> Les fonctions à rédiger sont les suivantes:
1) void Lecture (Athlete A[max], int N ) permet de saisir les informations de N athlètes.
2) void Affichage (Athlete A[max], int N ) qui permet d’afficher les informations de N athlètes.
3) void Calcul (Athlete A[max], int N) qui permet de calculer et afficher le nombre des athlètes participant à chaque type de course ( NB_400 , NB_3000 )
4) void supprimer (Athlete A[max] , int N ) qui permet de supprimer les athlètes qui n’ont pas terminé la course.
5) void chercher_400 (Athlete A[max] , int N , Athlete T[max] , int * k ) qui permet de remplir le tableau T avec des athlètes qui ont terminé la course de 400 mètres. A représente un tableau contenant N Athlètes, et le quatrième argument sert à mémoriser la taille du tableau T.
6) void affiche_ordre_400 (Athlete T[max] , int n ) qui permet de trier et afficher les informations des athlètes qui ont terminé la course 400 mètres par ordre de mérite ( Ordre croissant ). n représente le nombre total des athlètes qui ont terminé la course de 400 mètres.
Correction
1)
void Lecture (Athlete A[max],int N ){
int i;
for ( i=0; i<N ; i++)
{ printf("Entrer le code:"); scanf("%d",&A[i].code);
printf("Entrer le nom et prenom: "); scanf("%s",A[i].nom_prenom);
printf("Le temps effectue en seconde: "); scanf("%d",&A[i].competition.temps);
printf("La distance de la course:"); scanf("%s",A[i].competition.distance);
printf("Termine la course (oui ou non)?:"); scanf("%s",A[i].competition.termine);
printf("*************************\n");
}
}
2)
void Affichage (Athlete A[max],int N){
int i;
for ( i=0; i<N ; i++)
{ printf("le code: %d\n",A[i].code);
printf("Le nom et prenom: %s\n",A[i].nom_prenom);
printf("Le temps effectue en seconde:%d\n",A[i].competition.temps);
printf("La distance de la course: %s\n",A[i].competition.distance);
printf("Terminition: %s\n",A[i].competition.termine);
printf("**************************\n");
}
}
3)
void Calcul(Athlete A[max],int N)
{ int NB_400=0 , NB_3000 = 0 ,i;
for ( i=0; i<N ; i++)
{ if(strcmp(A[i].competition.distance,"400m")==0)
NB_400++;
if(strcmp(A[i].competition.distance,"3000m")==0)
NB_3000++;
}
printf("Le nombre de participant de 400m : %d\n",NB_400);
printf("Le nombre de participant de 3000m : %d\n",NB_3000);
}
4)
void Supprimer(Athlete A[max],int *N)
{ int i,j;
for ( i=0; i<*N ; i++)
{if(strcmp(A[i].competition.termine,"non")==0)
{
for (j=i;j<*N ;j++) A[j] = A[j+1];
(*N)--; i--;
}
}
}
5)
void chercher_400(Athlete A[max],int N,Athlete T[max],int * k)
{
int i ;
*k = 0;
for ( i=0; i<N ; i++)
{ if(strcmp(A[i].competition.distance,"400m")==0 &&
strcmp(A[i].competition.termine,"oui")==0)
{ T[*k] = A[i];
(*k)++ ;
}
}
}
6)
void affiche_ordre_400(Athlete T[max],int N)
{ Athlete aide;
int i,j;
for( i=0; i <N-1; i++)
{ for( j=i+1; j<N; j++)
{
if ( T[i].competition.temps > T[j].competition.temps )
{ aide = T[i]; T[i] = T[j] ;
T[j]= aide ;
}
}
}
Affichage (T,N);
}