Suiv.: 3 Tableaux dynamiques
Sup.: Fonctions interprétées
Préc.: 2.1 Utilisation
Index
Table des matières
Cette section montre, à partir d'un exemple, comment écrire un programme appelant des fonctions interprétées.
Le but est d'imprimer les valeurs d'une fonction f(x) pour x = 0.0, 0.1, ..., 1.0.
PARAMETER (LM=1000) COMMON M(LM) 1000 FORMAT (' F(', F3.1, ') = ', F10.8) C C INITIALISATIONS CALL INITIS(M, LM, 0, 0) CALL FONINI(M, 100, ICODE) C C LECTURE DE LA DEFINITION DE F(X) WRITE (*,*) 'FONCTION ?' CALL FONDES(M, IFON, ICODE) C C CALCUL DE F(X) POUR X = 0.0, 0.1, ..., 1.0 WRITE (*,*) ' ' DO 100 I = 0, 10 X = REAL(I) / 10. CALL FON1RR(M, IFON, X, R, ICODE) WRITE (*,1000) X, R 100 CONTINUE END
FONCTION ? F(X) = 2 * ASIN(X) ; F(0.0) = 0.00000000 F(0.1) = 0.20033485 F(0.2) = 0.40271586 F(0.3) = 0.60938531 F(0.4) = 0.82303369 F(0.5) = 1.04719758 F(0.6) = 1.28700233 F(0.7) = 1.55079496 F(0.8) = 1.85459054 F(0.9) = 2.23953891 F(1.0) = 3.14159274
Comme pour tout programme Modulef, il est nécessaire d'appeler
l'utilitaire INITIS (p. ).
Ensuite, l'utilitaire FONINI
initialise l'interpréteur de
fonctions. Il peut être appelé plusieurs fois, effaçant alors
les informations mémorisées auparavant.
Pour analyser une fonction définie par l'utilisateur, l'utilitaire
FONDEF
, ainsi que ses variantes FONDES
et FONDEN
,
sont proposés. A chaque appel, une nouvelle fonction est
mémorisée, et le paramètre de sortie IFON
repère cette
fonction en mémoire.
Différents utilitaires exécutent une fonction définie par
l'utilisateur : FON0RR
, FON1RR
, FON2RR
,
FON3RR
(retour d'une valeur réelle à partir de 0, 1, 2 ou 3
arguments réels). D'autres utilitaires de ce type peuvent être
développés.
L'utilitaire FONDRL
retourne la dernière ligne lue,
afin par exemple de l'afficher sur l'écran.
Enfin, FONTER
détruit les tableaux dynamiques
nécessaires
à l'interpréteur.
Cette section contient la description, par ordre alphabétique, des sous-programmes intéressant le programmeur. Pour de plus amples détails, se référer au code source qui est commenté.
Un code de retour (ICODE
) est retourné par la plupart des
utilitaires. Si aucune erreur n'est détectée (exécution
normale), la valeur retournée est 0. Sinon, un code non nul est
retourné, et le message correspondant est imprimé par l'utilitaire
FONERR
.
|
SUBROUTINE FON0RR(
,
,
,
)
INTEGER M(*), IFON, ICODE
REAL R
Cet utilitaire exécute une fonction ayant 0 paramètre réel et un résultat réel.
SUBROUTINE FON1RR(
,
,
,
,
)
INTEGER M(*), IFON, ICODE
REAL X, R
Cet utilitaire exécute une fonction ayant 1 paramètre réel et un résultat réel.
SUBROUTINE FON2RR(
,
,
,
,
,
)
INTEGER M(*), IFON, ICODE
REAL X, Y, R
Cet utilitaire exécute une fonction ayant 2 paramètres réels et un résultat réel.
SUBROUTINE FON3RR(
,
,
,
,
,
,
)
INTEGER M(*), IFON, ICODE
REAL X, Y, Z, R
Cet utilitaire exécute une fonction ayant 3 paramètres réels et un résultat réel.
SUBROUTINE FONDEF(
,
,
,
)
INTEGER M(*)
CHARACTER*(*) CFON
Cet utilitaire analyse la définition d'une fonction.
SUBROUTINE FONDEN(
,
,
,
)
INTEGER M(*), MCOU(*)
Cet utilitaire analyse les définitions de fonctions numérotées :
<identificateur de fonction numérotée> ::= <fonction> <numéro>
<fonction> ::= suite non vide de lettres (A-Z) et de soulignés (_)
<numéro> ::= suite non vide de chiffres
Par exemple, l'utilisateur définit deux courbes :
COURBE3(X,Y) = X**2 + Y**2 - 1 ;
COURBE5(X,Y) = (X-1.2)**2 + (Y-3.4)**2 - 6.25 ;
FIN
Le programmeur initialise à -1 les éléments d'un tableau MCOU, puis appelle l'utilitaire FONDEN. En sortie, seuls MCOU(3) et MCOU(5) sont modifiés, et repèrent les fonctions définies par l'utilisateur.
SUBROUTINE FONDES(
,
,
)
INTEGER M(*)
Cet utilitaire analyse la définition d'une fonction sans retourner son identificateur.
SUBROUTINE FONDRL(
)
CHARACTER*(*) LIGNE
Cet utilitaire retourne la dernière ligne lue.
SUBROUTINE FONINI(
,
,
)
INTEGER M(*)
Cet utilitaire initialise l'analyseur de fonctions.
SUBROUTINE FONTER(
)
INTEGER M(*)
Cet utilitaire libère de la place mémoire lorsque l'utilisation des fonctions interprétées est terminée.