0% ont trouvé ce document utile (0 vote)
15 vues8 pages

Corrige TD 5

Le document présente trois exercices de programmation en C : la gestion d'un catalogue de produits, la gestion d'étudiants avec calculs statistiques, et un système de gestion d'employés avec dates. Chaque exercice inclut des structures de données, des fonctions pour manipuler ces données, et un menu interactif pour l'utilisateur. Les fonctionnalités comprennent l'affichage, la recherche, la modification et le calcul de statistiques pour les produits, les étudiants et les employés.

Transféré par

amalchaaleli2
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues8 pages

Corrige TD 5

Le document présente trois exercices de programmation en C : la gestion d'un catalogue de produits, la gestion d'étudiants avec calculs statistiques, et un système de gestion d'employés avec dates. Chaque exercice inclut des structures de données, des fonctions pour manipuler ces données, et un menu interactif pour l'utilisateur. Les fonctionnalités comprennent l'affichage, la recherche, la modification et le calcul de statistiques pour les produits, les étudiants et les employés.

Transféré par

amalchaaleli2
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

### **Correction des Exercices**

---

## **Exercice 1 : Gestion d’un catalogue de produits**

### **Partie 1 : Déclaration et initialisation**


```c
#include <stdio.h>
#include <string.h>

#define MAX_PRODUITS 10

typedef struct {
int id;
char nom[50];
float prix;
int stock;
} Produit;

Produit catalogue[MAX_PRODUITS] = {
{1, "Laptop", 999.99, 5},
{2, "Smartphone", 599.99, 10},
{3, "Tablette", 299.99, 8},
{4, "Casque", 99.99, 15},
{5, "Souris", 19.99, 20},
// Ajoutez d'autres produits si nécessaire
};
```

### **Partie 2 : Fonctions de manipulation**


```c
void afficherProduit(Produit p) {
printf("ID: %d\nNom: %s\nPrix: %.2f\nStock: %d\n\n", p.id, p.nom, p.prix, p.stock);
}

void afficherCatalogue() {
printf("\n--- CATALOGUE ---\n");
for (int i = 0; i < MAX_PRODUITS; i++) {
if (catalogue[i].id != 0) { // Ignore les emplacements vides
afficherProduit(catalogue[i]);
}
}
}

void rechercherProduit() {
int id;
printf("Entrez l'ID du produit : ");
scanf("%d", &id);

for (int i = 0; i < MAX_PRODUITS; i++) {


if (catalogue[i].id == id) {
afficherProduit(catalogue[i]);
return;
}
}
printf("Produit non trouvé.\n");
}
```

### **Partie 3 : Modification interactive**


```c
void modifierPrix() {
int id;
float nouveauPrix;
printf("Entrez l'ID du produit : ");
scanf("%d", &id);

for (int i = 0; i < MAX_PRODUITS; i++) {


if (catalogue[i].id == id) {
printf("Nouveau prix : ");
scanf("%f", &nouveauPrix);
catalogue[i].prix = nouveauPrix;
printf("Prix mis à jour.\n");
return;
}
}
printf("Produit non trouvé.\n");
}

void ajouterStock() {
int id, quantite;
printf("Entrez l'ID du produit : ");
scanf("%d", &id);

for (int i = 0; i < MAX_PRODUITS; i++) {


if (catalogue[i].id == id) {
printf("Quantité à ajouter : ");
scanf("%d", &quantite);
catalogue[i].stock += quantite;
printf("Stock mis à jour.\n");
return;
}
}
printf("Produit non trouvé.\n");
}
```

### **Partie 4 : Menu principal**


```c
int main() {
int choix;
do {
printf("\n--- MENU ---\n");
printf("1. Afficher le catalogue\n");
printf("2. Rechercher un produit\n");
printf("3. Modifier le prix d'un produit\n");
printf("4. Ajouter du stock\n");
printf("5. Quitter\n");
printf("Choix : ");
scanf("%d", &choix);

switch (choix) {
case 1: afficherCatalogue(); break;
case 2: rechercherProduit(); break;
case 3: modifierPrix(); break;
case 4: ajouterStock(); break;
case 5: printf("Au revoir !\n"); break;
default: printf("Choix invalide.\n");
}
} while (choix != 5);

return 0;
}
```

---

## **Exercice 2 : Gestion d’étudiants avec calculs statistiques**

### **Partie 1 : Déclaration et saisie**


```c
#include <stdio.h>
#include <string.h>

#define NB_ETUDIANTS 5
#define NB_NOTES 5

typedef struct {
char nom[30];
float notes[NB_NOTES];
float moyenne;
} Etudiant;

void saisirEtudiants(Etudiant etudiants[]) {


for (int i = 0; i < NB_ETUDIANTS; i++) {
printf("\nÉtudiant %d\n", i + 1);
printf("Nom : ");
scanf("%s", etudiants[i].nom);

printf("Notes (5 matières) : ");


for (int j = 0; j < NB_NOTES; j++) {
scanf("%f", &etudiants[i].notes[j]);
}
}
}
```

### **Partie 2 : Calculs et affichage**


```c
void calculerMoyenne(Etudiant *e) {
float somme = 0;
for (int i = 0; i < NB_NOTES; i++) {
somme += e->notes[i];
}
e->moyenne = somme / NB_NOTES;
}

void afficherEtudiants(Etudiant etudiants[]) {


printf("\n--- LISTE DES ÉTUDIANTS ---\n");
for (int i = 0; i < NB_ETUDIANTS; i++) {
calculerMoyenne(&etudiants[i]);
printf("%s : Moyenne = %.2f\n", etudiants[i].nom, etudiants[i].moyenne);
}
}

Etudiant meilleurEtudiant(Etudiant etudiants[]) {


Etudiant meilleur = etudiants[0];
for (int i = 1; i < NB_ETUDIANTS; i++) {
if (etudiants[i].moyenne > meilleur.moyenne) {
meilleur = etudiants[i];
}
}
return meilleur;
}
```

### **Partie 3 : Statistiques avancées**


```c
float moyenneClasse(Etudiant etudiants[]) {
float somme = 0;
for (int i = 0; i < NB_ETUDIANTS; i++) {
somme += etudiants[i].moyenne;
}
return somme / NB_ETUDIANTS;
}

void rechercherEtudiant(Etudiant etudiants[]) {


char nomRecherche[30];
printf("Nom de l'étudiant : ");
scanf("%s", nomRecherche);

for (int i = 0; i < NB_ETUDIANTS; i++) {


if (strcmp(etudiants[i].nom, nomRecherche) == 0) {
printf("Notes : ");
for (int j = 0; j < NB_NOTES; j++) {
printf("%.1f ", etudiants[i].notes[j]);
}
printf("\nMoyenne : %.2f\n", etudiants[i].moyenne);
return;
}
}
printf("Étudiant non trouvé.\n");
}
```

### **Partie 4 : Menu interactif**


```c
int main() {
Etudiant etudiants[NB_ETUDIANTS];
saisirEtudiants(etudiants);

int choix;
do {
printf("\n--- MENU ---\n");
printf("1. Afficher tous les étudiants\n");
printf("2. Afficher le meilleur étudiant\n");
printf("3. Afficher la moyenne de la classe\n");
printf("4. Rechercher un étudiant\n");
printf("5. Quitter\n");
printf("Choix : ");
scanf("%d", &choix);

switch (choix) {
case 1: afficherEtudiants(etudiants); break;
case 2: {
Etudiant meilleur = meilleurEtudiant(etudiants);
printf("Meilleur étudiant : %s (Moyenne = %.2f)\n", meilleur.nom, meilleur.moyenne);
break;
}
case 3: printf("Moyenne de la classe : %.2f\n", moyenneClasse(etudiants)); break;
case 4: rechercherEtudiant(etudiants); break;
case 5: printf("Au revoir !\n"); break;
default: printf("Choix invalide.\n");
}
} while (choix != 5);

return 0;
}
```

---

## **Exercice 3 : Système de gestion d’employés avec dates**

### **Partie 1 : Structures imbriquées**


```c
#include <stdio.h>
#include <string.h>
#include <time.h>
#define NB_EMPLOYES 5

typedef struct {
int jour, mois, annee;
} Date;

typedef struct {
char nom[30];
float salaire;
Date dateEmbauche;
} Employe;

Employe equipe[NB_EMPLOYES] = {
{"Dupont", 2500.0, {15, 10, 2010}},
{"Martin", 1800.0, {20, 5, 2015}},
{"Durand", 3000.0, {10, 3, 2008}},
{"Leroy", 2200.0, {5, 12, 2019}},
{"Moreau", 1900.0, {30, 7, 2017}}
};
```

### **Partie 2 : Affichage et recherche**


```c
void afficherEmploye(Employe e) {
printf("Nom: %s\nSalaire: %.2f\nDate d'embauche: %02d/%02d/%04d\n\n",
e.nom, e.salaire, e.dateEmbauche.jour, e.dateEmbauche.mois, e.dateEmbauche.annee);
}

void afficherEquipe() {
printf("\n--- ÉQUIPE ---\n");
for (int i = 0; i < NB_EMPLOYES; i++) {
afficherEmploye(equipe[i]);
}
}

void rechercherEmploye() {
char nomRecherche[30];
printf("Nom de l'employé : ");
scanf("%s", nomRecherche);

for (int i = 0; i < NB_EMPLOYES; i++) {


if (strcmp(equipe[i].nom, nomRecherche) == 0) {
afficherEmploye(equipe[i]);
return;
}
}
printf("Employé non trouvé.\n");
}
```

### **Partie 3 : Ancienneté et augmentation**


```c
int anciennete(Employe e) {
time_t now = time(NULL);
struct tm *tm_now = localtime(&now);
int anneeActuelle = tm_now->tm_year + 1900;
return anneeActuelle - e.dateEmbauche.annee;
}

void augmenterSalaire() {
printf("\n--- AUGMENTATION POUR ANCIENNETÉ > 5 ANS ---\n");
for (int i = 0; i < NB_EMPLOYES; i++) {
if (anciennete(equipe[i]) > 5) {
equipe[i].salaire *= 1.05; // +5%
printf("%s : Nouveau salaire = %.2f\n", equipe[i].nom, equipe[i].salaire);
}
}
}
```

### **Partie 4 : Menu principal**


```c
int main() {
int choix;
do {
printf("\n--- MENU ---\n");
printf("1. Afficher tous les employés\n");
printf("2. Rechercher un employé\n");
printf("3. Calculer l'ancienneté d'un employé\n");
printf("4. Appliquer une augmentation\n");
printf("5. Quitter\n");
printf("Choix : ");
scanf("%d", &choix);

switch (choix) {
case 1: afficherEquipe(); break;
case 2: rechercherEmploye(); break;
case 3: {
char nom[30];
printf("Nom de l'employé : ");
scanf("%s", nom);
for (int i = 0; i < NB_EMPLOYES; i++) {
if (strcmp(equipe[i].nom, nom) == 0) {
printf("Ancienneté : %d ans\n", anciennete(equipe[i]));
break;
}
}
break;
}
case 4: augmenterSalaire(); break;
case 5: printf("Au revoir !\n"); break;
default: printf("Choix invalide.\n");
}
} while (choix != 5);

return 0;
}
```

---

Vous aimerez peut-être aussi