Exercice 2
Écrire un programme en C permettant de saisir deux nombres et d'afficher leur produit. (Solution)
Exercice 3
Écrire un programme en C qui permet d'échanger le contenu de deux entiers A et B saisis par l'utilisateur. et afficher ces entiers après l’échange. (Solution)
Exercice 4
Écrire un un programme en C qui permet d'afficher si un nombre entier saisi au clavier est pair ou impair. (Solution)
Exercice 5
Écrire un programme en C qui permet d'afficher le plus grand de trois entiers saisis au clavier. (Solution)
Exercice 6
Écrire un programme en C qui permet d'évaluer une note saisi au clavier (si la note est supérieur à 10 alors il affiche validé sinon non validé (NB : la note comprise entre 0 et 20 ). (Solution)
Exercice 7
Écrire un programme en C qui demande deux nombres m et n à l’utilisateur et l’informe ensuite si le produit de ces deux nombres est positif ou négatif. On inclut dans le programme le cas où le produit peut être nul. (Solution)
Exercice 8
Écrire un programme en C qui permet de calculer la valeur absolue d'un entier saisi par l'utilisateur. (Solution)
Exercice 9
Écrire un programme en C qui permet de calculer la moyenne de trois entiers saisis par l'utilisateur. (Solution) Exercice 10
Une boutique propose à ces clients, une réduction de 15% pour les montants d’achat supérieurs à 200 dh. Écrire un programme en C permettant de saisir le prix total HT et de calculer le montant TTC en prenant en compte la réduction et la TVA=20%. (Solution)
Exercice 11
Le centre de photocopie facture 0,25 DH pour les 10 premières photocopies, 0,20 DH les vingt suivantes et 0,10 DH au-delà. Ecrire un programme en C qui demande à l’utilisateur de saisir le nombre de photocopies effectuées et qui affiche la facture correspondante. (Solution)
Exercice 12
Écrire un programme en C qui demande l'âge d'un enfant et permet d'informer de sa catégorie sachant que les catégories sont les suivantes:
"poussin de 6 a 7 ans"
"pupille de 8 a 9 ans "
"minime de 10 a 11 ans "
Exercice 13
Écrire un programme en C permettant d’afficher le mois en lettre selon le numéro saisi au clavier. ( Si l’utilisateur tape 1 le programme affiche janvier, si 2 affiche février, si 3 affiche mars...) (Solution)
Exercice 14
Écrire un programme en C qui permet d'afficher le message "Bonsoir" 10 fois. Utilisant la boucle while. (Solution)
Exercice 15
Écrire un programme en C permettant de calculer la somme S= 1+2+3+...+ 10. Utilisant la boucle while. (Solution)
Exercice 16
Écrire un programme en C permettant de calculer la somme S=1+2+3+...+ N, où N saisi par l’utilisateur. Utilisant la boucle while. (Solution)
Exercice 17
Écrire un programme en C qui permet d'afficher le message "bonjour" 10 fois . Utilisant la boucle for . (Solution)
Exercice 18
Écrire un programme en C qui permet de calculer la somme S=1+2+3+...+ 10. Utilisant la boucle for. (Solution)
Exercice 19
Écrire un programme en C qui permet de calculer la somme S=1+2+3+4+….+ N. où N saisi au clavier par l'utilisateur.Utilisant la boucle for . (Solution)
Exercice 20
Écrire un programme en C qui permet d'afficher la table de multiplication de 5. Utilisant la boucle For. (Solution)
Exercice 21
Écrire un programme en C qui permet d'afficher la table de multiplication d’un entier saisie par l’utilisateur, Utilisant la boucle For. (Solution)
Exercice 22
Écrire un programme en C qui permet d'afficher "Bonjour" 10 fois. utilisant la boucle Do While. (Solution)
Exercice 23
Écrire un programme en C qui calcule la somme S= 1+2+3+…+ 10. Utilisant la boucle Do While. (Solution)
Exercice 24
Écrire un programme en C qui affiche la table de multiplication de 8. Utilisant la boucle Do While. (Solution)
Exercice 25
Écrire un programme en C permettant de saisir 10 entiers et de les stocker dans un tableau nommé Tableau, puis les afficher. (Solution)
Exercice 26
Écrire un programme en C permettant de saisir 10 notes et qui affiche la moyenne de ces notes. (Solution)
Exercice 27
Écrire un programme en C permettant de saisir 10 entiers et qui affiche le maximum de ces entiers. (Solution)
Exercice 28
Écrire un programme en C permettant de saisir 10 entiers dans un tableau, et de calculer le nombre d'occurrences d'un élément N dans ce tableau. Où N saisi par l’utilisateur. (Solution)
Exercice 29
Écrire un programme en C permettant de saisir 10 entiers dans un tableau et de trier ce tableau par ordre croissante. puis affiche ce tableau après le tri. (Solution)
Exercice 30
Écrire un programme en C permettant de calculer le factoriel d'un entier saisi par l'utilisateur. par exemple N = 7 le factoriel de 7 égal à 1*2*3*4*5*6*7 =5040. (Solution)
Exercice 31
Écrire un programme en C permettant d'afficher les nombres paires compris entre 0 et N, où N saisi par l'utilisateur. (Solution)
Exercice 32
Écrire un programme en C qui permet de calculer la somme d'entiers impaires de 1 jusqu'à un entier N saisi par l'utilisateur. Exemple N=8 Somme = 1 +3+5+7= 16 (Solution)
Exercice 33
Écrire un programme en C qui permet de calculer le plus grand diviseur commun entre deux entiers saisis par l'utilisateur. Par exemple: M= 15 et N=10 PGCD (15 , 10) = 5 (Solution)
Exercice 34
Ecrire un programme en C qui permet d'afficher un triangle d'entiers, selon un entier saisi par l'utilisateur. Exemple N=4
1
22
333
4444
(Solution)
Exercice 35
Écrire un programme en C qui permet de calculer le nombre de chiffres d'un entier N saisi par l'utilisateur. Exemple N = 10843
le nombre de chiffres est : 5 (Solution)
Exercice 36
Écrire un programme en C qui permet d'inverser les chiffres d'un entier N saisi par l'utilisateur. par exemple N=35672 le résultat affiché doit être 27653 (Solution)
Exercice 37
Écrire un programme en C qui permet de saisir un entier N et d'afficher le triangle d'étoiles. par exemple N = 4
*
***
*****
*******
(Solution)
Exercice 38
Écrire un programme en C qui permet de saisir 10 entiers dans un tableau. puis compter combien y a-t-il d'éléments pairs et impairs. (Solution)
Exercice 39
Écrire un programme en C qui affiche si un nombre entier N saisi au clavier est Premier ou non. (Solution)
Exercice 40
Ecrire un programme en C qui demande la saisie d'un tableau T de 10 entiers, et de mettre les éléments pairs dans un tableau T1 et les éléments impaires dans un tableau T2. Puis afficher T1 et T2 (Solution)
Exercice 41
Ecrire un
programme en C qui permet à l'utilisateur de saisir une suite d'entiers se terminant
par 0, et qui affiche à la fin le nombre d'occurrences de 5 (Solution)
Exercice 42
Ecrire un programme en C permettant de saisir 10 entiers et
dit si ces entiers sont consécutifs ou non. (Solution)
Exercice 43
Ecrire un programme en C qui permet de saisir 10 entiers et qui permet de calculer la différence entre la somme des éléments paires et la somme des éléments impaires
par exemple : 1 6 7 4 5 3 1 8 2 5
==> (6+4+8+2) - (1+7+5+3+5+1) = -2 (Solution)
Exercice 44
Ecrire un programme en C permettant, à partir d'un réel x et d'une valeur entière positive n, de calculer x puissance n (Solution)
Exercice 45
Ecrire un programme en C qui permet de tester l'égalité entre deux tableaux d'entiers (tailles 10). Le programme affiche VRAI si les composants des deux tableaux sont correspondent position par position, sinon il affiche FAUX. (Solution)
Exercice 46
Écrire un programme en C qui compte le nombre d'éléments en double ( deux éléments ou plus ) dans un tableau d'entiers saisie par l'utilisateur. (Solution)
Exercice 47
Le centre de photocopie de votre établissement facture 0,25 DH pour les dix premières photocopies, 0,20 DH les vingt suivantes et 0,10 DH au-delà. Ecrire un programme en C qui de mande à l'utilisateur le nombre de photocopies effectuées et qui affiche la facture correspondant. (Solution)
Exercice 48
Écrire un programme en C qui permet de lire un caractère et dit s'il s'agit d'une lettre ou non, en cas d'une lettre il dit s'il s'agit d'une lettre minuscule ou majuscule. (Solution)
Exercice 49
Écrire un programme en C permettant de décaler les valeurs nulles vers la fin du tableau, en gardant l'ordre des éléments.
Exemple 1 2 0 6 9 0 0 8 0 3
Résultat 1 2 6 9 8 3 0 0 0 0 (Solution)
Exercice 50
Écrire un programme en C permettant d'échanger ( permuter ) et afficher les valeurs des trois entiers ( A, B et C ) saisis par l'utilisateur, selon l'ordre croissant c'est-à-dire (A < B < C ). (Solution)
Exercice 51
Écrire un programme en C qui permet d'échanger les valeurs de deux entiers A et B saisis par l'utilisateur, mais à condition d’utiliser seulement deux variables A et B. ( sans d'utiliser la troisième variable auxiliaire ) (Solution)
<< La Fonction malloc >>
Exercice 52
Écrire un programme en C permettant de saisir N entiers et de les stocker dans un tableau nommé Tab, puis les afficher. Où N saisi par l’utilisateur.
(Solution)
Exercice 53
Écrire un programme en C permettant de saisir N notes et qui affiche la moyenne de ces notes. Où N saisi par l’utilisateur. (Solution)
Exercice 54
Écrire un programme en C permettant de saisir N entiers et qui affiche le maximum de ces entiers. Où N saisi par l’utilisateur. (Solution)
Exercice 55
Écrire un programme en C permettant de saisir N entiers dans un tableau, et de calculer le nombre d'occurrences d'un élément N dans ce tableau. Où N saisi par l’utilisateur. Où N saisi par l’utilisateur. (Solution)
Exercice 56
Écrire un programme en C permettant de saisir N entiers dans un tableau et de trier ce tableau par ordre croissante. puis affiche ce tableau après le tri. Où N saisi par l’utilisateur.
<< Les Fonctions en C >>
Exercice 57
Écrire une fonction qui permet de calculer le prix TTC , cette fonction va recevoir un paramètre de type Réel dont le nom est "prixHT" et un second paramètre de type Réel dont le nom est "tva". (Solution)
Exercice 58
Écrire une fonction qui permet d'afficher si un nombre entier passé en paramètre est pair ou impair.(Solution)
Exercice 59
Écrire une fonction qui remplace les voyelles (minuscules et majuscules) par des espaces dans une chaîne passée en paramètre.(Solution)
Exercice 60
Écrire une fonction qui permet de retourner le nombre de caractères d’une chaîne de caractères passée en paramètre. (Solution)
Exercice 61
Écrire une fonction qui permet d'inverser une chaîne de caractères passée en paramètre. (Solution)
Exercice 62
Écrire une fonction qui cherche combien de fois un caractère est présent dans une chaîne de caractères. Le caractère à chercher et la chaîne seront passés en paramètres. (Solution)
Exercice 63
Écrire une fonction qui cherche si une valeur est présente dans un tableau (entiers). Elle renverra 0 si la valeur n'est pas trouvée, sinon retourne 1.Il faut passer en paramètre la valeur cherchée, le tableau et le nombre d'éléments dans le tableau. (Solution)
Exercice 64
Écrire une fonction qui tri par ordre croissant les éléments d'un tableau de nombres entiers. (Solution)
Exercice 65
Écrire une fonction récursive qui permet de calculer le factorielle d'un entier saisi par l'utilisateur. (Solution)
Exercice 66
Écrire une fonction récursive qui permet de calculer la somme 1+2+3+...+ N. où N saisi par l'utilisateur.(Solution)
Exercice 67
Écrire une fonction récursive permettant, à partir d'un réel x et d'une valeur entière positive n, de calculer x puissance n .(Solution)
Exercice 68
Écrire une fonction récursive qui permet d'afficher les entiers de 0 à 10 .utilisant un seul paramètre.
(Solution)Exercice 69
Écrire une fonction récursive qui permet d'afficher les entiers de A à B . Où A et B sont des paramètres de cette fonction.(Solution)
Exercice 70
Écrire une fonction récursive qui permet de calculer le PGCD de deux entiers passés en paramètres,( utiliser l'algorithme d'Euclide).(Solution)
Exercice 71
Écrire une fonction récursive qui permet d'afficher les éléments d'une matrice passée en paramètre. (Solution)
Exercice 72
Écrire une fonction récursive qui permet de calculer l'image d'un entier (passé en paramètre) par une suite de Fibonacci. Suite de Fibonacci est une suite d'entiers dans laquelle chaque terme est la somme des deux termes qui le précèdent. F(0)=F(1)=1.(Solution)
Les structures de données
Exercice 73
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 74
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 75
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 76
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 77
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--;
}
}
}
0 Commentaires