IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Les notions de base du Fortran

Support de cours


précédentsommairesuivant

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.
Exemple d'identificateurs
Sélectionnez
1.
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

INTEGER

: entier

CHARACTER

: caractère

LOGICAL

: deux valeurs .TRUE. / .FALSE.

REAL

: réel simple précision

DOUBLE PRECISION

: réel double précision

COMPLEX

: 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

Chaque type peut être surchargé des attributs suivants :

PARAMETER

: constante symbolique

DIMENSION

: taille d'un tableau

SAVE

: objet statique

EXTERNAL

: procédure externe

INTRINSIC

: procédure intrinsèque

3-3. Syntaxe

3-3-1. Forme générale d'une déclaration

 
Sélectionnez
type[, liste attributs :: ] liste identificateurs

Exemple :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
PROGRAM declaration
  INTEGER, SAVE     :: compteur
  INTEGER           :: temperature
  LOGICAL           :: arret_boucle
               ...
END PROGRAM declaration
 
Sélectionnez
1.
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 :

 
Sélectionnez
1.
2.
CHARACTER(LEN=N) ch_car
CHARACTER        c

Il est possible, mais déconseillé d'utiliser la syntaxe suivante :

 
Sélectionnez
1.
CHARACTER*N ch_car
Exemple
Sélectionnez
1.
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 -.

Exemple
Sélectionnez
1.
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.

Exemple
Sélectionnez
1.
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.

Exemple
Sélectionnez
1.
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.)

Exemple
Sélectionnez
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é.

Exemple
Sélectionnez
1.
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.

Exemple
Sélectionnez
1.
2.
3.
4.
CHARACTER(LEN=10) :: ch

ch = "Bonjour"
ch(4:7) = "soir"

3-6. Initialisation

3-6-1. L'instruction DATA

 
Sélectionnez
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.
Exemple
Sélectionnez
1.
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 :

Exemple
Sélectionnez
1.
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.

 
Sélectionnez
TYPE[, attributs] :: v1 =c1[, ..., vi =ci, ...]

vi est le nom de la variable à initialiser et ci sa valeur.

Exemple
Sélectionnez
1.
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 :

 
Sélectionnez
TYPE, PARAMETER :: n1 =c1[, ..., ni =ci, ...]

ni est le nom donné à une constante et ci sa valeur.

La notation suivante est aussi utilisable :

 
Sélectionnez
PARAMETER ( n1 =c1[, ..., ni =ci, ...] )
Exemple
Sélectionnez
1.
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.
Syntaxe générale
Sélectionnez
EQUIVALENCE (v1, v2)[, ..., (vi−1, vi), ...]

où les vi sont des scalaires (variables simples ou éléments de tableaux).

Exemple-1
Sélectionnez
1.
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 :

 
Sélectionnez
|--------cmplx(1)-------|--------cmplx(2)-------|
|-----------|-----------|-----------|-----------|
|--temp(1)--|--temp(2)--|--temp(3)--|--temp(4)--|
Exemple-2
Sélectionnez
1.
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 :

 
Sélectionnez
| 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)

précédentsommairesuivant

Copyright © 2006 Patrick Corde et Anne Fouilloux. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.