3. Déclarations▲
3-1. Identificateurs▲
Un identificateur permet de donner un nom à :
- une variable ;
- une constante ;
- une procédure.
Il est défini par :
- une suite de caractères alphanumériques (lettres non accentuées, chiffres, underscore) ;
- le premier caractère doit être une lettre ;
- la longueur est limitée à 31 caractères ;
- on ne distingue pas les lettres majuscules des minuscules.
2.
3.
4.
compteur
Compteur
fin_de_fichier
montant_annee_1993
3-2. Différents types▲
Le type d'une variable détermine :
- le nombre d'octets à réserver en mémoire ;
- un mode de représentation interne ;
- l'ensemble des valeurs admissibles ;
- l'ensemble des opérateurs qui peuvent lui être appliqués.
3-2-1. Types prédéfinis ou de bases▲
: entier |
|
: caractère |
|
: deux valeurs |
|
: réel simple précision |
|
: réel double précision |
|
|
: complexe simple précision |
Remarque : la précision d'un réel simple est de 7 chiffres décimaux significatifs alors que celle d'un double est de 15.
3-2-2. Attributs▲
3-3. Syntaxe▲
3-3-1. Forme générale d'une déclaration▲
type[, liste attributs :: ] liste identificateurs
Exemple :
2.
3.
4.
5.
6.
PROGRAM
declaration
INTEGER
, SAVE
:: compteur
INTEGER
:: temperature
LOGICAL
:: arret_boucle
...
END
PROGRAM
declaration
2.
3.
4.
5.
PROGRAM
declaration
INTEGER
indice_boucle
SAVE
indice_boucle
...
END
PROGRAM
declaration
3-3-2. Cas particulier : le type CHARACTER▲
Pour déclarer une chaîne de caractères, on précise de plus sa longueur. Si elle n'est pas indiquée, elle est égale à 1 :
2.
CHARACTER
(LEN
=N) ch_car
CHARACTER
c
Il est possible, mais déconseillé d'utiliser la syntaxe suivante :
CHARACTER
*N ch_car
2.
3.
4.
5.
PROGRAM
declaration
CHARACTER
(LEN
=11) chaine1
CHARACTER
*11 chaine2
...
END
PROGRAM
declaration
3-4. Instruction IMPLICIT NONE▲
Par défaut, les variables dont l'identificateur commence par les caractères I à N sont de type INTEGER
.
Toutes les autres sont de type REAL
.
L'instruction IMPLICIT
NONE
change cette règle, car elle impose à l'utilisateur la déclaration de chaque variable :
- elle permet la détection d'un certain nombre d'erreurs à la compilation.
Cette instruction est vivement recommandée !!! ;
IMPLICIT
NONE
se place avant les déclarations des variables ;- l'instruction ne s'applique qu'à l'unité de programme qui la contient.
3-5. Constantes littérales▲
3-5-1. Constantes entières▲
- Une suite de chiffres en base 10.
- Une suite de chiffres en base 2 encadrée par des quotes, le tout précédé du caractère B.
- Une suite de chiffres en base 8 encadrée par des quotes, le tout précédé du caractère O.
- Une suite de chiffres en base 16 encadrée par des quotes, le tout précédé du caractère Z.
Une valeur négative sera précédée du signe -.
2.
3.
4.
5.
6.
1
123
-28
B'11011011100'
O'3334'
Z'6DC'
Remarque : les constantes écrites en base 2, 8 ou 16 s'appellent des constantes BOZ. Elles ne peuvent figurer que dans les instructions d'initialisation de type DATA
.
3-5-2. Constantes réelles simple précision▲
Une constante de type REAL
doit obligatoirement comporter :
- soit le point décimal, même s'il n'y a pas de chiffres après la virgule ;
- soit le caractère E pour la notation en virgule flottante.
Pour les nombres écrits 0.xxxxx, on peut omettre le 0 avant le point décimal.
2.
3.
4.
5.
6.
7.
8.
9.
0.
1.0
1.
3.1415
31415E-4
1.6E-19
1E12
.001
-36.
3-5-3. Constantes réelles double précision▲
Une constante double précision doit obligatoirement être écrite en virgule flottante, le E étant remplacé par un D.
2.
3.
4.
5.
6.
7.
8.
9.
0D0
0.D0
1.D0
1d0
3.1415d0
31415d-4
1.6D-19
1d12
-36.d0
3-5-4. Constantes complexes▲
Une constante de type COMPLEX
est obtenue en combinant deux constantes réelles entre parenthèses séparées par une virgule.
kitxmlcodeinlinelatexdvp2.5+ifinkitxmlcodeinlinelatexdvp s'écrira (2.5,1.)
2.
3.
(0.,0.)
(1.,-1.)
(1.34e-7, 4.89e-8)
3-5-5. Constantes chaînes de caractères▲
Une constante chaînes de caractères est une suite de caractères encadrée par le délimiteur '
ou bien "
.
Si parmi la suite des caractères figure le caractère délimiteur, il devra être doublé.
2.
3.
'La somme des n premiers entiers est : '
'l''étendue désirée est : '
"l'étendue désirée est : "
À partir d'une variable chaîne de caractères, on peut extraire une suite de caractères contigus. Pour cela, on spécifie le nom de la variable suivi entre parenthèses d'un couple d'entiers n:m indiquant les rangs de début et de fin d'extraction.
2.
3.
4.
CHARACTER
(LEN
=10) :: ch
ch = "Bonjour"
ch(4:7) = "soir"
3-6. Initialisation▲
3-6-1. L'instruction DATA▲
DATA
liste1/init1/[, ..., listei/initi/, ...]
- listei fait référence à une liste de variables à initialiser.
- initi indique les valeurs d'initialisation.
-
Le type des valeurs d'initialisation doit respecter les règles suivantes :
- pour un objet de type caractère ou logique, la constante d'initialisation doit être de même type ;
- pour un objet de type entier, réel ou complexe, la constante d'initialisation peut être de type entier, réel ou complexe.
2.
3.
4.
5.
6.
REAL
A, B, C
INTEGER
N, M
LOGICAL
arret
DATA
A, B, N/1.0, 2.0, 17/
DATA
C/2.6/, M/3/
DATA
arret/.FALSE.
/
Remarques :
- cette instruction peut apparaître après des instructions exécutables, mais la norme F95 a déclaré cette possibilité comme obsolète ;
- les variables initialisées par ce moyen héritent de l'attribut
SAVE
: elles sont alors permanentes (cf. chapitre ProcéduresProcédures, section Durée de vie des identificateursDurée de vie et visibilité des identificateurs) ; - ce type d'initialisation peut être faite directement lors de la déclaration.
2.
3.
REAL
A/3.14/, B/2.718/
INTEGER
N/1/, M/4/
LOGICAL
arret/.false.
/
3-6-2. Le symbole « = »▲
Fortran permet d'initialiser une variable lors de sa déclaration à l'aide du symbole =. Dans ce contexte, les caractères :: sont obligatoires.
TYPE[, attributs] :: v1 =c1[, ..., vi =ci, ...]
Où vi est le nom de la variable à initialiser et c
i sa valeur.
2.
3.
4.
5.
6.
PROGRAM
initialisation
INTEGER
:: debut = 100
REAL
:: valeur = 76.3
LOGICAL
:: drapeau = .TRUE.
...
END
PROGRAM
initialisation
3-7. Constantes symboliques▲
L'attribut PARAMETER
permet de donner un nom symbolique à une constante littérale :
TYPE, PARAMETER
:: n1 =c1[, ..., ni =ci, ...]
où ni est le nom donné à une constante et c
i sa valeur.
La notation suivante est aussi utilisable :
PARAMETER
( n1 =c1[, ..., ni =ci, ...] )
2.
3.
4.
5.
6.
7.
PROGRAM
constante
LOGICAL
, PARAMETER
:: VRAI=.TRUE.
, FAUX=.FALSE.
DOUBLE
PRECISION
:: PI, RTOD
PARAMETER
(PI=3.14159265d0, RTOD=180.d0/PI)
...
END
PROGRAM
constante
3-8. Instruction EQUIVALENCE▲
- L'instruction
EQUIVALENCE
permet à des variables de partager la même zone mémoire au sein d'une unité de programme. - Il n'y a pas de conversion de type.
- Chaque variable garde les propriétés de son type.
- Le type
CHARACTER
ne peut pas être associé à d'autres types.
EQUIVALENCE
(v1, v2)[, ..., (vi−1, vi), ...]
où les vi sont des scalaires (variables simples ou éléments de tableaux).
2.
3.
4.
5.
6.
PROGRAM
correspondance
COMPLEX
cmplx
(2)
REAL
temp(4)
EQUIVALENCE
(temp(1), cmplx
(1))
...
END
PROGRAM
correspondance
On a alors en mémoire :
|--------cmplx(1)-------|--------cmplx(2)-------|
|-----------|-----------|-----------|-----------|
|--temp(1)--|--temp(2)--|--temp(3)--|--temp(4)--|
2.
3.
4.
5.
6.
7.
8.
9.
PROGRAM
correspondance
CHARACTER
(LEN
=4) :: A, B
CHARACTER
(LEN
=3) :: C(2)
CHARACTER
(LEN
=10) :: chaine
CHARACTER
(LEN
=1), DIMENSION
(10) :: tab_car
EQUIVALENCE
(A,C(1)),(B,C(2))
EQUIVALENCE
(chaine,tab_car(1))
...
END
PROGRAM
correspondance
On a alors en mémoire :
| 01 | 02 | 03 | 04 | 05 | 06 | 07 |
|---------A---------|
|-----C(1)-----|-----C(2)-----|
|---------B---------|
| 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
|-------------------- chaine ---------------------|
| |
|--> tab_car(1) |--> tab_car(7)