Ne soyez pas trop vite fier de votre algorithme !
Vérifier les données
Avant de traiter les informations, il faut les vérifier. Surtout, si elles sont données par l'utilisateur.
Comment le programme doit-il réagir si l'utilisateur donne comme largeur son prénom, et comme longueur son nom ? Multiplier un nom par un prénom a-t-il un sens ?
Le programme ne doit continuer que SI la donnée est cohérente.
Et, si elle n'est pas cohérente, il faut RÉPÉTER la demande.
Les structures de contrôle
Il n'existe que deux types de structures de contrôle.
- Les conditions (SI)
- Les boucles (RÉPÉTER)
Chaque type de structure de contrôle contient des sous-types. Toutefois, nous n'étudierons qu'un seul sous-type pour chaque type, car ce sous-type permet de résoudre tous les cas possibles. Les autres sous-types n'existent que pour permettre de résoudre certains cas plus rapidement. Avant de rouler vite, il vous faut d'abord apprendre à rouler.
Les conditions
Pour éviter la migraine, une structure de contrôle conditionnelle est appelée plus simplement - mais abusivement : une condition
Les conditions sont exprimées en utilisant des expressions conditionnelles
Rappel : Le résultat de l'évaluation d'une expression conditionnelle est true ou false
Structure n°1 de contrôle conditionnelle
SI (expression conditionnelle) ALORS ... ... FINSI
Exemples :
SI ( age > 18 ) ALORS Afficher("Vous êtes majeur") FINSI SI ( estNumerique(largeur) ) ALORS /* continuer */ FINSI
estNumerique() est une fonction qui retourne true ou false.
Nous pouvons maintenant améliorer notre algorithme ainsi :
Début ... /* Demander à l'utilisateur du programme d'introduire une largeur */ Afficher("Veuillez indiquer la largeur (en m): ") largeur = lireClavier() SI ( estNumerique(largeur) ) ALORS /* Demander à l'utilisateur du programme d'introduire une longueur */ Afficher("Veuillez indiquer la longueur (en m) : ") longueur = lireClavier() ... FINSI Fin
Si l'utilisateur ne tape pas un nombre, le programme se termine sans avertissement. Il serait plus sympathique de signaler pourquoi se programme se termine.
Structure n°2 de contrôle conditionnelle :
SI (expression conditionnelle) ALORS ... ... SINON ... ... FINSI
Algorithme d'un programme plus sympathique :
Début ... SI ( estNumerique(largeur) ) ALORS ... SINON Afficher("Vous n'avez pas fourni un nombre comme largeur", newLine) Afficher("Le programme va s'arrêter.") FINSI Fin
Maintenant, l'utilisateur peut savoir pourquoi le programme s'arrête. Mais, ce sera encore plus sympathique, si le programme permettait de donner une seconde chance en répétant la demande.
Les boucles
Pour éviter la migraine, une structure de contrôle répétitive est appelée plus simplement - et non abusivement : une boucle.
Les boucles sont exprimées en utilisant des expressions conditionnelles.
Rappel : Le résultat de l'évaluation d'une expression conditionnelle est true ou false
Structure n°1 de contrôle répétitive :
FAIRE TANT QUE (expression conditionnelle) ... ... REFAIRE
Algorithme d'un programme encore plus sympathique :
Début ... largeur = -1 FAIRE TANT QUE (largeur < 0) /* Demander à l'utilisateur du programme d'introduire une largeur */ Afficher("Veuillez indiquer la largeur (en m): ") largeur = lireClavier() SI ( estNumerique(largeur) ) ALORS SI ( largeur > 0 ) ALORS /* continuer */ SINON Afficher("Vous n'avez pas fourni un nombre positif comme largeur", newLine) Afficher("Veuillez introduire un nombre positif.") FINSI SINON Afficher("Vous n'avez pas fourni un nombre comme largeur", newLine) Afficher("Veuillez introduire un nombre positif.") FINSI REFAIRE Fin
Plus le programme est sympathique (pour l'utilisateur), plus l'algorithme est long (pour le programmeur).
On remarque des structures de contrôles qui s'imbriquent et l'importance de l'indentation pour meilleure lisibilité du code.
Parfois, la solution passe par une boucle-mère contenant une boucle-fille ! Il convient alors de déterminer la boucle principale (mère).