Bonjour !
Au cours des modules précédents, nous avons assemblé une formidable boîte à outils. Vous avez exploré les structures de données fondamentales (tableaux, listes, piles, files) et même des plus avancées comme les arbres binaires de recherche. Vous avez appris à manipuler ces données avec des algorithmes de tri, de recherche, et en utilisant des stratégies puissantes comme la récursivité ou "Diviser pour Régner".
Maintenant que vous disposez de tous ces outils, une nouvelle question se pose : face à un problème concret, par où commencer ? Comment choisir le bon outil ? Comment s'assurer que l'on a bien compris la tâche avant d'écrire la moindre ligne de pseudo-code ?
C'est l'objectif de ce nouveau module sur les stratégies de résolution de problèmes. Nous allons prendre de la hauteur et apprendre une méthode pour aborder n'importe quel problème de manière structurée. Cette leçon est la première et la plus importante étape de cette méthode : analyser un problème pour en identifier les entrées, les sorties et les contraintes. C'est la pierre angulaire de la conception d'un algorithme robuste et, à terme, de l'écriture d'un "code clean".
1. La phase d'analyse : le plan avant la construction
Avant de se lancer dans la résolution d'un problème, il est crucial de bien le comprendre. Sauter cette étape est l'erreur la plus commune et la plus coûteuse. C'est comme essayer de construire une maison sans plan : on risque de se tromper dans les fondations et de devoir tout recommencer.
Le diagramme suivant illustre bien la place de l'analyse dans le processus de création d'un programme.

L'analyse consiste à décortiquer l'énoncé d'un problème pour en extraire trois types d'informations essentielles :
- Les Entrées : De quelles informations a-t-on besoin pour commencer ?
- Les Sorties : Quel est le résultat que l'on doit produire ?
- Les Contraintes : Quelles sont les règles et les limites à respecter ?
Voyons comment faire cela de manière systématique.
2. Une méthode structurée pour décortiquer un problème
Pour vous guider, nous allons nous appuyer sur deux excellentes ressources qui présentent cette méthode d'analyse.
Commençons par une définition formelle issue d'un cours universitaire. Il présente la "phase d'analyse" et l'illustre avec un exemple simple de calcul de TVA.
[PDF] COURS ALGORITHMIQUE ET PROGRAMMATION INFORMATIQUE
Ce document PDF, 'COURS ALGORITHMIQUE ET PROGRAMMATION INFORMATIQUE', explique clairement en quoi consiste la phase d'analyse. Lisez la section qui la définit et observez comment elle est appliquée à un exemple concret.
Dans le document, trouvez la diapositive intitulée 'PHASE D’ANALYSE'. Lisez-la attentivement. Ensuite, suivez les diapositives suivantes (de 'EXEMPLE D’ÉNONCÉ D’UN PROBLÈME' à la fin de l'exemple) pour voir comment on identifie le traitement, les entrées et les sorties dans un cas de calcul de prix.
Comme vous l'avez vu, la méthode est simple mais rigoureuse : il s'agit de "surligner" mentalement les différentes parties de l'énoncé. Maintenant, approfondissons cette technique avec un guide plus détaillé et pratique.
Logique de programmation : décomposer un problème en étapes actionnables
L'article 'Logique de programmation : décomposer un problème en étapes ...' de Cursa.app propose une méthode reproductible en plusieurs étapes. Nous allons nous concentrer sur les premières, qui correspondent exactement à notre objectif.
Lisez l'introduction 'Passer d’un énoncé à un algorithme' et la section 'Étape 1 — Lire le problème avec une grille : entrées, sorties, contraintes'. Portez une attention particulière à l'astuce pratique qui suggère de surligner les verbes d'action et les mots de règle.
Synthèse de la méthode
En combinant ces deux ressources, nous pouvons établir une grille d'analyse claire. Face à n'importe quel énoncé, posez-vous systématiquement ces questions :
-
Quelles sont les ENTRÉES ?
- Ce sont les données que l'algorithme reçoit, celles qui sont "fournies", "saisies" ou "données".
- Comment les trouver ? Cherchez les noms qui représentent des informations variables. Dans l'exemple de la TVA, c'est le
prix hors taxe. - Question clé : "De quoi ai-je besoin pour résoudre le problème ?"
-
Quelles sont les SORTIES ?
- C'est le résultat que l'algorithme doit produire, le but à atteindre.
- Comment les trouver ? Cherchez les verbes d'action comme "calculer", "afficher", "déterminer", "vérifier". La sortie est le résultat de cette action. Dans l'exemple, c'est "calculer et afficher la TVA ainsi que le prix TTC". Les sorties sont donc le
montantTVAet leprixTTC. - Question clé : "Que dois-je fournir comme réponse ?"
-
Quelles sont les CONTRAINTES ?
- Ce sont toutes les règles, conditions, limites ou cas particuliers que l'algorithme doit respecter. C'est souvent la partie la plus délicate.
- Comment les trouver ? Cherchez les mots de règle comme "doit", "uniquement", "si", "au moins", "valide", "positif". Dans un problème de calcul de moyenne de notes, une contrainte pourrait être "les notes sont comprises entre 0 et 20". Dans l'exemple de la TVA, le taux de
20,6est une contrainte (une valeur fixe imposée). - Question clé : "Quelles sont les règles du jeu ?"
3. Application pratique et exercice
Mettons cette méthode en pratique avec un nouvel exemple.
Problème : "Écrire un algorithme qui convertit une durée, donnée en secondes, en un format plus lisible de heures, minutes et secondes. Par exemple, 3661 secondes doit devenir 1 heure, 1 minute et 1 seconde. La durée ne peut pas être négative."
Appliquons notre grille d'analyse :
-
Entrées :
- L'énoncé dit "une durée, donnée en secondes".
- Entrée identifiée :
totalSecondes(un nombre entier).
-
Sorties :
- L'objectif est de convertir "en un format plus lisible de heures, minutes et secondes".
- Sorties identifiées :
heures,minutes,secondes(trois nombres entiers).
-
Contraintes :
- La phrase "La durée ne peut pas être négative" est une contrainte explicite.
- Il y a aussi des contraintes implicites liées à la conversion du temps : il y a 60 secondes dans une minute, et 3600 secondes dans une heure. Les valeurs des
minutesetsecondesen sortie devront être comprises entre 0 et 59. - Contraintes identifiées :
totalSecondes >= 0,minutesdoit être dans[0, 59],secondesdoit être dans[0, 59].
Cet exemple est d'ailleurs traité dans la ressource de Cursa.app, vous pouvez y jeter un œil pour voir le pseudo-code qui en découle (Exercice guidé 2).
À vous de jouer !
Maintenant, c'est à votre tour d'appliquer cette méthode. Prenez une feuille et un stylo, et analysez le problème suivant.
Problème :
Un cinéma propose des tarifs différents selon l'âge du spectateur et le jour de la semaine. Le tarif normal est de 9€ pour un adulte (18 ans ou plus) et de 7€ pour un enfant (moins de 18 ans). Cependant, le mercredi est un jour spécial où le tarif est réduit à 6€ pour tout le monde. Écrivez un algorithme qui calcule le prix d'un billet.
Analysez cet énoncé et identifiez précisément :
- Les entrées nécessaires.
- La sortie attendue.
- Toutes les contraintes et règles de calcul.
...
Prenez quelques minutes pour le faire avant de lire la solution ci-dessous.
Solution de l'analyse :
-
Entrées :
age(un nombre entier, pour déterminer s'il s'agit d'un enfant ou d'un adulte).jour(une chaîne de caractères, pour savoir si c'est le jour à tarif réduit).
-
Sortie :
prixBillet(un nombre représentant le prix à payer en euros).
-
Contraintes :
- Règle 1 (prioritaire) : Si
jourest "mercredi", alorsprixBilletest 6€. - Règle 2 (si la règle 1 ne s'applique pas) :
- Si
age >= 18, alorsprixBilletest 9€. - Si
age < 18, alorsprixBilletest 7€.
- Si
- Contrainte implicite (très importante !) : L'âge ne peut pas être négatif. Il faudrait donc prévoir un cas où
age < 0est une erreur.
- Règle 1 (prioritaire) : Si
Si votre analyse ressemble à celle-ci, bravo ! Vous avez transformé un texte en français en une spécification logique et non ambiguë. C'est la première et la plus grande étape vers un algorithme correct.
Conclusion
Dans cette leçon, nous avons appris à ne pas nous précipiter. Avant de résoudre un problème, nous devons l'analyser. Cette analyse structurée est une compétence fondamentale qui vous servira tout au long de votre parcours.
Points clés à retenir :
- La première étape de la résolution d'un problème est l'analyse, pas le codage.
- Analyser, c'est disséquer un énoncé pour identifier trois éléments :
- Les Entrées : les données que l'on reçoit.
- Les Sorties : les résultats que l'on doit produire.
- Les Contraintes : les règles, limites et cas particuliers à respecter.
- Cette méthode permet de clarifier le problème, d'éviter les erreurs et de poser des bases solides pour la conception de l'algorithme.
Et après ?
Maintenant que vous savez comment définir précisément les données d'un problème (entrées et sorties) et les règles qui les régissent (contraintes), l'étape suivante est logique : comment allons-nous stocker et organiser ces données ? Dans la prochaine leçon, nous verrons comment choisir les structures de données (tableau, pile, file, liste...) les plus adaptées à un problème donné, en nous basant sur l'analyse que nous venons d'apprendre à réaliser.