Aller au contenu principal

Avant de commencer

Ce que ce chapitre apporte

  • Dire ce qu'est un algorithme, avec ses propres mots.
  • Reconnaître ce qui entre dans un algorithme et ce qui en sort.
  • Distinguer les trois façons d'enchaîner des étapes : à la suite, au choix, en répétant.
  • Écrire un algorithme simple en français, sans laisser une étape à deviner.
  • Distinguer un algorithme, un programme et un langage.

Un algorithme, chacun en suit déjà tous les jours sans employer le mot : une recette, un itinéraire, une notice de montage. Ce chapitre part de là, et de rien d'autre. Aucune connaissance en informatique n'est nécessaire pour le lire, et aucun langage de programmation n'y sera employé.

Expliquer à quelqu'un comment faire

Voici une consigne que tout le monde comprend : « faire un thé ».

Un être humain s'en sort. Il sait qu'il faut de l'eau, qu'elle doit chauffer, qu'un sachet s'infuse quelques minutes. Rien de tout cela n'est écrit dans la consigne : il le complète tout seul.

Maintenant, la même consigne pour quelqu'un qui ne complète rien, qui exécute exactement ce qui est écrit et rien de plus.

  1. Faire chauffer de l'eau.
  2. Mettre le sachet dans la tasse.
  3. Verser l'eau.
  4. Attendre.
  5. Retirer le sachet.

C'est mieux, et ce n'est toujours pas suffisant. Combien d'eau ? Chauffer jusqu'à quelle température, ou pendant combien de temps ? Attendre combien de minutes ? Chacune de ces questions sans réponse est un endroit où l'exécutant devra deviner, et deux personnes obtiendront deux thés différents.

Le critère, et il n'y en a qu'un
Une suite d'étapes est utilisable lorsque deux personnes qui la suivent obtiennent le même résultat, sans se concerter et sans rien ajouter de leur cru.
Tant que ce n'est pas le cas, il reste une étape à préciser. Chercher où, c'est déjà faire de l'algorithmique.

Ce qu'est un algorithme

Un algorithme est une suite d'étapes qui décrit comment obtenir un résultat, à trois conditions.

  • Les étapes sont dans un ordre défini.
  • Chaque étape est exécutable sans rien deviner.
  • L'ensemble s'arrête au bout d'un nombre limité d'étapes.

La troisième condition paraît évidente et ne l'est pas : « remuer jusqu'à ce que ce soit bon » ne s'arrête pas nécessairement, faute de dire ce qu'est « bon ».

On distingue toujours trois parties dans un algorithme.

PartieCe que c'estDans l'exemple du thé
Entréesce dont l'algorithme a besoin au départl'eau, le sachet, la tasse
Traitementles étapes qu'il appliquechauffer, verser, attendre, retirer
Sortiece qu'il produitle thé

Repérer ces trois parties avant d'écrire quoi que ce soit évite la moitié des difficultés. Un algorithme dont on ne sait pas dire ce qui entre et ce qui sort n'est pas encore prêt à être écrit.

Trois exemples, et les trois seules façons d'enchaîner

À ce stade, un algorithme s'écrit en français, numéroté. C'est déjà un algorithme, à condition qu'aucune étape ne laisse le choix.

Les trois exemples qui suivent introduisent, l'un après l'autre, les trois seules façons d'enchaîner des étapes. Il n'y en a pas de quatrième, et tout ce qui sera écrit par la suite se ramènera à ces trois-là.

Les unes après les autres : le prix à payer

Un article coûte 200 euros. Il bénéficie d'une remise de 10 %, et la taxe de 20 % s'ajoute ensuite.

  1. Demander le prix de l'article.
  2. Retirer la remise de 10 %.
  3. Ajouter la taxe de 20 %.
  4. Afficher le prix à payer.

Quatre étapes, exécutées dans l'ordre, chacune une seule fois. C'est une séquence, la première façon d'enchaîner.

Organigramme
DébutLire le prix de l'articleretirer 10 pour centajouter 20 pour centAfficher "Prix à payer : ", le prixFin

Le même algorithme, dessiné. Le parallélogramme marque ce qui entre ou ce qui sort, le rectangle un calcul, et les formes arrondies le début et la fin. Quatre formes à la file, une flèche entre chacune : voilà une séquence.

L'ordre n'est pas un détail de présentation
Sur 200 euros, retirer la remise puis ajouter la taxe donne 216 euros. Ajouter la taxe puis retirer la remise donne 216 euros également : ici, les deux ordres se valent.
Remplacer la remise en pourcentage par une remise fixe de 20 euros, et tout change : remise puis taxe donne 216 euros, taxe puis remise en donne 220. Quatre euros d'écart, pour deux algorithmes qui semblent dire la même chose.
Devant une séquence, la question à se poser est donc toujours la même : l'ordre change-t-il le résultat ?

Selon le cas : le plus grand de deux nombres

  1. Demander les deux nombres, les appeler a et b.
  2. Si a est supérieur ou égal à b, alors le plus grand est a.
  3. Sinon, le plus grand est b.
  4. Afficher le plus grand.

L'étape 2 ne s'exécute pas toujours : cela dépend des valeurs. C'est un choix, la deuxième façon d'enchaîner.

Organigramme
FauxVraiDébutLire aLire ba >= bAfficher "Le plus grand est ", bAfficher "Le plus grand est ", aFin

Le losange est le choix. Deux chemins en sortent, un seul est emprunté, et ils se rejoignent ensuite. Suivre du doigt le cas où a et b sont égaux : c'est la branche de gauche qui est prise.

Pourquoi « supérieur ou égal » et pas « supérieur »
Si les deux nombres sont égaux, a > b est faux et l'on passe au sinon. Le résultat reste correct, puisque les deux valeurs sont les mêmes, mais il a fallu y penser pour en être sûr.
C'est le réflexe à prendre dès maintenant : devant une comparaison, se demander ce qui se passe en cas d'égalité.

Plusieurs fois : additionner une série de nombres

Additionner tous les nombres de 1 jusqu'à un nombre demandé.

  1. Demander jusqu'où il faut aller.
  2. Préparer un total, valant zéro au départ.
  3. Pour chaque nombre de 1 jusqu'à celui qui a été demandé, l'ajouter au total.
  4. Afficher le total.

L'étape 3 ne s'exécute pas une fois, mais autant de fois qu'il y a de nombres. C'est une répétition, la troisième et dernière façon d'enchaîner.

Organigramme
SuivantTerminéDébutLire jusqu'où allerle total prend la valeur zérochaque nombre de 1 jusqu'à celuidemandéajouter ce nombre au totalAfficher "Total : ", le totalFin

L'hexagone est la répétition, et la flèche qui remonte à gauche montre le retour au début de chaque tour. La préparation du total est en dehors, avant d'y entrer : c'est ce que la forme rend visible d'un coup d'œil.

Pourquoi préparer le total avant, et pas pendant
Une machine ne retient que ce qu'on lui demande expressément de retenir. Le total n'existe pas tant qu'on ne l'a pas créé, et il ne vaut zéro que parce qu'on l'a décidé à l'étape 2.
Préparer le total à l'intérieur de la répétition le remettrait à zéro à chaque tour, et il ne resterait à la fin que le dernier nombre ajouté. C'est l'erreur la plus fréquente de tout le parcours, et elle donne un résultat qui ressemble encore assez à une somme pour ne pas alerter.

Ce que devient le total, tour après tour

Le meilleur moyen de s'assurer d'une répétition est de la dérouler à la main, sans en sauter un seul tour. Pour une demande allant jusqu'à 4 :

MomentNombre ajoutéTotal après
avant de commencerrien0
premier tour11
deuxième tour23
troisième tour36
quatrième tour410
après le dernier tourrien10

Et 1 + 2 + 3 + 4 font bien 10. Ce contrôle prend trente secondes et attrape la quasi-totalité des erreurs de raisonnement. Le chapitre suivant en fait une méthode, et la plateforme en fait une figure que l'on déroule d'un clic.

Trois façons d'enchaîner, et pas une de plus
La séquence : les étapes à la file.
Le choix : une étape qui ne s'exécute que dans certains cas.
La répétition : une étape qui s'exécute plusieurs fois.
Un algorithme de trois lignes et un logiciel de trois millions sont faits de ces trois-là, emboîtées les unes dans les autres.

Algorithme, programme, langage

Trois mots reviennent constamment et désignent trois choses différentes.

  • Un algorithme est un raisonnement : la suite d'étapes, indépendamment de la façon de l'écrire. Les trois exemples ci-dessus en sont.
  • Un langage de programmation est une façon d'écrire ce raisonnement pour qu'une machine puisse l'exécuter. Python, C et JavaScript en sont.
  • Un programme est le résultat : le même raisonnement, écrit dans un de ces langages.

Un même algorithme donne donc plusieurs programmes, selon le langage choisi. C'est la raison pour laquelle on l'écrit d'abord seul : le raisonnement, une fois juste, se traduit ensuite dans le langage que l'on veut.

Pourquoi ne pas écrire le programme tout de suite

Maintenant que les trois mots sont distingués, la question se pose vraiment.

Prenons une consigne banale : « calculer la moyenne des notes et dire si c'est reçu ». Elle paraît claire, et trois questions restent sans réponse.

  • Combien de notes ? Trois, ou un nombre connu seulement au moment de l'exécution ?
  • Reçu à partir de combien ? 10 inclus, ou strictement plus de 10 ? Le cas d'une note exactement à 10 doit être tranché.
  • Et s'il n'y a aucune note ? Diviser par zéro n'a pas de résultat.

Ce sont exactement les endroits où l'exécutant devrait deviner, comme pour le thé. Les régler prend deux minutes sur une feuille. Les découvrir une fois le programme écrit coûte bien davantage, parce qu'il faut d'abord comprendre pourquoi le programme fait ce qu'il fait.

Un algorithme faux ne devient pas juste une fois tapé
La machine exécute fidèlement le raisonnement qu'on lui donne, y compris quand il est mauvais. Elle ne corrige rien et ne signale rien.

Deux méthodes pour le même problème

Un dernier point, qui donne sa raison d'être à tout le parcours : pour un même problème, plusieurs algorithmes justes existent, et ils ne se valent pas.

Chercher un mot dans un dictionnaire papier de soixante mille mots.

Première méthode. Tourner les pages depuis le début, une par une. Elle marche à tous les coups, et demande au pire soixante mille comparaisons.

Seconde méthode. Ouvrir au milieu, regarder si le mot cherché vient avant ou après, et écarter d'un coup la moitié qui ne peut pas le contenir. Recommencer sur celle qui reste. C'est ce que tout le monde fait sans y penser.

Taille du dictionnairePremière méthodeSeconde méthode
1 000 mots1 000 essais10 essais
60 000 mots60 000 essais16 essais
1 000 000 de mots1 000 000 d'essais20 essais

Les deux méthodes donnent la même réponse. La différence ne tient ni à la machine, ni au langage, ni à la vitesse de celui qui tourne les pages : elle tient au raisonnement, et à lui seul.

La seconde méthode exige une condition que la première ne demande pas
Elle ne fonctionne que si le dictionnaire est trié. Sur une liste en désordre, écarter une moitié n'a aucun sens, et la méthode rend une réponse fausse sans prévenir.
Tout algorithme s'appuie ainsi sur des conditions qu'il ne vérifie pas lui-même. Les nommer fait partie du travail.

Exercices type

Chercher avant de regarder la solution : c'est en cherchant qu'on apprend. Les réponses s'écrivent en français numéroté, comme les exemples du chapitre. Aucune notation particulière n'est attendue ici.

Exercice 1, Pair ou impair

Écrire un algorithme qui demande un nombre entier et affiche « pair » ou « impair ».

Indication : un nombre est pair lorsque le reste de sa division par 2 vaut zéro.

Afficher la solution
  1. Demander un nombre entier, l'appeler n.
  2. Calculer le reste de la division de n par 2, l'appeler r.
  3. Si r vaut 0, alors afficher « pair ».
  4. Sinon, afficher « impair ».

Quelle façon d'enchaîner reconnaît-on ? Un choix, aux étapes 3 et 4.

Exercice 2, Le plus grand de trois nombres

Demander trois nombres et afficher le plus grand.

Indication : commencer par supposer que le premier est le plus grand, puis se corriger.

Afficher la solution
  1. Demander trois nombres, les appeler a, b et c.
  2. Retenir a comme plus grand pour l'instant.
  3. Si b est supérieur au plus grand retenu, retenir b à la place.
  4. Si c est supérieur au plus grand retenu, retenir c à la place.
  5. Afficher le plus grand retenu.

Cette méthode fonctionne pour trois nombres comme pour mille : il suffirait de répéter l'étape 3 pour chacun. C'est le point de départ du chapitre sur les répétitions.

Exercice 3, Compter les étapes

Reprendre l'algorithme qui additionne les nombres. Si l'on demande d'aller jusqu'à 5, combien de fois l'étape d'addition est-elle exécutée, et que vaut le total à la fin ?

Afficher la solution

L'addition est exécutée cinq fois, une par nombre de 1 à 5. Le total passe par 1, 3, 6, 10, puis 15.

Compter les exécutions d'une étape est un réflexe utile : c'est ce qui distingue les deux méthodes de recherche dans le dictionnaire.

Les pièges du début

  • Les consignes qui se complètent toutes seules. « Faire comme d'habitude » ne s'exécute pas : il faut écrire ce qu'est l'habitude.
  • Les cas oubliés. Le zéro, le nombre négatif, l'égalité, l'absence de donnée. Ce sont eux qui font échouer un algorithme par ailleurs juste.
  • Les étapes qui en cachent plusieurs. « Trier les notes » est une phrase, pas une étape : elle demande elle-même un algorithme.

Vérification

Vérification rapideon peut se reprendre

1.Qu'est-ce qui distingue un algorithme d'un programme ?

2.« Calcule la moyenne des notes et dis si c'est reçu » n'est pas encore un algorithme. Pourquoi ?

3.De quelles briques tout algorithme est-il fait ?

4.Un algorithme compare deux nombres avec « si a est supérieur à b ». Qu'a-t-on oublié de vérifier ?

5.Le meilleur moyen de vérifier un algorithme avant de le programmer ?

Et ensuite

Le français numéroté suffit pour trois ou quatre étapes. Il devient lourd dès que l'algorithme grandit, et il reste imprécis sur un point : où commence et où finit un choix ou une répétition.

Le chapitre suivant introduit une écriture faite pour cela, le pseudo-code : plus serrée que le français, plus lisible qu'un langage de programmation, et sans ambiguïté sur les débuts et les fins. Rien n'est à retenir d'avance.

La méthode

  1. Écrire le problème en une phrase, avant toute notation. Si la phrase ne vient pas, le problème n'est pas encore compris.
  2. Nommer ce qui entre et ce qui sort. Un algorithme part de données et produit un résultat : les deux se listent avant de réfléchir aux étapes.
  3. Décomposer en étapes ordonnées, en français, chacune assez simple pour ne laisser aucun choix à celui qui l'exécute.
  4. Vérifier sur un exemple concret, à la main, en suivant les étapes une par une sans anticiper.
  5. Chercher le cas qui casse tout : la liste vide, le zéro, la valeur négative. C'est là que les étapes approximatives se révèlent.
  6. Ne passer à la notation qu'ensuite. Un algorithme juste s'écrit dans n'importe quel langage ; un algorithme faux reste faux dans tous.

Synthèse

  • Un algorithme est une suite d'étapes ordonnées, exécutables sans rien deviner, et qui s'arrête.
  • Le critère : deux personnes qui la suivent obtiennent le même résultat.
  • On y distingue toujours des entrées, un traitement et une sortie.
  • Il n'existe que trois façons d'enchaîner des étapes : la séquence, le choix, la répétition.
  • L'algorithme est le raisonnement, le langage une façon de l'écrire, le programme le résultat.
  • Pour un même problème, plusieurs algorithmes justes existent, et ils ne coûtent pas la même chose.