Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 3 Tableaux dynamiques Sup.: Fonctions interprétées Préc.: 2.1 Utilisation Index Table des matières


2.2 Programmation

     

Cette section montre, à partir d'un exemple, comment écrire un programme appelant des fonctions interprétées.

2.2.1 Exemple

Le but est d'imprimer les valeurs d'une fonction f(x) pour x = 0.0, 0.1, ..., 1.0.

Programme Fortran

      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

Exécution

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

Présentation générale

Comme pour tout programme Modulef, il est nécessaire d'appeler l'utilitaire INITIS (p. gif).

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.

Description détaillée

 

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.

Les notations utilisées pour les utilitaires ci-dessous
sont les notations habituelles (cf. Annexe A).

Utilitaire FON0RR

  

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.

Utilitaire FON1RR

  

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.

Utilitaire FON2RR

  

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.

Utilitaire FON3RR

  

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.

Utilitaire FONDEF

  

SUBROUTINE FONDEF( , , , )

INTEGER M(*)

CHARACTER*(*) CFON

Cet utilitaire analyse la définition d'une fonction.

Utilitaire FONDEN

  

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.

Utilitaire FONDES

  

SUBROUTINE FONDES( , , )

INTEGER M(*)

Cet utilitaire analyse la définition d'une fonction sans retourner son identificateur.

Utilitaire FONDRL

  

SUBROUTINE FONDRL( )

CHARACTER*(*) LIGNE

Cet utilitaire retourne la dernière ligne lue.

Utilitaire FONINI

  

SUBROUTINE FONINI( , , )

INTEGER M(*)

Cet utilitaire initialise l'analyseur de fonctions.

Utilitaire FONTER

  

SUBROUTINE FONTER( )

INTEGER M(*)

Cet utilitaire libère de la place mémoire lorsque l'utilisation des fonctions interprétées est terminée.


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 3 Tableaux dynamiques Sup.: Fonctions interprétées Préc.: 2.1 Utilisation Index Table des matières