Voici quelques exemples d’exercices pratiques axés spécifiquement sur la modularisation en C#. L’idée est de diviser des programmes complexes en fonctions plus petites et réutilisables.
1. Gestion de la paie d’un employé
Objectif : Modulariser un programme qui calcule la paie d’un employé en fonctions distinctes.
Instructions :
- Créez une fonction pour calculer le salaire brut d’un employé en fonction du nombre d’heures travaillées et du taux horaire.
- Créez une autre fonction pour calculer les retenues (impôts et cotisations) à partir du salaire brut.
- Utilisez une fonction pour afficher le salaire net final (salaire brut – retenues).
Exemple :
public double CalculerSalaireBrut(double heures, double tauxHoraire)
{
return heures * tauxHoraire;
}
public double CalculerRetenues(double salaireBrut)
{
double impots = salaireBrut * 0.2; // 20% de retenues
return impots;
}
public double CalculerSalaireNet(double heures, double tauxHoraire)
{
double salaireBrut = CalculerSalaireBrut(heures, tauxHoraire);
double retenues = CalculerRetenues(salaireBrut);
return salaireBrut - retenues;
}
2. Calculatrice avancée
Objectif : Diviser une calculatrice en plusieurs fonctions pour chaque opération (addition, soustraction, multiplication, division).
Instructions :
- Créez une fonction pour chaque opération mathématique (addition, soustraction, multiplication, division).
- Ensuite, écrivez une fonction principale
Calculer
qui prend en entrée deux nombres et un opérateur (sous forme de chaîne de caractères) et appelle la fonction appropriée.
Exemple :
public double Addition(double a, double b) => a + b;
public double Soustraction(double a, double b) => a - b;
public double Multiplication(double a, double b) => a * b;
public double Division(double a, double b) => a / b;
public double Calculer(double a, double b, string operation)
{
switch (operation)
{
case "+":
return Addition(a, b);
case "-":
return Soustraction(a, b);
case "*":
return Multiplication(a, b);
case "/":
return Division(a, b);
default:
throw new InvalidOperationException("Opération non valide.");
}
}
3. Système de gestion d’inventaire
Objectif : Créer des fonctions pour modulariser un programme de gestion d’inventaire.
Instructions :
- Créez une fonction pour ajouter des articles à l’inventaire.
- Créez une fonction pour retirer des articles.
- Créez une fonction pour afficher l’inventaire actuel.
- Modularisez en séparant chaque tâche en une fonction autonome.
Exemple :
public void AjouterArticle(Dictionary<string, int> inventaire, string article, int quantite)
{
if (inventaire.ContainsKey(article))
{
inventaire[article] += quantite;
}
else
{
inventaire[article] = quantite;
}
}
public void RetirerArticle(Dictionary<string, int> inventaire, string article, int quantite)
{
if (inventaire.ContainsKey(article))
{
inventaire[article] -= quantite;
if (inventaire[article] <= 0)
{
inventaire.Remove(article);
}
}
}
public void AfficherInventaire(Dictionary<string, int> inventaire)
{
foreach (var item in inventaire)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
}
4. Système de gestion de notes
Objectif : Modulariser un programme qui gère les notes des étudiants.
Instructions :
- Créez une fonction pour ajouter une note à un étudiant.
- Créez une fonction pour calculer la moyenne des notes d’un étudiant.
- Créez une fonction pour afficher toutes les notes d’un étudiant et la moyenne.
Exemple :
public void AjouterNote(List<int> notes, int note)
{
notes.Add(note);
}
public double CalculerMoyenne(List<int> notes)
{
return notes.Average();
}
public void AfficherNotesEtMoyenne(List<int> notes)
{
Console.WriteLine("Notes: " + string.Join(", ", notes));
Console.WriteLine("Moyenne: " + CalculerMoyenne(notes));
}
5. Programme de gestion des réservations
Objectif : Modulariser un système de gestion des réservations pour un hôtel.
Instructions :
- Créez une fonction pour vérifier la disponibilité d’une chambre.
- Créez une fonction pour réserver une chambre.
- Créez une fonction pour annuler une réservation.
- Créez une fonction pour afficher l’état des réservations.
Exemple :
public bool EstDisponible(Dictionary<int, bool> chambres, int chambre)
{
return chambres.ContainsKey(chambre) && chambres[chambre];
}
public void ReserverChambre(Dictionary<int, bool> chambres, int chambre)
{
if (EstDisponible(chambres, chambre))
{
chambres[chambre] = false;
Console.WriteLine($"Chambre {chambre} réservée.");
}
else
{
Console.WriteLine($"Chambre {chambre} non disponible.");
}
}
public void AnnulerReservation(Dictionary<int, bool> chambres, int chambre)
{
if (!EstDisponible(chambres, chambre))
{
chambres[chambre] = true;
Console.WriteLine($"Réservation de la chambre {chambre} annulée.");
}
}
public void AfficherChambres(Dictionary<int, bool> chambres)
{
foreach (var chambre in chambres)
{
string statut = chambre.Value ? "Disponible" : "Réservée";
Console.WriteLine($"Chambre {chambre.Key}: {statut}");
}
}
Ces exercices vous permettent de comprendre comment décomposer un problème complexe en petites tâches et de créer des fonctions qui facilitent la gestion, la réutilisation, et la modification du programme. Cela aide également à tester et maintenir votre code de manière plus efficace.
Commentaires