Créons un nassichneiderman en remplacement du flowchart modifié de la page mon premier flowchart et voyons le résultat .
La création du nassichneiderman
Maintenant que nous en savons suffisemment sur le nassichneideerman, nous pouvons essayer de voir ce que donnerait l'algoritme du programme de calcul de superficie d'un disque en nassichneiderman.
Pour nous éviter de retourner vingt fois à la page sur laquelle nous avons réétudié l'application, il est sans nul doute intéressant d'en faire la récapitulation ici:
- Que doit faire l'application?
- L'application doit calculer la superficie d'un disque.
- L'application doit sécuriser l'introduction clavier du rayon de manière à éviter que l'utilisateur ne soit tenté d'utiliser des lettres.
- Après l'affichage du résultat, une pause doit être faite de manière à ce que l'utilisateur puisse choisir entre calculer une nouvelle superficie ou non.
- De quelle information l'application a-t-elle besoin?
- il faut disposer du rayon du disque dont on veut calculer la superficie.
- Il faut aussi disposer d'une variable permettant de choisir de continuer ou non .
- Il faut enfin disposer d'une variable temporaire pour l'acquisition non bufferisée des touches enfoncées par l'utilisateur .
- Où l'application va-t-elle trouver ces informations? L'utilisateur introduira le rayon ainsi que la décision de continuer ou non au clavier.
- Comment l'application va-t-elle utiliser ces information?
- l'appication multipliera le rayon par lui-même (solution de facilité pour l'élever au carré) et par la constante PI (Π:3.14159...).
- L'application affichera le résultat obtenu .
- Si l'utilisateur décide de calculer une nouvelle superficie, il faut reprendre le processus .
En nassichneiderman, l'une des solutions (hé oui, il y a toujours plusieurs solutions à un problème donné) serait donnée par ceci:
Variable | Type | Description |
---|---|---|
touche | caractère | Variable récupérant l'aquisition non bufferisée du clavier |
chaine | chaine | Variable temporaire gardant en mémoire toutes les touches enfoncées |
Rayon | entier | Variable gardant en mémoire le rayon du disque |
Surface | réel | Variable gardant en mémoire la superficie du disque calculée |
Il ne reste plus maintenant qu'à traduire notre merveilleux nassichneiderman en langage de programmation
Cette traduction est excessivement intuitive (et certains en diront même qu'il s'agit de la partie la plus embêtante).
Voici ce que ca donne:
vide Principale(vide) { faire { affiche "Introduisez le rayon du dique "| chaine=""| faire { clavier touche| si (Est_num(touche)) { chaine=chaine+touche| } } jusque(pas touche=13) Rayon=Chaine_A_Num(chaine)| Surface=Rayon*Rayon*3.1415| Affiche "La superficie du disque est de " Surface| Affiche "Un autre calcul(o/n)?"| faire { si (touche≠"o" et touche≠"O" et touche≠"n" et touche≠"N") { Affiche "Veuillez choisir O ou N"| } }jusque (pas (touche="o" ou touche="O" ou touche="n" ou touche="N")) }jusque (pas (touche="n" ou touche="N") }
Le code obtenu est donc non seulement plus compact, mais gagne aussi en lisibilité du fait que le début et la fin de chaque boucle est clairement défini (l'indentation du code aidant énormément).
Nous voyons, à la lecture du code, que l'on fait appel deux fois à un code très similaire pour l'aquisition du rayon d'une part et celle du choix d'effectuer un autre code de l'autre…
Bien que l'exemple ne s'y prête pas forcément, il serait possible d'utiliser un sous-programme qui se charge de l'aquisition du clavier, mais pour cela, il faut connaître un peu de théorie sur les routines.
Mais avant cela, je voudrais un peu m'étendre sur la déclaration des chaines des caractères, qui ne sont en définitive que des tableaux. C'est ce dont parle la page suivante.
Copyright (©) 2005 (Philippe Dunski)
Ce cours est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous).
Ce cours est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails.
Cependant, l'auteur apprécierait grandement que vous lui fassiez part de toute modification apportée à son contnu
Vous pouvez le contacter par mail à l'adresse koala01@free.fr
Vous pouvez trouver une adaptation française de la licence GNU/GPL à l'URL http://www.linux-france.org/article/these/gpl.html