Mini-cours sur les algorithmes

Partie III

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.

  1. Les conditions (SI)
  2. 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).