Mini-cours sur les algorithmes

Partie I

Supposons qu'on souhaite créer un programme pour calculer la surface d'un rectangle.

Facile ! Surface = largeur * longueur

Alors, écrivons la solution. En pseudo-français ...

Le pseudo-français

Grâce à la connaissance de ce pseudo-français, on pourra décrire la solution, si on dispose d'un bout de papier et d'un crayon, même en attendant l'arrivée du train, dans une salle d'attente, ...

Début et fin

Tout traitement commence par un début et se termine par ... une fin !

Début
  ...
  ...
Fin

Il peut arriver qu'un programme n'atteigne jamais la fin. Dans ce cas, il ne sera interrompu que par l'arrêt de l'ordinateur ou par une instruction donnée par l'utilisateur au système d'exploitation (CTRL+ALT+SUPPR > Supprimer nom_du_programme).

Commenter : /* */

Il est toujours recommandé de rendre son code le plus compréhensible. Il est donc toujours utile de commenter son code. Le minimum est de dire à quoi sert l'algorithme.

Pour les commentaires autant utiliser les conventions utilisées dans le langage C
et repris en C++, Java, PHP, JavaScript, ...

Début
  /* Cet algorithme permet de calculer
   la surface d'un rectangle */
  ...
Fin

Il est toujours recommandé de rendre son code le plus lisible possible. Notamment, en indentant son code. Indenter = laisser des espaces blancs au début d'une ligne de code de telle sorte qu'on distingue bien les lignes qui sont regroupées.

Déclaration des variables

Une variable est quelque chose qui peut changer (de valeur)

On peut se représenter la variable comme une case dans la mémoire de l'ordinateur.
Dans la case est placée la valeur de la variable. Et, la case est identifiée par le nom de la variable.

Les variables doivent être déclarées avant leur utilisation.

La déclaration d'une variable se présente sous la forme : TypeDeVariable NomDeVariable

Les types de variables

Pour un débutant, on ne considérera que les quatre principaux types :

  1. int : nombre entier (en anglais : integer)
  2. string : chaîne de caractères (en anglais : string)
  3. bool : booléen (en anglais : boolean)
    Pas de panique ! Un booléen est une variable qui ne peut contenir que deux valeurs : vrai ou faux (en anglais : true ou false)
  4. float : nombre réel (en anglais : float, comme dans virgule flottante)

On peut se représenter le type d'une variable comme la grandeur de la case dans la mémoire de l'ordinateur. Les cases int, float et bool ont des tailles fixes différentes. Les cases string ont une taille ...

Comprendre l'utilisation de la mémoire n'est pas facile. Heureusement, cette compréhension est inutile pour créer de bons algorithmes. Vous saurez tout lorsque vous étudierez le C et ses fameux pointeurs. Vous comprendrez alors pourquoi les programmes écrits en C sont les plus rapides.

Tous les langages de programmation utilisent l'anglais; et, puisque l'algorithme sera traduit dans un de ces langages autant utiliser tout de suite les bons termes.

Nom de variable

Le nom donné à une variable, NomDeVariable, respectera les 2 conventions suivantes :

  1. Seuls sont autorisés les lettres non accentuées ( minuscules ou majuscules ) et les chiffres.
    Sont donc interdits : tous les caractères spéciaux : l'espace, le point, la virgule, ...
  2. Le nom commence par une lettre minuscule.
    Il est interdit que le nom commence par un chiffre.

Ces conventions sont celles des langages de programmation. En algorithmique, ces conventions ne doivent pas être respectées. Cependant, autant prendre de bonnes habitudes dès maintenant.

Lors de la compilation ou l'interprétation du code source, le compilateur ou l'interpréteur remplacera tous les noms de variables par un nombre (de type int) représentant un numéro de case dans la mémoire qui sera allouée au programme par le système d'exploitation. Tout ceci pour dire que le programme ne s'exécutera pas plus rapidement, si le code source est plus court via des noms de variables courts. Alors, n'hésitez pas à donner des noms explicites à vos variables. Dans le code source, remplacez les a=3 et b=5 par largeur=3 et longueur=5, si a représente une largeur et b une longueur.

JavaScript est un langage qui sera interprété par un navigateur. Le code HTML, CSS et JavaScript peut parfois être légèrement interprété différemment. Tout dépend du type de navigateur et de sa version. Les navigateurs respectent de plus en plus les normes fixées par la W3C. Toutefois, les normes elles-mêmes évoluent !

  /* Déclaration des variables

  Rappel : il est obligatoire de déclarer des variables
  avant de les utiliser */

  int nombreDeJoueurs
  string phrase
  bool       estSuperieurAZero
  float montantFacture

  /* fin de la zone de déclaration */

Entre le type de variable et le nom de la variable, on peut placer plusieurs espaces (et au moins un).

Affectation des variables

Affecter une variable signifie mettre une valeur dans cette variable. Lorsqu'on met pour la première fois une valeur dans une variable, on l'initialise.

  /* Initialisation des variables

  nombreDeJoueurs = 2
  phrase =          "Bonjour !"
  estSuperieurAZero      = false
  montantFacture=12.74

  /* fin de la zone d'initialisation */

Entre le nom de la variable et sa valeur, on place un signe. En programmation, on utilise (très souvent) le signe (=). En algorithmique, (<-).

Autour de ce signe, on peut placer un ou plusieurs espaces. Toutefois, pour une meilleure lisibilité du code, souvent, on ne place qu'un seul espace avant et après ce signe.

Lorsque la variable est de type string, la valeur est toujours encadrée de guillemets.

Si le guillemet est utilisé dans la valeur, il doit, en programmation, être précédé du signe (\).
phrase = "Ce restaurant s'appelle : \"La bonne table\"."

Lorsque la variable est de type float, on utilise le point décimal.

On peut ne pas initialiser les variables. Mais, dans ce cas, c'est le programme qui choisit les valeurs. Et, certains langages permettent au programme de choisir n'importe quoi. Ce qui peut conduire à des résultats inattendus.

La déclaration est obligatoire, l'initialisation est fortement recommandée.

Déclaration et initialisation

Comme les deux opérations - déclaration et initialisation d'une variable - se suivent, tous les langages de programmation permettent de grouper ces deux opérations en une ligne.

  /* Déclaration et initialisation des variables

  int nombreDeJoueurs = 2
  string phrase = "Ce restaurant s'appelle : \"La bonne table\"."
  bool estSuperieurAZero = false
  float montantFacture = 12.74

  /* fin de la zone de déclaration et initialisation des variables
  Souvent, la fin d'une zone de code n'est pas indiquée.
  Car, elle est immédiatement suivie par le début d'une autre zone */

Une string particulière permet de retourner à la ligne :

  string newLine = "\n"

Les fonctions

Le programme doit recevoir des informations pour les traiter.

  1. lireClavier()
  2. lireSouris()
  3. lireFichier()

Ce qui est tapé, caractère par caractère, est stocké dans un tiroir, appelé en anglais buffer. Lorsqu'on tape sur la touche "Enter", le contenu de ce tiroir est envoyé à lireClavier()

Et, après les avoir traitées, il doit - pour être utile - envoyer le résultat à l'écran, à l'imprimante ou dans un fichier :

  1. Afficher()
  2. Imprimer()
  3. EcrireDansFichier()

L'utilisation de fonctions permet de découper le problème en sous-problèmes. Par exemple, vous ne savez pas comment afficher : la couleur de fond, celle du texte, la taille du texte, ... Le problème de l'affichage est un problème particulier.

Pour le moment, dites "Afficher" et mettez entre parenthèses ce qu'il faut afficher. Puis, continuer à résoudre le problème général. Une fois, le problème général résolu, vous vous attaquerez à ces petits problèmes.

Mon premier algorithme

... est presque terminé !
En n'utilisant que deux fonctions !
Sans même savoir comment elles font, mais simplement ce qu'elles font.

Il faut toujours savoir ce que fait une fonction, mais pas comment elle le fait.

Début
  /* But du programme : calculer la surface d'un rectangle */

  /* Déclaration et initialisation des variables */
  float largeur = 0
  float longueur = 0
  float surface = 0
  string newLine = "\n"

  /* Afficher un titre */

  Afficher("Calcul de la surface d'un rectangle", newLine)
  Afficher("***********************************", newLine)
  Afficher(newLine)

  /* ------------------------- Collecte des données ------------------------ */

  /* Demander à l'utilisateur du programme
  d'introduire une largeur */

  Afficher("Veuillez indiquer la largeur (en m) : ")
  largeur = lireClavier()

  /* Demander à l'utilisateur du programme
  d'introduire une longueur */

  Afficher("Veuillez indiquer la longueur (en m) : ")
  longueur = lireClavier()

  /* ------------------------ Utilisation des données ---------------------- */

  /* à faire */

  /* --------------------------- Envoi du résultat ------------------------- */

  /* Afficher le résultat */
  Afficher("La surface du rectangle = ", surface, " m²")

Fin

Souvent, une ligne de code ne dépasse pas 80 caractères afin que le code imprimé reste lisible

L'algorithme est déjà presque terminé !
Il ne reste plus qu'à traiter les informations reçues.
Et, comme traiter des informations, c'est faire des opérations; le traitement des informations se fait via des ... opérateurs.