UNE MARCHE A SUIVRE, QU'EST-CE QUE C'EST ?
1. Découverte des constituants d'une marche à suivre
2.5 L'appel de procédure
REPEAT A UNTIL condition suite ou ou ou
TANT QUE condition A suite WHILE condition DO A suite Organigramme Basic Rien Rien Comme pour la structure alternative, on se heurtera donc à quelques problèmes, lors du
codage en Basic des structures répétitives, puisque ce langage (dans ses versions pauvres) n'offre pas de traduction immédiate de ces structures.
2.5 L'appel de procédure
Il s'agissait, je le rappelle, d'une instruction d'action complexe, laissée telle quelle dans le texte de la marche à suivre, mais assortie de l'explicitation indispensable au niveau d'une marche à suivre annexe.
Je ne dirai presque rien pour l'instant des divers modes de représentation de cette structure, sauf en ce qui concerne les GNS.
Simplement, le rectangle comportant une instruction trop complexe sera dédoublé et un GNS annexe reprendra l'explication de cette instruction complexe
Par exemple : condition
A
suite conditionA
suiteMarche à suivre Annexe
Comment FAIRE TELLE CHOSE COMPLEXE
Fais ceci FAIS TELLE CHOSE
COMPLEXE Fais cela
GNS explicitant l'action trop complexe
J'ajouterai que cette structure d'appel de procédure est omniprésente en Pascal et ... pratiquement absente dans les deux représentations cousines que sont organigramme et langage Basic.
Les adeptes de Basic rétorqueront, sans doute, que l'appel de procédure existe bel et bien dans ce langage sous la forme de l'instruction GOSUB ... . Sans entrer dans les détails, je dirai simplement qu'en Basic :
- les procédures ne constituent pas véritablement des annexes au programme principal, mais en font partie;
- l'instruction d'appel de procédure GOSUB envoie, comme le branchement (GO TO ...), à un autre endroit du programme, au début de la procédure et, une fois les actions commandées par celle-ci effectuées, l'exécutant revient à l'instruction qui suit immédiatement le GOSUB qui l'avait, un moment, détourné vers la procédure. Pour faire bref, l'appel de procédure en Basic, c'est un branchement avec mémorisation de l'endroit d'où le saut est fait, pour pouvoir y revenir.
L'appel de procédure est l'une des structures les plus importantes en programmation. C'est elle qui permet d'incarner la démarche descendante (dont je reparlerai). C'est aussi l'une de celles pour laquelle les détails techniques (variables globales et locales, paramètres ...) seront les plus difficiles à appréhender. Je n'en dis donc pas plus pour l'instant.
2.6 Le branchement
Il s'agit de ce mode d'organisation des marches à suivre qui brise le déroulement séquentiel en "envoyant" l'exécutant à un autre endroit de la marche à suivre. C'est la structure traduite par l'indication :
ALLEZ EN ...
Le branchement est souvent employé combiné à l'alternative pour prendre la forme :
SI ... ALORS ALLEZ EN ...
qu'on appelle parfois branchement conditionnel.
Le branchement a fréquemment été dénoncé comme un outil de "désorganisation" des marches à suivre et sa condamnation a coïncidé avec la prise de conscience des nécessités d'une programmation structurée.
Ce débat est, à présent, dépassé. Il a cependant permis de prendre conscience qu'un certain nombre de principes doivent être respectés si l'on souhaite écrire des programmes corrects, clairs, compréhensibles et modifiables.
En ce qui concerne la présentation adoptée ici, le branchement ne nous servira pas en tant que structure de contrôle. Il ne possède d'ailleurs pas de représentations sous forme GNS. Il existe bien en Pascal (traduit par les instructions GO TO ...) mais y est relativement peu employé.
Par ailleurs, il est omniprésent dans les organigrammes et en Basic, qui est le langage dans lequel vont s'incarner les structures présentes dans ces organigrammes. En voici un exemple particulièrement représentatif. Le contenu des rectangles et losanges est sans importance. Ce qu'il faut percevoir, ce sont tous les "parcours fléchés" qui renvoient d'un coin à l'autre de la marche à suivre rendant peu visible ce que sera le déroulement d'une exécution.
J'aurai pu présenter, de la même manière, quelques exemples de programmes Basic, mentionnant l'usage immodéré du branchement et du branchement conditionnel. Je pense que s'il fut un temps où il fallait convaincre de la nocivité du branchement comme outil de pensée et d'organisation, cette époque est, heureusement, révolue. Et puis, il est toujours délicat de présenter des exemples de ce qu'il ne faut pas faire !
3. Exercices
1. Pouvez-vous mettre en évidence, dans les exemples de marches à suivre présentées au début de ce chapitre :
- des structures de contrôle.
Exprimez, sous forme GNS, les structures de contrôle détectées. 2 Voici, sous forme GNS et pseudo-code, une courte marche à suivre :
Entrez Buvez un petit verre
JUSQU'A CE QUE vous voyiez double
Asseyez-vous Entrez
REPETER
Buvez un petit verre
JUSQU'A CE QUE vous voyiez double Asseyez-vous
a) Pouvez-vous la transcrire dans le formalisme des organigrammes ?
b) Réécrivez-la sous forme GNS (ou pseudo-code), en utilisant la structure "TANT QUE ..." et toute autre structure de contrôle à l'exclusion de "REPETER ... JUSQU'A CE QUE..." .
Je ne vous demande, ni de juger du bien fondé ou de la moralité de cette marche à suivre, ni de l'améliorer, mais seulement de la transcrire sous une autre forme. Les exécutions de la marche à suivre proposée et des transcriptions que vous suggérerez doivent être identiques, dans tous les cas.
3. Voici, sous forme GNS et pseudo-code, une marche à suivre :
Entrez Entrez
TANT QUE les élèves veulent travailler TANT QUE les élèves veulent travailler Donnez 5 minutes de cours Donnez 5 minutes de cours
Sortez Sortez
a) Exprimez-la dans le formalisme des organigrammes.
b) Fournissez, sous forme GNS (ou pseudo-code), une marche à suivre équivalente (= conduisant à des exécutions identiques), sans employer la structure "TANT QUE...". 4. Vous souhaitez faire marcher, jusqu'à ce qu'il touche un mur, un exécutant borné qui est
seulement capable de faire un pas, de s'arrêter et de se rendre compte qu'il touche (oui ou non) le mur à atteindre.
a) Ecrivez des marches à suivre pour cet exécutant sous forme - d'organigramme;
- d'un programme "à la Basic";
- d'un GNS;
- d'un programme "à la Pascal". b) Que pensez-vous de la solution suivante ? FAIS TOUT CE QU'IL FAUT
POUR ATTEINDRE LE MUR Comment "FAIRE TOUT CE QU'IL FAUT POUR ATTEINDRE LE MUR"
tu touches
le mur ?
V F Fais un pas
Arrête
FAIS TOUT CE QU'IL FAUT POUR ATTEINDRE LE MUR
FAIS TOUT CE QU'IL FAUT POUR ATTEINDRE LE MUR
Comment "FAIRE TOUT CE QU'IL FAUT POUR ATTEINDRE LE MUR"
SI tu touches le mur ALORS Arrête SINON
Fais un pas
FAIS TOUT CE QU'IL FAUT POUR ATTEINDRE LE MUR