Un club sportif du football comporte un ensemble de joueurs de différents âges qui sont divisés en trois catégories. Mineur (âge ≤ 10), Cadet (10 < âge ≤ 18), Junior (âge > 18). Chaque joueur est identifié par les informations suivantes : code, Nom, prénom, date de naissance et catégorie. Ces informations représentent les champs de trois structures suivantes.
typedef struct {
int jour ;
int mois ;
int annee ;
} Date ;
typedef struct {
int age ;
char groupe [10] ;
} Ctegorie ;
typedef struct {
int code ;
char nom_prenom[30] ;
Date naissance ;
Ctegorie type ;
} Joueur ;
#define max 100
typedef Joueur Club[max] ;
Le club gère ces joueurs à l’aide d’un tableau de type Joueur en se basant sur les fonctions suivantes :
1) void lecture (Club C,int N ) permet de saisir les informations ( code, nom , prénom et date de naissance) de N joueurs . Et remplir les autres champs (Age et Groupe) automatiquement sans utiliser le clavier.
2) void afficher (Club C, int N ) permet d’afficher la liste de N joueurs qui sont enregistrés dans le tableau C.
3) void supprimer_junior (Joueur J [max] , int * N ) cette fonction permet de
supprimer les joueurs dont le type est «Junior » et dont l’âge est supérieur strictement à 30 ans.
4) Joueur * rechercher_junior (Joueur J [max] , int N , int * NJ ) cette fonction
permet de rechercher et retourner un tableau contenant uniquement les joueurs dont le type est « junior ». Et le troisième argument NJ est utilisé pour stocker la taille du tableau retourné.
5) void groupe_junior (Joueur J [max] , int N ) cette fonction permet de classer et
afficher les joueurs de type « Junior » qui ont un âge inférieur ou égal à 30 ans dans
l’ordre décroissant selon l’âge.
6) void trier_joueurs (Joueur J [max] , int N ) cette fonction permet de trier le
tableau de telle façon que tous les joueurs de type « Mineur » apparaissent au début, suivis des joueurs de type « Cadet» puis des joueurs de type « Junior ».
Correction
1)
void saisir (Club C,int N){
int i;
for ( i=0; i<N ; i++)
{ printf("Entrer le code :"); scanf("%d",&C[i].code);
printf("Entrer Nom et prenom :"); scanf("%s",C[i].nom_prenom);
printf("Entrer la naissance \n");
printf(" jours: "); scanf("%d",&C[i].naissance.jour);
printf(" mois: "); scanf("%d",&C[i].naissance.mois);
printf(" annee: "); scanf("%d",&C[i].naissance.annee);
C[i].type.age =(12-C[i].naissance.mois+3+(30-C[i].naissance.jour+23)/30-1)/12
+ 2021-C[i].naissance.annee-1;
if( C[i].type.age <= 10 ) strcpy (C[i].type.groupe, "Mineur");
if( 10 < C[i].type.age && C[i].type.age <= 18 )
strcpy (C[i].type.groupe, "Cadet");
if( C[i].type.age > 18 ) strcpy (C[i].type.groupe, "Junior");
}
}
2)
void afficher (Club C,int N){
int i;
for ( i=0; i<N ; i++)
{ printf("==> %d %s %d/%d/%d %d ans %s ",C[i].code,C[i].nom_prenom,
C[i].naissance.jour,C[i].naissance.mois,C[i].naissance.annee,
C[i].type.age,C[i].type.groupe);
printf("\n**************************\n");
}
}
3)
void supprimer_junior(Joueur J[max],int *N)
{ int i,j;
for ( i=0; i<*N ; i++)
{if(J[i].type.age>30)
{
for (j=i;j<*N ;j++) J[j] = J[j+1];
(*N)--; i--;
}
}
}
4)
Joueur * rechercher_junior(Joueur J[max] ,int N,int *NJ)
{ Joueur tab[max];
int i;
*NJ = 0 ;
for ( i=0; i<N ; i++)
{ if(J[i].type.age > 18)
{ tab[*NJ] = J[i];
(*NJ)++ ;
}
}
return tab;
}
5)
void groupe_junior(Joueur J[max] ,int N)
{ Joueur tab[max],aide;
int i,j,NJ=0;
for ( i=0; i<N ; i++)
{ if(18 < J[i].type.age && J[i].type.age <= 30 )
{ tab[NJ] = J[i];
NJ++ ;
}
}
for( i=0; i <NJ-1; i++)
{ for( j=i+1; j <NJ; j++)
{
if(tab[i].type.age < tab[j].type.age)
{ aide = tab[i]; tab[i] = tab[j] ;
tab[j]= aide ;}
}
}
afficher (tab,NJ);
}
6)