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


Exercice 2
Dans le département d’informatique de la faculté des sciences, il existe un laboratoire, appelé «  Traitement de l’information et Aide à la Décision », qui regroupe  un ensemble de  professeurs, chercheurs et doctorants. Ce laboratoire produit chaque année un ensemble  de productions scientifiques.   L’objectif de ce sujet est la gestion automatique de cette  production  en utilisant un tableau de structures, où chaque production est une structure. Une production est caractérisée par les informations suivantes : un code de référence (ref), le titre de la production (titre), l’auteur principal (aut1), le directeur de la thèse (aut2), l’encadrant (aut3), le type de production (type : thèse, publication ou communication), et la date de production (date).

On considère les structures  suivantes :

typedef struct  
int  jours ;
int  mois ;  
int  annee ; 
} Date;

typedef struct  
int ref  ;   
char titre [100]  ;     
char   aut1[40] ;  
char aut2[40];  
char aut3[40] ;   
char type[40]   ;    
Date   date  ;
Production;

#define max 100 

Les fonctions à rédiger sont les  suivantes:

1) void   lecteure ( Production  P[max], int N)  qui  permet de saisir les informations de  N  productions. 
      
2) void Affichage (Production  P[max] , int N)  qui  permet d’afficher les informations de N  productions.  
 
3) void  NombreProductions (Production  P[max] , int N)  qui  permet de calculer et 
afficher  le nombre de production pour chaque type ( thèse, publication et communication) sachant que P un tableau  contenant les productions et N représente le nombre total de productions.   
    
4) Production *  RechType (Production  P[max] , int N , char type[30] , int * k)  qui  permet  de rechercher et retourne un tableau des productions  ( un pointeur sur Production)  contenant les Productions  d’un type donné ( type). P  représente un tableau de productions  et N représente le nombre total de productions,  et le troisième argument  k  sert à mémoriser le nombre de productions enregistrés dans le tableau  retourné. 

5) void  SuppProd (Production  P[max] , int * N, char auteur[30])  qui  permet de 
supprimer les productions  d’un auteur ( qui peut être un auteur principal, un directeur de  thèse ou bien un encadrant). Et après  la suppression, afficher les productions  supprimées. 

6) void AffichOrdre ( Production   P[max] , int N )  qui  permet d’afficher les productions  par ordre croissant selon la date de  production. P  représente un tableau de productions et  N représente le nombre total de productions. 

                                               Correction
                                                       
1)

void Lecture(Production P[max],int N){
 int i;
  for ( i=0; i<N ; i++)
   { printf("Entrer la reference :"); scanf("%d",&P[i].ref);
    printf("Entrer Le titre : "); scanf("%s",P[i].titre);
    printf("Entrer Le nom de l'auteur  : "); scanf("%s",P[i].aut1);
    printf("Entrer Le nom du directeur :");  scanf("%s",P[i].aut2);
    printf("Entrer le nom de l'encadrant  :"); scanf("%s",P[i].aut3);
    printf("Entrer le type de la production  :"); scanf("%s",P[i].type);
     printf("Entrer la date de la prodction: \n");
     printf("  Entrer le jour :"); scanf("%d",&P[i].date.jour);
     printf("  Entrer le mois :"); scanf("%d",&P[i].date.mois);
     printf("  Entrer l'annee :"); scanf("%d",&P[i].date.annee);
     printf("*********************************\n");
   }
 }
2)

void Affichage(Production P[max],int N){
 int i ;
 
 for ( i=0; i<N ; i++)
   {printf(" La reference : %d\n",P[i].ref); 
    printf(" Le titre: %s\n",P[i].titre); 
    printf(" Le nom de l'auteur: %s\n",P[i].aut1); 
    printf(" Le nom du directeur: %s\n",P[i].aut2);  
    printf(" Le nom de l'encadrant: %s\n",P[i].aut3); 
    printf(" Le type de la production: %s\n",P[i].type); 
    printf(" La date de la prodction: %d/%d/%d\n",P[i].date.jour,
    P[i].date.mois,P[i].date.annee);
    printf("*******************************\n");
    }                                  
}

3)

void  NombreProductions(Production P[max],int N) 
 { int Nb_pro_these=0,Nb_pro_pub=0,Nb_pro_commu=0 ,i;
   for ( i=0; i<N ; i++)
    {  if(strcmp(P[i].type,"These")==0)
           Nb_pro_these++;
       if(strcmp(P[i].type,"Publication")==0)
           Nb_pro_pub++;
       if(strcmp(P[i].type,"Communication")==0)
           Nb_pro_commu++;
     } 
    printf("Le nombre de production Thèse : %d\n",Nb_pro_these);
    printf("Le nombre de production publication : %d\n",Nb_pro_pub);
    printf("Le nombre de production communication : %d\n",Nb_pro_commu);
 }

4)

Production * RechType(Production P[max],int N,char type[30],int *k)
{  Production tab[max];
   int i;
     *k = 0 ;
  for ( i=0; i<N ; i++)
    { if(strcmp(P[i].type,type)==0)
      {  tab[*k] = P[i];
         (*k)++ ; 
      }
    } 
  return tab;
}

5)

void SuppProd (Production P[max],int *N,char auteur[30])
{  Production supp[max];
int i,j,k=0;
  for ( i=0; i<*N ; i++)
    { if(strcmp(P[i].aut1,auteur)==0 ||
         strcmp(P[i].aut2,auteur)==0 ||
         strcmp(P[i].aut3,auteur)==0)
        {    supp[i]=P[i];
           for ( j=i ; j<*N ; j++)   P[j] = P[j+1];
         
            (*N)--; i--;  k++;
        }
    }
    printf("la liste de productions supprimées :");
    Affichage(supp,k);
 }


6)

void AffichOrdre(Production P[max],int N)
{  Production aide;
    int i,j;

   for( i=0; i <N-1; i++)
   {  for( j=i+1; j <N; j++)
       {
          if(P[i].date.annee > P[j].date.annee) 
           { aide = P[i]; P[i] = P[j] ;  P[j]= aide ;}
          if(P[i].date.annee == P[j].date.annee &&
           P[i].date.mois > P[j].date.mois) 
           { aide = P[i]; P[i] = P[j] ;  P[j]= aide ; }
          
          if(P[i].date.annee == P[j].date.annee &&
             P[i].date.mois  == P[j].date.mois  &&
             P[i].date.jour > P[j].date.jour) 
            { aide = P[i]; P[i] = P[j] ;  P[j]= aide ; }
       } 
    } 
      Affichage(P,N);
}

Exercice 3

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



Exercice 4

L’objectif est de créer un programme  permettant la gestion d’une bibliothèque, cette bibliothèque contient un grand nombre de livres de différentes spécialités. Chaque livre comporte un ensemble d’informations (code, titre,  spécialité,  auteur et  édition).
On considère les structures  suivantes :

typedef struct  {  
int  jour ;       
int  mois ;     
int  annee ;        
} Edition ;

typedef struct   {  
int code  ;       
char titre [30]  ;        
char specialite[30]  ;           
char auteur[30]  ;   
Edition edit  ;         
}  Livre  ;

#define max 100

==> Les fonctions à rédiger sont les  suivantes :

1)  void   lecture (Livre   L[max], int N )   qui permet de saisir les informations  de  N  livres.

2)  void afficher (Livre  L[max], int N )   cette fonction  permet  d’afficher les informations de N livres. 

3) int  comparer  (Edition  x , Edition y )  qui  permet de comparer deux dates d’éditions, et  retourne ( -1  si x avant  y,  0  si x et y sont identiques , 1  si x après y ).

4) void   ordre_edition  (Livre  L[max] ,  int N )   permet de classer les livres du tableau  L  par ordre,  selon la date d’édition. 
    
5) Livre *  livres_auteur  (Livre  L[max] ,  int N , char nom[30] , int * k )   cette fonction permet de retourner un tableau  contenant  les livres d’un auteur passé en paramètre   (nom).  L  représente un tableau contenant N Livres  et k  sert à mémoriser la taille du tableau retourné.

6) void   supprimer ( Livre  L[max]  , int  * N , char  nom[30] )  cette fonction  permet  de supprimer les livres d’un auteur passé en paramètre.  N  passé par adresse pour modifier la taille du tableau après la suppression.

                                            Correction
                                                       
1)

void   lecture (Livre L[max],int N ){
 int i;
  for ( i=0; i<N ; i++)
   { printf("Entrer le code:");   scanf("%d",&L[i].code);
     printf("Entrer le titre: "); scanf("%s",L[i].titre);
     printf(" specialite: ");  scanf("%s",L[i].specialite);
     printf(" L'auteur :");    scanf("%s",L[i].auteur);
     printf("Date d'edition \n"); 
     printf(" Jour:");  scanf("%d",&L[i].edit.jour);
     printf(" Mois:");  scanf("%d",&L[i].edit.mois);
     printf(" annee:"); scanf("%d",&L[i].edit.annee);
     printf("***************************\n");
   }
 }

2)
void  afficher (Livre L[max],int N){
 int i;
  for ( i=0; i<N ; i++)
   { printf("le code: %d\n",L[i].code);
     printf("Le titre : %s\n",L[i].titre); 
     printf(" specialite :%s\n",L[i].specialite);
     printf(" l'auteur : %s\n",L[i].auteur);
     printf("Date d'edition: %d/%d/%d \n",
     L[i].edit.jour,L[i].edit.mois,L[i].edit.annee);
     
     printf("****************************\n");
   }
 }

3)

int  comparer(Edition x ,Edition y) 
 {  if(x.annee < y.annee ) return -1;
    if(x.annee > y.annee ) return  1 ;
    if(x.annee == y.annee && x.mois < y.mois ) return -1 ;
    if(x.annee == y.annee && x.mois > y.mois ) return  1 ;
    if(x.annee == y.annee && x.mois == y.mois && x.jour < y.jour) return -1 ;
    if(x.annee == y.annee && x.mois == y.mois && x.jour > y.jour) return  1 ;
    if(x.annee == y.annee && x.mois == y.mois && x.jour == y.jour) return 0 ;   
 }

4)

void ordre_edition(Livre L[max],int N)
 { Livre aide;   int i,j;

   for( i=0; i <N-1; i++)
   {  for( j=i+1; j <N; j++)
       {
          if(L[i].edit.annee > L[j].edit.annee) 
           { aide = L[i]; L[i] = L[j] ;  L[j]= aide ;}
          if(L[i].edit.annee == L[j].edit.annee &&
           L[i].edit.mois > L[j].edit.mois) 
           { aide = L[i]; L[i] = L[j] ;  L[j]= aide ; }
          
          if(L[i].edit.annee == L[j].edit.annee &&
             L[i].edit.mois  == L[j].edit.mois  &&
             L[i].edit.jour > L[j].edit.jour) 
            { aide = L[i]; L[i] = L[j] ;  L[j]= aide ; }
       } 
    } 
}

5)

Livre * livres_auteur(Livre L[max],int N ,char nom[30],int *k)
{   Livre tab[max];
   int i;
     *k = 0 ;
  for ( i=0; i<N ; i++)
    { if(strcmp(L[i].auteur,nom)==0)
      {  tab[*k] = L[i];
         (*k)++ ; 
      }
    } 
  return tab;
}




6)

void   supprimer (Livre L[max],int *N,char nom[30])  
{ int i,j;
   for ( i=0; i<*N ; i++)
     {if(strcmp(L[i].auteur,nom)==0)
        {    
           for (j=i;j<*N ;j++)   L[j] = L[j+1];
              (*N)--;   i--; 
        }
    }
 }



Exercice 5

Un centre d’immatriculation au Maroc souhaite automatiser l’enregistrement des véhicules  (Neuf et occasion) via un système informatique. Ce système doit assurer les taches suivantes : l’enregistrement des véhicules, l’élaboration des cartes grises, ….etc. On vous propose de réaliser cette gestion en utilisant un tableau de structures. Chaque véhicule est identifié par les informations suivantes : Nom, prénom et CIN du propriétaire, Marque, Model, Carburant (gasoil ou essence), état (neuf ou occasion), puissance fiscale et Immatriculation. Ces informations représentent les champs des  structures  suivantes.

typedef  struct  {  
int  mois  ;  
int   annee ;  
} Model ;

typedef  struct  {   
char nom_prenom[30] ;  
char  CIN[20]  ;  
char marque[20]  ; 
 Model mod ; 
char carburant[15] ; 
char etat[15] ;  
int fiscale ;  
char Matricule[40]  ;  
} Vehicule ; 

#define max 100

=> Les fonctions à rédiger sont les  suivantes :

1)  void  saisir (Vehicule  V[max] , int N )  permet de saisir les informations  de N véhicules.  
 
2) void   afficher  (Vehicule  V[max] , int N )   permet d’afficher la liste de N véhicules qui sont enregistrés dans le tableau V. 

3)  int rechercher  (Vehicule   V[max] , int N , char Matricule [40] )   cette fonction 
permet  de rechercher un véhicule identifié par la matricule  m  dans  le tableau V contenant N véhicules et retourne l’indice 1 dans le cas de réussite et  0  dans le cas inverse.

4) void  ajouter_vehicule  (Vehicule   V[max] , int  * N  , Vehicule vc  )   permet  d’ajouter un véhicule vc  au tableau V  de N  véhicules. Dans le cas où le véhicule existe déjà dans le tableau, il faut faire une mise à jour concernant  le nouveau propriétaire (nom_prénom et CIN).  
            
5) Dans le cadre de la protection de l’environnement contre la pollution et la réduction du nombre des  accidents, une décision est prise pour arrêter les véhicules qui ont dépassés  25  ans de circulation par rapport à la date  précisée. 

void   supprimer (Vehicule   V[max] ,  int  * N ,  int  annee )  cette fonction  permet  de supprimer les véhicules qui ont dépassés 25  ans de circulation.

                                            Correction
                                                       
1)

void saisir (Vehicule V[max],int N){
 int i;
  for ( i=0; i<N ; i++)
   {
     printf("Entrer Nom et prenom:");   scanf("%s",V[i].nom_prenom);
     printf("Entrer CIN: "); scanf("%s",V[i].CIN);
     printf("Entrer marque: "); scanf("%s",V[i].marque);
     printf("Entrer model \n");  
     printf(" mois: ");     scanf("%d",&V[i].mod.mois);
     printf(" annee: ");    scanf("%d",&V[i].mod.annee);
     printf("Carburant: "); scanf("%s",V[i].carburant);
     printf("Etat : ");     scanf("%s",V[i].etat);
     printf("Nb cv: ");     scanf("%d",&V[i].fiscale);
     printf("Matricule :"); scanf("%s",V[i].Matricule);
   }
 }

2)

void  afficher (Vehicule V[max],int N){
 int i;
  for ( i=0; i<N ; i++)
   { printf("Nom et prenom: %s\n",V[i].nom_prenom);
     printf("CIN: %s\n",V[i].CIN);
     printf("Model: %d/%d \n",V[i].mod.mois,V[i].mod.annee);  
     printf("Carburant: %s \n",V[i].carburant);
     printf("Etat : %s \n",V[i].etat);
     printf("Nb cv: %d \n",V[i].fiscale);
     printf("Matricle:%s \n",V[i].Matricule);
     printf("**************************\n");
   }
 }

3)

int rechercher (Vehicule V[max], int N,char  m[40])  
 {  int i,existe=0;
    for ( i=0; i<N ; i++) {
    if( strcmp(V[i].Matricule,m)==0) 
        existe=1; 
     }
    return existe;  
 }


4)

void  ajouter_vehicule(Vehicule V[max],int *N,Vehicule vc)
 {   int i;
     if(rechercher(V,*N,vc.Matricule)== 1) 
      { for( i=0; i < *N; i++)
         { if( strcmp(V[i].Matricule,vc.Matricule)==0) 
            { strcpy(V[i].nom_prenom,vc.nom_prenom) ; 
              strcpy(V[i].CIN,vc.CIN);
            }  
          } 
     }else
        { V[*N] = vc ;   (*N)++; }  
 }

5)

void   supprimer (Vehicule V[max],int *N,int annee)  
{ int i,j;
   for ( i=0; i<*N ; i++)
     {if(annee-V[i].mod.annee>=25)
        {    
           for (j=i;j<*N ;j++)   V[j] = V[j+1];
              (*N)--;   i--; 
        }
    }
 }