Pour avoir une immunité collective contre le virus COVID19, le Maroc a lancé un programme pour la vaccination d’un grand nombre de citoyens, ce qui nécessite une
gestion efficace pour l’opération de vaccination et le suivi de citoyens vaccinés. Les types des vaccins adoptés sont : Astrazeneca et Sinopharm. L’immunité d’un citoyen contre le virus COVID19 nécessite deux doses pour le vaccin utilisé, la deuxième dose doit être programmée après une période précise par rapport à la première dose, sachant que la période varie entre deux à quatre semaines.
La gestion des citoyens concernés par la vaccination est réalisée via un tableau de structures, où chaque structure représente un citoyen. Les informations qui concernent un citoyen sont : le numéro de la carte d’identité nationale (cin) , le nom (nom), le prénom(prenom), le type du vaccin (type), la date de la première dose (date_prem) et le nombre de jours entre la première et la deuxième dose (nbj).
On considère les structures suivantes :
typedef struct {
int jour ;
int mois ;
int annee ;
} Date ;
typedef struct {
char type[30] ;
Date date_prem ;
int nbj ;
} Vaccin ;
typedef struct {
char cin[30] ;
char nom [30] ;
char prenom[30];
Vaccin vac ;
} Citoyen ;
#define max 100
=>Les fonctions à rédiger sont les suivantes :
1) void lecture (Citoyen C[max] , int N) qui permet de saisir les informations des citoyens concernés par la vaccination. N représente le nombre total de citoyens.
2) void affichage (Citoyen C[max] , int N) qui permet d’afficher les informations des
citoyens concernés par la vaccination. N représente le nombre total de citoyens.
3) void totalVaccin (Citoyen C[max] , int N) qui permet de calculer et afficher le nombre de citoyens qui vont prendre un type du vaccin, sachant que C un tableau contenant les citoyens concernés par la vaccination. N représente le nombre total de citoyens.
4) void CitoyenVac (Citoyen C[max] , int N, char type[30],Citoyen tab[max], int * k) qui permet de remplir un tableau des citoyens ( tab) contenant les citoyens qui vont prendre le vaccin spécifié par le type (type). C représente un tableau de citoyens et N représente le nombre total de citoyens et k sert à mémoriser la taille du tableau (tab).
5) Date * deuxDose (Citoyen C[max] , int N, char type[30]) qui permet de retourne un tableau de type Date ( un pointeur sur Date) contenant les dates de la deuxième dose pour les citoyens concernés par un type de vaccin spécifié par le troisième argument de la fonction. C représente un tableau de citoyens et N représente le nombre total de citoyens.
6) void AfficheDate(Citoyen C[max] , int N, char cin[20] ) qui permet d’afficher les dates des deux doses programmées pour un citoyen identifié par le CIN. C représente un tableau de citoyens et N représente le nombre total de citoyens.
Correction
1)
void Lecture(Citoyen C[max],int N){
int i;
for ( i=0; i<N ; i++)
{ printf("Entrer Le CIN :"); scanf("%s",C[i].cin);
printf("Entrer Le nom :"); scanf("%s",C[i].nom);
printf("Entrer Le prenom :"); scanf("%s",C[i].prenom);
printf("Entrer le type de vaccin :"); scanf("%s",C[i].vac.type);
printf("Entrer la date de vaccin \n");
printf(" Entrer le jour :"); scanf("%d",&C[i].vac.date_prem.jour);
printf(" Entrer le mois :"); scanf("%d",&C[i].vac.date_prem.mois);
printf(" Entrer l'annee :"); scanf("%d",&C[i].vac.date_prem.annee);
printf("Entrer Le nombre de jours entre les deux doses :");
scanf("%d",&C[i].vac.nbj);
printf("******************************\n");
}
}
2)
void Affichage(Citoyen C[max],int N){
int i ;
for ( i=0; i<N ; i++)
{ printf("Le CIN : %s\n",C[i].cin);
printf("Le nom : %s\n",C[i].nom);
printf("Le prenom :%s\n",C[i].prenom);
printf("Le type de vaccin : %s\n",C[i].vac.type);
printf("La date de vaccin: %d/%d/%d\n ", C[i].vac.date_prem.jour , C[i].vac.date_prem.mois, C[i].vac.date_prem.annee);
printf("Le nombre de jours entre les deux doses : %d\n",C[i].vac.nbj);
printf("******************************\n");
}
}
3)
void totalVaccin (Citoyen C[max] , int N)
{ int i,Nb_Astra=0,Nb_Sino=0 ;
for ( i=0; i<N ; i++)
{ if(strcmp(C[i].vac.type,"Astrazeneca")==0)
Nb_Astra++;
else Nb_Sino++;
}
printf("Le nombre de citoyens qui vont Astrazenica %d\n",Nb_Astra);
printf("Le nombre de citoyens qui vont Sinopharme %d\n",Nb_Sino);
}
4)
void CitoyenVac (Citoyen C[max],int N,char type[30],Citoyen tab[max],int * k)
{ Citoyen tab[max];
int i;
*k =0;
for ( i=0; i<N ; i++)
{ if(strcmp(C[i].vac.type,type)==0)
{ tab[*k] = C[i];
(*k)++;
}
}
}
5)
Date * deuxDose(Citoyen C[max],int N ,char type[30])
{ int i,j=0;
Date dates[max];
for ( i=0; i<N ; i++)
{ if(strcmp(C[i].vac.type,type)==0)
{ dates[i].jour = ( C[i].vac.date_prem.jour + C[i].vac.nbj )%30;
dates[i].mois = ( C[i].vac.date_prem.mois +(C[i].vac.date_prem.jour + C[i].vac.nbj)/30)%12;
dates[i].annee = C[i].vac.date_prem.annee +(C[i].vac.date_prem.mois +(C[i].vac.date_prem.jour + C[i].vac.nbj)/30)/12;
}
}
return dates;
}
6)
void AfficheDate(Citoyen C[max],int N,char cin[20])
{ int i,j=0;
Date d;
for ( i=0; i<N ; i++)
{ if( strcmp(C[i].cin,cin)==0)
{
d.jour =(C[i].vac.date_prem.jour + C[i].vac.nbj )%30;
d.mois = ( C[i].vac.date_prem.mois +(C[i].vac.date_prem.jour + C[i].vac.nbj)/30)%12;
d.annee = C[i].vac.date_prem.annee +(C[i].vac.date_prem.mois +(C[i].vac.date_prem.jour + C[i].vac.nbj)/30)/12;
printf(" %s %s %s \n",C[i].nom,C[i].prenom,cin);
printf("La date de la premiere dose: %d/%d/%d\n",C[i].vac.date_prem.jour,C[i].vac.date_prem.mois,C[i].vac.date_prem.annee);
printf("La date de la deuxieme dose: %d/%d/%d",d.jour,d.mois,d.annee);
}
}
}