Suiv.: 2.2 Programmation
Sup.: Fonctions interprétées
Préc.: Fonctions interprétées
Index
Table des matières
La définition des fonctions est donnée en
format libre (chapitre 1),
sur une ou plusieurs lignes, en colonnes 1 à 72.
La forme générale est la suivante :
fonction(parametre1, parametre2, ...) = expression ;
|
Exemple :
F(X,Y,Z) = (X-X**3) * (Y-Y**3) * (Z-Z**3)
+ LOG(X+Y+Z+1)
- 5.9 ;
Ainsi, les blancs sont admis, et un point-virgule (;
)
marque la fin de la définition de la fonction.
Cette forme est assez naturelle et
les expressions simples ne soulèvent aucune difficulté.
Pour les cas plus complexes, le lecteur trouvera ci-dessous
deux présentations différentes :
la première se situe par rapport à Fortran 77,
et la deuxième est plus formelle.
La forme est très voisine de celle des
``statement functions'' de Fortran 77.
Cependant, quelques différences doivent
être notées :
- La définition peut commencer avant la colonne 7.
- Si la définition est répartie sur plusieurs lignes, il
suffit d'écrire celles-ci les unes à la suite les autres, sans
oublier le point-virgule (
;
) final. Il n'y a pas, comme
en Fortran, de ``caractère suite'' en colonne 6.
- Tous les opérandes sont considérés comme étant de type
REAL (réel simple précision) : les paramètres (quelle que
soit la première lettre de l'identificateur) et les constantes
numériques (
36
et 36.
sont équivalents,
et 1/2
retourne 0.5).
- En Fortran, tous les opérateurs de même priorité sont
évalués de
gauche à droite, sauf l'exponentiation.
Ici, il n'y a pas d'exception :
A**B**C
est évalué comme (A**B)**C
.
- Les noms des fonctions intrinsèques sont réservés, et ne
doivent donc pas être employés pour identifier un paramètre.
La liste des identificateurs réservés est donnée dans la
figure 2.1.
- Un certain nombre d'extensions sont autorisées : par
exemple, la longueur des identificateurs peut excéder 6
caractères (section 2.1.2).
Figure: Les identificateurs réservés
Rappelons la forme générale (section 2.1) :
fonction(parametre1, parametre2, ...) = expression ;
Cette syntaxe est symbolisée par le diagramme
de la figure 2.2.
Figure: Diagramme de la définition d'une fonction
- identificateur
- est une suite non vide de lettres (A-Z),
de soulignés (_) et de chiffres (0-9). Le premier caractère est
obligatoirement une lettre ou un souligné. La longueur d'un
identificateur est limitée uniquement par celle des lignes
d'entrée, soit 72 caractères. L'analyseur syntaxique vérifie que
tout identificateur est différent des mots réservés
(figure 2.1).
- fonction
- est l'identificateur de la fonction à définir,
considérée comme réelle simple précision.
- paramètre1, paramètre2, ...
- sont les identificateurs des
paramètres formels pouvant apparaître dans l'expression,
ces paramètres étant considérés comme des variables
réelles simple précision.
- expression
- est une construction formée d'opérandes,
d'opérateurs et de parenthèses, retournant une valeur
réelle simple précision.
Les opérandes sont des
paramètres ou des constantes numériques.
La liste des opérateurs disponibles est donnée dans la
section suivante.
- un point-virgule
- termine la définition de toute fonction.
Figure: Priorités des opérateurs
La figure 2.3 donne, pour chaque opérateur
inséré ou de type fonction, sa cardinalité et sa priorité :
- Par définition,
un opérateur inséré se place entre les deux opérandes ;
un opérateur fonction se place devant le ou les opérandes ;
Ainsi, on peut écrire :
A*B -A ABS A MOD A B
La forme opérateur(opérande1, opérande2, ...),
qui
est plus habituelle et visualise mieux l'ordre d'évaluation,
est aussi autorisée :
ABS(X) MOD(X*Y, Z)
- La cardinalité est le nombre d'opérandes
(2 pour les opérateurs insérés).
- La priorité détermine l'ordre d'évaluation d'une
expression ou d'une sous-expression,
en l'absence de parenthèses :
- Si deux opérateurs ont des priorités différentes,
celui dont la priorité est la plus élevée
est évalué en premier.
- Si deux opérateurs insérés ont des priorités égales,
le plus à gauche est évalué en premier.
- Si deux opérateurs-fonctions ont des priorités égales,
le plus à droite est évalué en premier.
Exemples :
A+B*C | est évalué comme | A+(B*C) |
A/B*C | est évalué comme | (A/B)*C |
A**B**C | est évalué comme | (A**B)**C |
-A+B | est évalué comme | (-A)+B |
-A**B | est évalué comme | -(A**B) |
SIN COS A | est évalué comme | SIN(COS(A))) |
Afin d'optimiser le temps d'exécution et la précision des calculs,
certaines exponentiations sont remplacées automatiquement par des
multiplications.
Ainsi, ne pas hésiter à taper (X+1)**2
plutôt que (X+1)*(X+1)
!
Suiv.: 2.2 Programmation
Sup.: Fonctions interprétées
Préc.: Fonctions interprétées
Index
Table des matières