- Analyse fonctionnelle : Comprendre les besoins
- Décomposition modulaire : Diviser en modules
- Algorithme : Suite d'étapes précises
- Validation : Tester et vérifier la solution
Problème : Calculer la moyenne de 3 notes numériques
- Analyser les entrées (3 notes), le traitement (moyenne) et la sortie (résultat)
- Décomposer en étapes : lecture des notes, calcul, affichage
- Créer l'algorithme correspondant
- Valider la solution avec des exemples concrets
Entrées : 3 notes (n1, n2, n3)
Traitement : moyenne = (n1 + n2 + n3) / 3
Sortie : valeur de la moyenne
• Saisie des notes
• Calcul de la somme
• Division par 3
• Affichage du résultat
ALGORITHME Moyenne
Variables n1, n2, n3, somme, moyenne : Réel
DEBUT
AFFICHER "Entrez la première note : "
LIRE n1
AFFICHER "Entrez la deuxième note : "
LIRE n2
AFFICHER "Entrez la troisième note : "
LIRE n3
somme ← n1 + n2 + n3
moyenne ← somme / 3
AFFICHER "La moyenne est : ", moyenne
FIN
Plan de développement complet avec analyse, décomposition, algorithme et validation
• Analyse fonctionnelle : Identifier clairement les entrées, traitements et sorties
• Décomposition : Diviser le problème en étapes simples
• Algorithmique : Écrire des instructions précises et ordonnées
Problème : Décomposer un programme de gestion de bibliothèque en modules
• Module Livres : Ajouter, supprimer, rechercher des livres
• Module Usagers : Enregistrer, modifier, supprimer des usagers
• Module Emprunts : Gérer les emprunts et retours
• Module Interface : Menu principal, saisie des données
• Les usagers peuvent emprunter des livres
• Les emprunts lient les usagers aux livres
• L'interface permet d'accéder aux autres modules
Module Bibliothèque
├── Module Livres
│ ├── Ajouter_Livre(nom, auteur, isbn)
│ ├── Supprimer_Livre(isbn)
│ └── Rechercher_Livre(critère)
├── Module Usagers
│ ├── Enregistrer_Usager(id, nom, email)
│ └── Modifier_Usager(id, nom, email)
├── Module Emprunts
│ ├── Emprunter_Livre(usager_id, livre_isbn)
│ └── Retourner_Livre(usager_id, livre_isbn)
└── Module Interface
├── Afficher_Menu()
└── Traiter_Choix(option)
Modularisation claire avec responsabilités bien définies pour chaque module
• Décomposition modulaire : Diviser en modules fonctionnels
• Cohésion : Chaque module a une responsabilité unique
• Couplage faible : Modules indépendants autant que possible
Problème : Structurer un programme de conversion entre Celsius et Fahrenheit
Entrées : Température et unité d'origine
Traitement : Application de la formule de conversion
Sortie : Température convertie dans l'autre unité
• Fonction de conversion C→F
• Fonction de conversion F→C
• Fonction de choix de conversion
• Fonction d'affichage du résultat
FONCTION CelsiusVersFahrenheit(temp_celsius) : Réel
RETOURNER temp_celsius * 9/5 + 32
FIN
FONCTION FahrenheitVersCelsius(temp_fahrenheit) : Réel
RETOURNER (temp_fahrenheit - 32) * 5/9
FIN
ALGORITHME ConversionTemperature
Variable temperature : Réel
Variable unite_origine : Chaîne
Variable unite_destination : Chaîne
Variable resultat : Réel
DEBUT
AFFICHER "Entrez la température : "
LIRE temperature
AFFICHER "Unité d'origine (C ou F) : "
LIRE unite_origine
AFFICHER "Unité destination (C ou F) : "
LIRE unite_destination
SI unite_origine = "C" ET unite_destination = "F" ALORS
resultat ← CelsiusVersFahrenheit(temperature)
SINON SI unite_origine = "F" ET unite_destination = "C" ALORS
resultat ← FahrenheitVersCelsius(temperature)
FIN SI
AFFICHER "Résultat : ", resultat, " ", unite_destination
FIN
Approche modulaire avec fonctions spécifiques et gestion des cas
• Fonctionnalité claire : Chaque fonction a un rôle précis
• Gestion des cas : Traiter toutes les combinaisons possibles
• Validation : Vérifier la cohérence des unités
Problème : Planifier un système de gestion de contacts
• Stocker nom, prénom, email, téléphone
• Pouvoir ajouter, modifier, supprimer des contacts
• Rechercher un contact
• Afficher la liste complète
Structure Contact :
• nom (chaîne)
• prenom (chaîne)
• email (chaîne)
• telephone (chaîne)
Structure Contact
nom : Chaîne
prenom : Chaîne
email : Chaîne
telephone : Chaîne
Fin Structure
Variables liste_contacts : Tableau de Contact
Variables taille_liste : Entier
FONCTION AjouterContact(nom, prenom, email, telephone) : Booléen
SI taille_liste < MAX_CONTACTS ALORS
liste_contacts[taille_liste].nom ← nom
liste_contacts[taille_liste].prenom ← prenom
liste_contacts[taille_liste].email ← email
liste_contacts[taille_liste].telephone ← telephone
taille_liste ← taille_liste + 1
RETOURNER VRAI
SINON
RETOURNER FAUX
FIN SI
FIN
// Autres fonctions : RechercherContact, ModifierContact, SupprimerContact, AfficherListe
Architecture claire avec modèle de données et fonctions de gestion
• Modélisation : Créer une structure de données adaptée
• CRUD : Implémenter les opérations de base (Create, Read, Update, Delete)
• Sécurité : Gérer les limites de stockage
Problème : Conception d'un jeu de devinettes (nombre mystère)
• Le programme génère un nombre aléatoire
• L'utilisateur propose des nombres
• Le programme indique "trop grand", "trop petit" ou "gagné"
• Le jeu se termine quand le nombre est trouvé
• Module génération : Générer un nombre aléatoire
• Module jeu : Boucle principale du jeu
• Module comparaison : Comparer la proposition au nombre mystère
• Module affichage : Donner des indications à l'utilisateur
ALGORITHME JeuDevinette
Variables nombre_mystere, proposition, tentative, limite_basse, limite_haute : Entier
Variables trouve : Booléen
DEBUT
// Initialisation
nombre_mystere ← GENERER_ALEATOIRE(1, 100)
tentative ← 0
trouve ← FAUX
limite_basse ← 1
limite_haute ← 100
AFFICHER "Devinez un nombre entre 1 et 100"
TANT QUE trouve = FAUX ET tentative < 10 FAIRE
tentative ← tentative + 1
AFFICHER "Tentative ", tentative, "/10"
AFFICHER "Proposez un nombre : "
LIRE proposition
SI proposition = nombre_mystere ALORS
trouve ← VRAI
AFFICHER "Bravo ! Vous avez trouvé en ", tentative, " tentatives."
SINON SI proposition < nombre_mystere ALORS
AFFICHER "Trop petit !"
limite_basse ← proposition + 1
SINON
AFFICHER "Trop grand !"
limite_haute ← proposition - 1
FIN SI
AFFICHER "Indice : le nombre est entre ", limite_basse, " et ", limite_haute
FIN TANT QUE
SI trouve = FAUX ALORS
AFFICHER "Perdu ! Le nombre était : ", nombre_mystere
FIN SI
FIN
Architecture complète avec boucle de jeu, gestion des tentatives et retour utilisateur
• Boucle de jeu : Maintenir le jeu actif jusqu'à la condition de fin
• Contrôle des tentatives : Limiter le nombre d'essais
• Feedback : Donner des indications pour guider l'utilisateur
- Analyse descendante : Du général au spécifique
- Décomposition fonctionnelle : Par tâches à accomplir
- Modularisation : Regroupement par fonctionnalité
- Top-down : Structure hiérarchique du haut vers le bas
- Chaque module doit avoir une seule responsabilité claire
- Les modules doivent être aussi indépendants que possible
- Les interfaces entre modules doivent être simples et claires
- La documentation accompagne chaque étape du développement
- Diviser pour mieux résoudre : La décomposition rend les problèmes plus gérables
- Modularité : Créer des composants réutilisables et testables
- Documentation : Garder une trace claire de chaque décision
- Validation continue : Tester régulièrement chaque partie du système