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);
}