Vous êtes sur la page 1sur 9

Algorithmique express jpc/IUFMPL Nantes

L’ALGORITHMIQUE SANS PEINE


en une leçon facile...mais un peu longue

1.GENERALITES

Algorithme Processus défini par une succession finie, ordonnée dans le temps, d’opérations
appliquées à un nombre fini de données conduisant en un nombre fini d’étapes à un
résultat défini quelles que soient les valeurs des données dans leurs domaines de
définition.
Larousse : (arabe al-khârezmi, surnom d'un mathématicien arabe)
Math. et Inform. Suite finie d'opérations élémentaires constituant un schéma de calcul ou de résolution d'un problème.
Algorigramme Représentation graphique conventionnelle d’un algorithme.
Exemple :

AUTOMATE MINIMAL Boucle de Travail

Encore sous_tension?
INITIALISATIONS

Lire_Capteurs
BOUCLE de TRAVAIL

Calculer_Corrections

RESTAURATIONS
Emettre_Commandes

FIN
Fin_Boucle_de_travail

Organigramme Représentation graphique d’une structure hiérarchique d’organisation.


Exemple (partiel) :
LYCEE Polyvalent

PROVISEUR

Proviseur adjoint LP Proviseur adjoint LT Intendant

Chef de travaux LP CPE LP Chef de travaux LT CPE LT Agent chef etc...

etc...

7ALGO1.DOC 1/9
Algorithmique express jpc/IUFMPL Nantes

Ordinogramme Algorigramme adapté à un couple ordinateur + langage de programmation donné.


Exemple :

Swap

Swap, c’est :
Début
LDA(LSB)
LDA (LSB) LDB (MSB)
STD (MSB)
Fin

LDB (MSB)

STD (MSB)

FIN

Langage de description Ensemble minime de règles syntaxiques et de mots-clés permettant


l’écriture et surtout la lecture d’algorithmes non ambigus
Exemple :

Automate_minimal, c’est : Boucle_de_travail, c’est :


Début Début
Initialisations Tant que normal
Boucle_de_travail Lire_capteurs
Restaurations Calculer_corrections
Fin Emettre_commandes
Refaire
Fin

L’exemple montre la récursivité des descriptions algorithmiques qui peuvent ainsi être plus ou moins raffinées
selon les besoins de l’étude par autant de [sous-][...] sous-algorithmes que nécéssaire.

Tout algorithme correspond biunivoquement à un ensemble d’algorigrammes équivalents.

7ALGO1.DOC 2/9
Algorithmique express jpc/IUFMPL Nantes

Structures de La structure de base de l’algorithmique est la séquence simplement


contrôle marquée par le retour à la ligne qui marque le passage à un instant
(strictement) suivant. Pour décrire des enchaînements moins élémentaires,
on a besoin de connaître 6 structures de contrôle exploitant des tests dont
seulement 3 sont indispensables.

• 3 structures indispensables
l’alternative Si [condition_booléenne]
alors [action_oui]
sinon [action_non]
fsi

les 2 « bonnes »boucles Tant que [condition_booléenne]


[action_boucle]
fintantque (ftq , qt, refaire ou...)

Répéter
[action_boucle]
jusqu’à [condition_booléenne]

• 2 structures de confort peuvent être facultativement utilisées.


Boucle pour Pour [variable] de [valeur_initiale] à [valeur_initiale]
[action_boucle]
finpour

Alternative multiple Cas [variable_clé]


[condition_booléenne_1 sur variable_clé] [action_1]
[condition_booléenne_2 sur variable_clé] [action_2]
...
[condition_booléenne_n sur variable_clé] [action_n]
sinon [action_autre]
fcas

• Enfin 1 structure fautive et nuisible mais intuitivement inévitable doit être étudiée pour être
méthodiquement éliminée.
Boucle GOTO ( maudite...) Label [nom_label]
...
...
Si [condition_booléenne]
alors Goto [nom_label]
sinon [rien_continuer]
fsi

Ceci termine l’exposé du langage de description, ne reste plus qu’à en acquérir la maîtrise par des exemples.

7ALGO1.DOC 3/9
Algorithmique express jpc/IUFMPL Nantes
2. L’ALTERNATIVE

Si [condition_booléenne]
alors [action_oui]
sinon [action_non]
fsi

L’alternative n’est jamais liée à une boucle, c’est toujours une dérivation provisoire
de l’algorithme avec convergence immédiate

La branche « sinon » peut être sous-entendue si elle est vide, elle n’en existe pas moins.

Exemples partiels :

Si_1 Si_2 Si_3 Si_4


... ... ... ...
Calculer_moyenne Si Défectueux Si Réussi Si Pas_fini
Si Moyenne ≥ Exigence alors Dépanner alors Passer_à_la_suite alors Continuer
alors Déclarer_Satisfaisant fsi sinon Persévérer sinon Arrêter
sinon Déclarer_Insuffisant ... fsi fsi
fsi ... ...
Remplir_Appréciation
...

1 Détecter les situations où l’emploi du Si est incorrect


2 Représenter les algorigrammes partiels correspondants. (corrigé plus loin)

3. BOUCLE « TANT QUE »

Tant que [condition_booléenne]


[action_boucle]
ftq (refaire, qt ou...)

La condition booléenne exprime positivement le maintien en boucle


Le test est en entrée de boucle

L’action de boucle peut ne jamais être exécutée.

Exemples partiels :
Tq_1 Tq_2 Tq_3
... ... ...
Tant que quotient >1 Tant que Leçon_pas_sue Tant que Sous_tension
quotient←quotient / 2 Apprendre Mesurer
refaire ftq Calculer
... ... Emettre
refaire
...

1 Détecter les situations où l’action de boucle n’est jamais exécutée.


2 Représenter les algorigrammes partiels correspondants. (corrigé plus loin)

7ALGO1.DOC 4/9
Algorithmique express jpc/IUFMPL Nantes

4. BOUCLE « Répéter jusqu’à »

Répéter
[action_boucle]
jusqu’à [condition_booléenne]

La condition booléenne exprime positivement la sortie de boucle


Le test est en sortie de boucle

L’action de boucle est toujours exécutée au moins une fois.

Exemples partiels :

Rjsq_1 Rjsq _2 Rjsq _3


... ... ...
n ← 255 Répéter Répéter
Répéter Charger_Condensateur Mesurer
n←n-1 jusqu’à Seuil_atteint Calculer
jusqu’à n = 0 ... Emettre
... jusqu’à Hors_tension
...

1 Représenter les algorigrammes partiels correspondants. (corrigé plus loin)

La puissance des 3 structures fondamentales de contrôle est énorme. Elles suffisent à décrire tous les
fonctionnements d’automates déterministes... ainsi que les savoir faire humains procéduraux. Les
structures de confort qui les complètent n’ont pour unique utilité qu’un allègement des notations.

La proximité manifeste du langage de description avec le Pascal et le C ne doit pas conduire à une
interprétation erronée qui limiterait la pertinence de l’algorithmique à la préparation de programmes
destinés à être codés à travers ces environnements : c’est parce qu’ils ont été créés à partir de la théorie
des algorithmes que ces langages y sont bien adaptés et non l’inverse.

La maîtrise des 3 structures fondamentales figure explicitement aux référentiels de BEP et de Bac.

Un bon algorithme vaut 10 chronogrammes.

L’algorigramme est la forme achevée, visuellement parlante de l’analyse temporelle, mais c’est rarement
l’outil d’analyse pertinent : ce n’est que lorsqu’il a été mis au point en langage de description que
l’algorithme mérite d’être traduit graphiquement au bénéfice du lecteur, bien sûr, mais d’abord pour
valider le travail de l’auteur.

Si l’algorithme se réduit à un enchaînement quasi-séquentiel (peu ou pas de boucles, alternatives à


branches courtes et sans imbrications), la forme graphique est sans intérêt .

Un bon algorithme ne doit pas dépasser quelques lignes : il faut hiérarchiser en utilisant autant de
niveaux que nécessaire. Cela vaut aussi pour les algorigrammes qui ne devraient pas encombrer plus
d’un demi A4 chacun.

7ALGO1.DOC 5/9
Algorithmique express jpc/IUFMPL Nantes
5. ELIMINATION DES GOTO

Lorsqu’on analyse naïvement un fonctionnement ou un projet de programme, surtout si on raisonne


directement sur algorigramme, on voit souvent apparaître la topologie suivante

...
A
label XX
A B
Si sortie
label XX alors GOTO YY
fsi
C
B GOTO XX
label YY
D
...

Sortie?
La situation semble désespérée, surtout
qu’il s’agit souvent d’un algorithme de
constatation déduit de la
documentation.

La solution est de réécrire


l’algorithme à l’aide d’une boucle
C « Tant que » avec répétition des
instructions de la boucle qui
précèdent le test :

label YY ...
A
B
D Tant que Non (sortie)
C
B
Refaire
D
...

1 Représenter l’algorigramme rectifié. (corrigé plus loin)

7ALGO1.DOC 6/9
Algorithmique express jpc/IUFMPL Nantes
Corrigé des exercices sur le Si : Topologie du Si
Si_1 Si_2

Calculer_moyenne

défectueux ?

Branche alors Branche sinon


moy ≥ exig ?
Dépanner

Déclarer_Satisfaisant Déclarer_Insuffisant

On vérifie visuellement qu’il s’agit bien d’un emploi correct du si : le test crée une dérivation ( l’alternative)
provisoire par deux chemins (un coté alors, un coté sinon) suivie d’un confluent immédiat. Dans Si_2, la
branche sinon est vide, ce qui est permis.

Il ne s’agit jamais d’une boucle.

C’est précisément en cela que les algorithmes Si_3 et Si_4 sont des contre-exemples qui font du “si” un usage
interdit : ce qu’ils cachent sous une apparente alternative, c’est un contrôle de boucle qui ne pourrait être
légitimement formulé qu’à l’aide d’une des deux tournures légitimes (répéter...ou... tantque )

Si_3 Si_4

Les événements Les événements


précédents précédents

réussi ? Pas_fini ?

Les événements Les événements


suivants suivants

fin

Le piège est double, ce qui explique qu’on ytombe si facilement :


1 Les fonctions de test logique (associés graphiquement aux losanges) peuvent toujours se formuler en
style libre par des propositions commençant par “Si ...”. C’est précisément ce que la rigueur algorithmique
interdit.
2 On croit qu’en dehors de la douzaine de mots réservés, le reste du langage est libre...C’est presque
vrai, sauf que ...

La description en langage libre ne doit jamais contenir de structures de contrôle implicites.

Cela interdit donc les synonymes plus ou moins avoués de nos mots clés : “continuer”, “reprendre”,
“arrêter”, “passer à”, “stop”, “sauter en”, “selon”, “en fonction de”, “exécuter”, “attendre”, “choisir”,
“recommencer”, “soit que...soit que”, “quand”, “dès que”, “après que”, “vérifier”, “au cas où”, etc...
sont donc très dangereux et comme tels, à surveiller.

7ALGO1.DOC 7/9
Algorithmique express jpc/IUFMPL Nantes
Corrigé des exercices sur le Tant que :

Les trois algorigrammes ont la même topologie . les algorigrammes sont identiques, corrigeons-en deux :
Tq_1 Tq_3 L’important est de noter que le test est en tête de
boucle et qu’il n’est jamais formulé avec la
conjonction “si”. Noter de plus que le test porte
sous_tension ?
sur la condition d’entrée ou maintien en boucle.
q >1 ?
Il est donc toujours possible que la boucle ne soit
q←q/2 mesurer pas exécutée, il suffit de penser au cas où quand
on en arrive au test, les conditions soient telles
qu’il échoue :
calculer
Quand q vaut 1 ou 0 avant l’entrée Tq_1
Quand la leçon est déjà sue pour Tq_2
émettre Quand l’alimentation est coupée pour Tq_3

La représentation des boucles est donc très


contrainte en algorithmique, mais c’est le prix de la
lisibilité.

Notons au passage que Tq_3 est l’algorithme


noyau fondamental de tous les automates à
microcalculateur.

Corrigé des exercices sur le Répéter jusqu’à :

Rjsq_1 Rjsq_2 Rjsq_3

n←255 Vc←Vc0 mesure

calcul
n←n-1 ←Vc+εε
Vc←

émission
n=0 ? Vc>VT ?

n=0 ?

Il n’y a que 2 différences avec la boucle Tant que, c’est que l’action est toujours exécutée au moins une fois
puisque le test est G en sortie de boucle, et que le test porte non plus sur le maintien en boucle mais sur la
sortie.
Les deux structures se ressemblant fortement, il en résulte que l’algorithmique laisse très peu de liberté pour
décrire les boucles et le débutant s’y sent un peu à l’étroit, d’où la tentation “d’innover”... à laquelle il faut
résister. L’exigence de placer le test en tête ou en queue de boucle, jamais au milieu, correspond à un principe
simple :
Une boucle algorithmique est toujours exécutée un nombre entier de fois.

7ALGO1.DOC 8/9
Algorithmique express jpc/IUFMPL Nantes
Corrigé de l’exercice sur le GOTO :

La structure Goto est donc un fantôme étranger à


l’algorithmique, mais comme elle apparaît
spontanément dans l’analyse a priori des processus
existants, il faut apprendre à la reconnaître, la rédiger ...
A pour finalement l’éliminer selon la présente recette qui
est heureusement universelle.

Remarquer que la structure Goto donnerait des boucles


exécutées un nombre fractionnaire de fois puis qu’on en
B sort par le milieu.

C’est souvent par un emploi abusif du « si » qu’on crée des


boucles GOTO ...sans les voir.

Reprendre le contre-exemple Si_4 ...


Non sortie?

Topologie générale des boucles

C test

test
B
test

D Tant que Répéter GO TO

Par ailleurs, une dernière règle évidente


mais importante d’algorithmique doit être
donnée ici, sans exemple :

Deux boucles peuvent être successives


ou imbriquées, jamais enchevêtrées.

Successives Imbriquées JAMAIS

7ALGO1.DOC 9/9