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 identificateursExemple :
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 !!! ;
IMPLICITNONEse 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 ci 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 ci 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
EQUIVALENCEpermet à 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
CHARACTERne 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)

