• Aucun résultat trouvé

• Algorithmes informatiques

Pour résoudre informatiquement son problème, le programmeur devra élaborer un algorithme. Celui-ci est utilisé pour transformer un travail complexe en une succession de tâches simples, dites élémentaires. Son rôle consiste donc à décomposer son travail en « une suite finie d'instructions permettant, à partir de données, d'aboutir au résultat voulu ». Cette définition itérative de l'algorithme mérite quelques précisions :

« suite » : ce substantif indique que les actions à effectuer le sont séquentiellement et dans un ordre déterminé. Si l'on change l'ordre des instructions, c'est-à-dire si l'on modifie la suite, le résultat obtenu sera différent.

« finie » : la suite définie ci-dessus doit comporter un nombre fini d'actions. Au cas où des répétitions seraient introduites (ce qui est possible), il conviendra de bien vérifier que

40 volume 8, 1977, page 1013

« jeu de l'enfant-robot » --> esprit rigoureux et méthodique

cela n'engendre pas un nombre d'instructions infini (cf. l'apprenti sorcier de Fantasia42). Il ne faut pas que le seul moyen de stopper l'exécution du programme… soit de débrancher l'ordinateur.

« instruction » : on nommera ainsi tout ordre compréhensible par la machine (ou de manière plus générale, exécutable par celui à qui il s'adresse). Il s'agit, en fait, d'une tâche élémentaire assimilable par l'interlocuteur.

« résultat » : le programme a un but. L'algorithme ne fait que décomposer l'ensemble en une succession de tâches élémentaires qui mèneront finalement au résultat escompté. Lorsque le programmeur veut faire travailler son ordinateur à sa place, le problème qu'il va avoir à résoudre consiste à passer du domaine humain dans lequel se situe sa tâche à un domaine automatisable (celui de la machine). « La difficulté majeure de l'informatique est de passer d'un concept humain à une représentation mécanique » nous confirment Bertrand MEYER et Claude BAUDOIN.43

Chantal et Patrice Richard44 résument ainsi les trois étapes pour écrire un programme :

une analyse structurée du problème.

un mode d'expression de cette analyse qui soit indépendant du langage de programmation utilisé par la suite.

une traduction dans un langage compréhensible par la machine.

Les avantages liés à l'utilisation de la programmation structurée sont nombreux. Cette méthode de travail permet notamment la décomposition, la bonne lisibilité, la communication, le travail en équipe et également la maintenance du programme. Jacques Arsac, un de ses fervents défenseurs, souligne, dans la préface de l'ouvrage Initiation à l'algorithmique,45 que :

on peut, on doit, raisonner sur les programmes que l'on écrit. Ils doivent être justes par construction, et non par essais limités.

on peut, on doit, écrire des programmes propres, clairs, lisibles.

• Exemple de « pseudo-algorithme » non informatique

D'après les définitions des paragraphes ci-dessus, on pourrait être tenté de croire que l'algorithme tel qu'il est utilisé en informatique est plus ou moins naturel et qu'il suffit de structurer un peu sa pensée ou sa manière de traiter un problème pour créer un algorithme. Il n'en est rien. Avant d'expliquer, de manière plus précise, ce qui différencie un algorithme informatique d'une succession de tâches à réaliser dans un certain ordre, donnons un exemple « d'algorithme courant ».

42 Dessin animé de Walt Disney dans lequel, sur une musique de Paul Dukas, les balais de l'apprenti sorcier Mickey remplissent inlassablement un chaudron d'eau sans pouvoir être arrêtés.

43 Méthodes de programmation, Eyrolles, 1984

44 Initiation à l'algorithmique, DIA, Belin, 1983, page 9

Le « pseudo-algorithme » de réparation du moteur peut être le suivant :

dépose du carburateur.

démontage du carburateur.

nettoyage et vérification des différents éléments.

remontage du carburateur.

pose du carburateur.

Se pose alors le problème essentiel de savoir à qui est destiné cette séquence et si les termes qui y sont employés sont compréhensibles et exploitables par celui à qui elle s'adresse. Si ce n'est pas le cas, il convient d'expliciter, en général par nouvelle décomposition, les étapes, pour lors, inutilisables.

On travaille donc ensuite de manière autonome et quasiment indépendante sur chacun des chapitres précités afin d'obtenir un « pseudo-algorithme plus fin ». En effet, la dépose du carburateur correspond, à elle seule, au pseudo-algorithme suivant :

démontage de la durite d'arrivée d'essence.

desserrage du collier de durite d'arrivée d'air.

démontage de la durite d'arrivée d'air.

On peut encore affiner ce pseudo-algorithme en explicitant comment desserrer le collier de durite d'arrivée d'air :

utiliser un tournevis cruciforme n°8.

maintenir la patte de fermeture à l'aide d'une pince.

desserrer la vis de 2 tours.

On part donc d'un plan de travail général. On en affine ensuite chaque chapitre en les décomposant en paragraphes. Chacun de ceux-ci peut, à son tour, être dissocié. Ce travail s'arrête lorsque les derniers éléments sont directement exécutables. Dans notre exemple, on suppose que l'instruction « desserrer la vis de 2 tours » est compréhensible par le mécanicien. Dans le cas contraire, il serait nécessaire de la décomposer jusqu'à ce qu'elle le devienne…

• Validité de l'algorithme

Nous abordons là un point essentiel de la distinction entre ce qu'on pourrait plus exactement nommer une « description de pratique » et un véritable algorithme, au sens informatique du terme. On ne peut pas déterminer si une « description de pratique » est valide et exploitable par autrui sans connaître l'utilisateur auquel elle s'adresse. En effet, le degré d'affinement de la description dépend du degré de compétence du lecteur.

En revanche, un algorithme de type informatique est trop impratif et trop directif pour être réellement et précisément exécutable dans la vie courante. En effet, son utilisateur ne pourra

« jeu de l'enfant-robot » --> esprit rigoureux et méthodique

pas le suivre « à la lettre », comme le ferait une machine. Si, par exemple, l'algorithme impose de « dévisser », le lecteur s'emparera spontanément du tournevis par le manche alors que cette action n'a pas été détaillée. A contrario, si celle-ci devait être décomposée, l'utilisateur grâce à son expérience, « sauterait » probablement des étapes d'un algorithme interminablement et inutilement long.

En informatique, l'algorithme procède effectivement de la décomposition d'un travail complexe en une succession de tâches élémentaires. Cependant les structures utilisables sont répertoriées, en nombre très limité et l'on est sûr que l'algorithme est suffisamment détaillé (à défaut d'être exact) lorsque toutes les instructions utilisées sont traductibles dans le type de langage de programmation envisagé. Le niveau d'affinement de la décomposition s'arrête exactement au niveau où le langage peut opérer. L'algorithme est « auto-suffisant ».

Il suffit d'observer la difficulté qu'ont les élèves, tous au minimum licenciés, préparant le concours de professeurs des écoles, à décrire de manière précise et succincte la construction d'une figure géométrique simple (figure ci-contre) afin qu'elle soit reproductible par autrui. On s'aperçoit, qu'en dehors du problème lui-même, la difficulté principale consiste à s'accorder sur le vocabulaire autorisé sans

explicitation complémentaire (peut-on utiliser le terme « diagonale » ou doit-on expliciter sa construction ?). La difficulté d'écrire l'algorithme de construction de la figure réside, entre autre, dans l'absence d'un langage minimal autorisé répertorié.