Les trois auteurs
Véronique Bondaz
Pascal Bouron
Troumad alias Bernard SIAUD
Avant toute programmation, il est recommandé d'avoir une visualisation du programme qu'on va faire. Pour cela, il faut faire un algorithme ou un organigramme. Le premier a une structure linéaire comme un programme alors que le second permet de bien mieux visualiser les différents blocs du programme, les boucles, les tests. C'est ce dernier point que je vais présenter ici : les algorigrammes.
Faire un organigramme est important car la programmation est un processus itératif. Le programme est parfois modifié par d'autres développeurs que ceux qui l'ont conçu. Ce schéma pourra expliquer la conception du programme aux nouveaux développeurs. Il pourra même éclairer le concepteur lui-même sur des idées qu'il avait eu. La réalisation d'un organigramme est tout aussi important que de mettre des commentaires dans le programme.
Les modes de programmation visuelle, qui se développent de plus en plus ressemblent plus à des algorigrammes qu'à un programme. Il est donc important de prendre connaissance dès que possible avec cette schématique.
Cet article est un résumé du cours donné en II1 au département GEii de l'IUT B de l'université Lyon 1.
Exemple : Calcul de la surface d’un disque à partir du rayon
Traduction du cahier des charges :
Entrée : Saisie du rayon
Sortie : Affichage de la surface du disque
Traitement à réaliser : Surface=Pi* Rayon²
Les entrées sorties sont schématisées par des flèches. Elles sont représentées, par une flèche qui va vers une bulle ou un texte pour les entrées et, par une flèche qui sort d'une bulle ou d'un texte pour les sorties. Pour plus de lisibilité, on choisit de mettre à gauche les entrées et à droite les sorties. La nature des entrées-sorties est aussi indiquée car elles peuvent être complètement différentes, surtout en automatique.
Voir sur le schéma ci-dessus l'éntrée Clavier et la sortie Écran.
Il s'agit de l'instruction :
SI ( expression vraie ) ALORS
BLOC 1 D'INSTRUCTIONS
SINON
BLOC 2 D'INSTRUCTIONS
FINSI
Remarque : la sortie avec le rond est la sortie « non ». Ceci permet de la mettre n'importe où : en bas, à droite ou à gauche.
La structure Si (...) Alors {...} Sinon {...} permet de réaliser un choix parmi deux possibilités. Il est possible d?imbriquer les Si (...) Alors {...} Sinon {...} les uns dans les autres pour tenir compte de choix plus nombreux. Mais la structure devient très lourde à écrire et à lire quand le nombre de cas augmente. On lui préférera alors la structure de tests multiples, qui permet de comparer une variable (de type entier en C) à toute une série de valeurs et d'exécuter, en fonction de la valeur effective de cette variable, différents blocs d?instructions.
Le code compilé par une suite de si ou un Au cas ou n'est pas le même. Celui du Au cas où est plus optimisé en général.
Il s'agit de l'instruction :
AU CAS OU ( la variable ) VAUT
C1 : BLOC 1 D'INSTRUCTIONS
C2 : BLOC 2 D'INSTRUCTIONS
C3 : BLOC 3 D'INSTRUCTIONS
?.
Cn : BLOC n D'INSTRUCTIONS
SINON
BLOC n+1 D'INSTRUCTIONS
FIN DE CAS
Il s'agit de l'instruction :
TANT QUE ( condition est vraie ) FAIRE
BLOC D'INSTRUCTIONS
Remarque : comme le test se fait avant le bloc d'instructions, celui-ci n'est pas forcément exécuté.
Attention : il faut que le résultat du test puisse être modifié d’une manière ou d’une autre si on ne veut pas faire une boucle sans fin.
On peut rencontrer la construction tant que (expression) ; sans la présence du bloc d'instructions. Cette construction signifie : "tant que l'expression est vraie attendre".
Il s'agit de l'instruction :
REPETER
BLOC D'INSTRUCTIONS
TANT QUE (condition est vraie)
Remarque : Le test se fait après le bloc d'instructions, celui-ci est exécuté au moins une fois.
Remplacement du "faire tant que" par un "répéter tant que"
REPETER
BLOC D'INSTRUCTIONS A
TANT QUE (condition est vraie)
est équivalent à
BLOC D'INSTRUCTIONS A
TANT QUE (condition est vraie) FAIRE
BLOC D'INSTRUCTIONS A
L'inconvénient de ce remplacement est la répétition de BLOC D'INSTRUCTIONS A. Cette remarque est juste là pour vous aider à faire la différence entre un " répéter tant que " et un "tant que", un "do while" et un "while".
Il s'agit de l'instruction :
POUR ( initialisation ; condition de continuité vraie ; modification )
{
BLOC D'INSTRUCTIONS
}
Remarques :
Pour (;;) est une boucle infinie (répétition infinie du bloc d'instructions).
Bien que les algorigrammes soient très flexibles, leur lisibilité impose d'éviter d'utiliser des structures comme des renvois croisés (boucles ou sauts). Ces renvois doivent impérativement être contenus les uns dans les autres sans intersection.
Ceci est un mauvais exemple car les trois renvois se mélangent.
Cet algorigramme est correct mais, comme certaines parties sont écrites deux fois, il peut être simplifié.
Grâce aux fonctions, la structure du programme principal a été simplifiée en évitant de faire plusieurs fois les mêmes choses.
Voici, sous forme d'organigramme mon programme de taquin disponible à http://c.developpez.com/sources/c/?page=IX. L'original des algorigrammes est un fichier draw de OpenOffice.org disponible ici.
Le corps du programme
~~--------========________========--------~~
La fonction affiche qui renvoie le nombre k de cases mal placées.
~~--------========________========--------~~
La fonction callback_label qui renvoie 1 si le taquin est fini, 0 sinon.
~~--------========________========--------~~
La fonction placepous qui renvoie 1 s'il y a eu un mouvement.
~~--------========________========--------~~
4 petites fonctions.
~~--------========________========--------~~
La fonction taille
~~--------========________========--------~~
La fonction morceaux
~~--------========________========--------~~
La fonction signal_morceaux
~~--------========________========--------~~
La fonction choix_fichier
~~--------========________========--------~~