Vous êtes sur la page 1sur 19

Fortran

par

Patrice LIGNELET

H 2 120

12 - 1993

cole Nationale Suprieure dlectronique et de ses Applications (ENSEA)


(division des Administrateurs)
Animateur du groupe Fortran lAFNOR

1.
1.1
1.2
1.3

Structure gnrale du langage.............................................................


Exemple de programme Fortran 90 ...........................................................
Architecture des programmes....................................................................
Structure lexicale .........................................................................................

2.
2.1
2.2
2.3
2.4

Types et oprateurs.................................................................................
Types scalaires prdfinis...........................................................................
Types structures (ou drivs ) ...............................................................
Tableaux .......................................................................................................
Objets points ..............................................................................................

3
3
4
5
5

3.
3.1
3.2
3.3

Instructions de dclaration ...................................................................


Typage des objets........................................................................................
Les deux syntaxes orthogonales de dclaration.......................................
Liste des attributs de dclaration ...............................................................

5
5
6
6

4.
4.1
4.2
4.3

Charpente algorithmique des programmes......................................


Expressions ..................................................................................................
Instructions simples ....................................................................................
Schmas algorithmiques ............................................................................

6
6
7
7

5.
5.1
5.2
5.3
5.4
5.5
5.6

Procdures .................................................................................................
Dfinitions ....................................................................................................
Classification des procdures par localisation..........................................
Paramtres et modes de transmission ......................................................
Caractristiques spcifiques aux fonctions ...............................................
Blocs dinterface et applications.................................................................
Macrofonctions ............................................................................................

10
10
10
10
11
11
11

6.
6.1
6.2
6.3

Modularit..................................................................................................
Prsentation .................................................................................................
Entits visibles et prives............................................................................
Importation des ressources dun module..................................................

11
11
12
12

7.
7.1
7.2
7.3
7.4

Entres-sorties ..........................................................................................
Fichiers .........................................................................................................
Ordres gnraux ..........................................................................................
Instructions de lecture-criture...................................................................
Les fichiers de texte.....................................................................................

13
13
13
13
14

8.
8.1
8.2
8.3
8.4

Liste des procdures prdfinies.........................................................


Fonctions distributives ................................................................................
Fonctions-attributs.......................................................................................
Fonctions de transformation ......................................................................
Sous-programmes prdfinis.....................................................................

15
15
16
16
16

9.

Conclusion .................................................................................................

17

Pour en savoir plus...........................................................................................

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 - 2

Doc. H 2 120

H 2 120 1

FORTRAN _____________________________________________________________________________________________________________________________

ortran est le plus ancien (1954) langage de programmation volu en activit.


Il est trs utilis pour les applications requrant des calculs numriques
intensifs, domaine o on ne lui connat pas de concurrent srieux.
Si la norme Fortran 77 a permis des progrs sensibles dans lart de (bien)
programmer avec Fortran, son absence de rformes profondes le laissait techniquement dsarm pour affronter la dernire dcennie du sicle. Conscient de
ce danger dobsolescence, le groupe dexperts charg de cette nouvelle rvision
lui a intgr quelques-uns des concepts actuels les plus puissants, comme la
modularit (dj prsente en Ada et Pascal tendu par exemple) et le calcul
vectoriel.
Parmi les autres innovations majeures, on peut citer le paramtrage des types
numriques, les types cartsiens, les pointeurs, la rcursivit, et, le plus visible,
une syntaxe libre du zonage rigide vestige des cartes perfores. En outre, grce
au concept de bloc interface coupl aux modules, elle fiabilise lexploitation du
considrable investissement logiciel reprsent par les importantes bibliothques de sous-programmes disponibles.
Fortran 90 reste entirement compatible avec la version antrieure (Fortran 77)
du langage, ce qui permet dexploiter lexistant, mais induit la possibilit de deux
styles dcriture des programmes. Toutefois, la nouvelle norme sinsre dans un
processus dvolution long terme du langage, en dgageant un certain nombre
de caractristiques reconnues comme surannes, et susceptibles de disparatre
lors de la prochaine rvision de la norme ; le langage nest donc pas vou crotre
indfiniment.
Ainsi dynamis par ces apports novateurs, Fortran 90 demeure plus que jamais
irremplaable pour lensemble de la programmation numrique, scientifique et
technique. Ds lors, on doit galement souhaiter quil reprenne toute sa place
dans la formation initiale de nos futurs ingnieurs et techniciens.

1. Structure gnrale
du langage
Le programme de la figure 1 dtermine les principales statistiques
sur un chantillon dune variable qualitative (par exemple, une
couleur). Il illustre essentiellement les aspects vectoriels de
Fortran 90, notamment les constructeurs de tableaux, la transmission en paramtre par descripteur, des fonctions prdfinies varies
(telles MAXLOC ou COUNT), etc. Il prsente aussi le MODULE
comme outil dexploitation fiable dun service logiciel (ici la procdure Q_STATS).

Procdures externes et BLOKC DATA sont des vestiges de lancien


style Fortran : le module devrait dsormais constituer lunique outil
de dcomposition, exportant diverses ressources logicielles, dont
des procdures (figure 1). Un programme Fortran 90 typique
comportera donc un programme principal, et n (  0 ) modules,
rpartis en un ou plusieurs fichiers-sources (le programme principal
tant alors la dernire unit de compilation du dernier fichier-source
compil).
Un programme principal a la structure suivante :
[PROGRAM identificateur]
[dclarations]
instructions excutables
[CONTAINS
procdures internes]
END [PROGRAM [identificateur]]

1.2 Architecture des programmes

1.3 Structure lexicale

Fortran appartient la famille des langages impratifs ; il est (en


principe) compil. Un programme Fortran se prsente matriellement sous la forme dun ou plusieurs fichiers de texte source,
chacun comportant un certain nombre de composants de lapplication, ou units de compilation : modules, procdures externes, blocs
de dfinition de donnes (BLOCK DATA), ainsi quun et un seul
programme principal. La seule contrainte dordre respecter est que
tout module soit compil avant son utilisation par une autre unit.

Fortran scrit laide dun jeu de caractres qui est un


sous-ensemble de lalphabet ASCII (American Standard Code for
Information Interchange ) :
les caractres alphanumriques, qui comprennent les 26 lettres (majuscules et minuscules tant quivalentes, sauf dans un
libell ou chane de caractres), les 10 chiffres dcimaux et le blanc
soulign (_) ;
19 caractres spciaux ou de ponctuation, qui sont, outre
lespace typographique :

1.1 Exemple de programme Fortran 90

Le programme excutable est cr par ldition des liens, comme


dans tout langage compil, partir du programme principal et des
units appeles, en utilisant sil y a lieu dautres composants
antrieurement compils et rangs en bibliothque.

H 2 120 2

= + * / () , . : ! % & ; < >

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

Ces caractres servent construire les lments lexicaux, qui sont


les plus petites entits interprtables des programmes. On distingue
les mots-cls, prdfinis (qui ne sont pas rservs en Fortran), en
nombre assez lev (de lordre de 75) ; ils dfinissent les caractristiques de donnes (ex : INTEGER, INTENT, etc.), prcisent le rle
dune instruction (ex : IF, CALL), etc.
Les identificateurs sont les noms choisis par le programmeur pour
dsigner ses propres entits (ex. STATS_QUALITATIVES, Q_STATS,
LISTEFF, etc.). Un identificateur est form dune suite de 1 31 caractres alphanumriques dont le premier est une lettre. Certains identificateurs sont aussi prdfinis : ils dsignent des procdures
Fortran (ex : SIZE, MAXLOC, DATE_AND_TIME, etc.).
Les lments lexicaux comprennent encore les oprateurs, et les
constantes (numriques, logiques ou chanes de caractre).
Linstruction est la phrase lmentaire dun programme ; elle
regroupe diverses entits lexicales. Toute unit de compilation
comporte des instructions de dclaration, et des instructions excutables. En Fortran 90, il y a une relative indpendance entre
linstruction et la ligne de texte qui lui sert de support dans un
fichier source. Plusieurs instructions courtes peuvent apparatre
sur une mme ligne, spares par un point-virgule. Une instruction
peut scrire sur plusieurs lignes, en terminant toutes les lignes
(sauf la dernire) par un caractre &. Le cas chant, la coupure
peut intervenir au milieu dune entit lexicale ; on doit alors crire
un second & juste avant le premier caractre de lentit sur la ligne
suite :
PRINT *, Ce message est peut-et&
&re un peu long...
Les commentaires sont de type fin de ligne (comme en Ada),
introduits par le caractre point dexclamation : le commentaire
stend depuis le ! jusqu la fin de la ligne. Ex : figure 1, lignes 1
11, 21, etc. Un commentaire peut apparatre derrire un & la fin
dune ligne initiale dune instruction rpartie sur deux ou plusieurs
lignes.
Lancien style dcriture du texte source (avec dcoupage des
lignes en zones) reste utilisable, avec des amliorations hrites du
nouveau style. On note que, dans ce nouveau style, lespace est sparateur, ce qui rend lanalyse lexicale des programmes plus efficace.
Le compilateur doit bien sr tre averti du style dcriture utilis
dans un fichier-source. Cela se fera par une option de compilation,
un suffixe spcifique dans le nom du fichier, etc.

2. Types et oprateurs
Tout programme manipule de linformation, qui peut revtir un
certain nombre de formes simples prdfinies dans un langage, ou
tre construite par composition de telles formes simples : ce sont
les types de donnes, caractriss pour lensemble des valeurs
possibles, et les oprateurs dfinis sur ces valeurs.

2.1 Types scalaires prdfinis


Ils sont au nombre de 5 en Fortran : entier, rel, complexe,
logique et caractre. Ils sont tous paramtrables par un paramtre
de type (KIND) pour en dfinir diverses variantes ou sous-types :
nom_de_type (KIND = paramtre de sous-type)
Figure 1 Exemple de programme vectoriel

Il existe dans chaque cas un sous-type privilgi, correspondant


la valeur par dfaut du paramtre KIND pour ce type, et dsignant
le type du Fortran 77 (pour des raisons de compatibilit ascendante).

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 3

FORTRAN _____________________________________________________________________________________________________________________________

Rciproquement, le paramtre de type dun objet x sobtient par


la fonction prdfinie KIND (x). Lensemble des paramtres KIND
disponibles dpend du compilateur.
Le sous-type dune constante scrit en suffixant sa valeur par le
paramtre KIND voulu (sous forme dune constante) ; ex :
347_INT_SHORT avec la dclaration pralable :
Exemple
PARAMETER (INT_SHORT = 2)
Le type entier (INTEGER) est un intervalle fini de lensemble
mathmatique des entiers relatifs. On peut choisir de manire
portable le sous-type voulu en spcifiant le nombre minimal r de
chiffres dcimaux requis, en prenant comme valeur du paramtre
KIND celle de la fonction prdfinie :
SELECTED_INT_KIND (r)
Rciproquement, la fonction prdfinie RANGE (x) fournit le
nombre maximal de chiffres dcimaux autoriss par le sous-type
(entier) de lobjet x.
Le type rel (REAL) est une approximation de lensemble mathmatique des rels, forme de nombres rationnels (y compris 0) de la
forme :
m be
o m (la mantisse) et e (lexposant) sont des entiers relatifs, et b = 2
ou 16 en pratique selon larchitecture de la virgule flottante
disponible.
On peut choisir de manire portable un sous-type rel en spcifiant
la prcision p souhaite, et /ou lintervalle des valeurs reprsentables
dsign par r (pour 10 r 10 r en valeur absolue), hors 0, en prenant
comme valeur du paramtre KIND celle de la fonction prdfinie :
SELECTED_REAL_KIND (p, r)
Lancien type DOUBLE PRCISION correspond la nouvelle
spcification :
REAL (Kind = KIND (0D0))
o lobjet 0D0 reprsente le rel zro dans ce sous-type
(= 0 10 0)
Le type complexe (COMPLEX) correspond au produit cartsien de
deux types rels identiques : les composantes relle et imaginaire.
Un sous-type se dfinit donc par le mme paramtre de type que
pour les rels. Les constantes complexes se dnotent par une paire
de nombres entre parenthses ; exemple : (0 , 1.0).
Les trois types numriques partagent le mme ensemble doprateurs, dnots classiquement, par ordre de priorit algbrique
croissante :
+ et (unaires ou binaires)
* et /
* * (exponentiation)
Ces oprateurs polymorphes agissent pour chaque type selon ses
rgles propres ; cest ainsi que par exemple 8 / 5 donne lentier 1
(troncature vers zro).
Le type logique ou boolien (LOGICAL) correspond aux deux
valeurs de vrit de la logique binaire, dnotes .FALSE. et .TRUE. .
Le paramtrage de ce type correspond seulement des encombrements restreints, et dpend du compilateur. Par dfaut, lencombrement est dun mot numrique (comme pour les types par dfaut
INTEGER et REAL, le type COMPLEX correspondant deux mots).
Les oprateurs logiques sont les suivants, par ordre de priorit
croissante :
.EQV. et .NEQV. (quivalence et ou exclusif respectivement)
.OR.
.AND.
.NOT.

H 2 120 4

Le type caractre (CHARACTER) correspond au jeu de caractres


disponibles sur la machine cible (celle sur laquelle le programme
sexcute). Le paramtre de type KIND pour les caractres est une exigence asiatique ; il peut aussi donner accs des jeux de caractres
mathmatiques, chimiques, musicaux...
En fait, ce type correspond en Fortran aux chanes de caractres :
il admet donc un second paramtre : LEN, qui dfinit la longueur
de la chane (vide le cas chant) ; un caractre est une chane de
longueur 1 (valeur par dfaut du paramtre LEN).
Les constantes chanes sencadrent au choix par des guillemets
() ou des apostrophes. Le type caractre admet un oprateur
interne : la concatnation, note //.
On peut accder une sous-chane dune chane par la notation :
chane (a : b) ; exemple : 0123456789 (N : N). Si a est omis, il
vaut 1 ; si b est omis, cest la longueur de la chane.
Par ailleurs, Fortran dispose doprateurs de comparaison, dont
le rsultat est du type logique par dfaut, admettant deux noms
distincts :
<
<=
==
/=
>=
>
.LT. .LE. .EQ. .NE. .GE. .GT.
Ils sont applicables deux oprandes dun type scalaire quelconque,
sauf complexe (qui nadmet que == et /=) et logique.

2.2 Types structures (ou drivs )


Cest un type construit correspondant un produit cartsien
densembles (champs) htrognes. Il est considrs comme
scalaire par opposition aux tableaux, bien quil puisse contenir des
champs tableaux. Ce type sappelle article en Pascal, et enregistrement en Cobol. Le nom de type driv adopt par la norme est regrettable, car il reprend celui dun concept du langage Ada qui na aucun
rapport.
Un type structure se dfinit par une numration de champs,
chacun ayant un nom particulier et ses propres caractristiques.
Exemple
TYPE client
INTEGER CODE
CHARACTER (LEN = 50) nom
CHARACTER (30)
ville
INTEGER code-postal,
solde
END TYPE client
Un objet de ce type se dclare ainsi :
TYPE (client) quidam

&

En Fortran 90, les structures ne sont pas paramtrables, quant


leur forme (comme en Pascal, en C ou en Ada), mais on peut dimensionner un champ POINTER sur tableau ( 2.4). On peut obliger le
compilateur implmenter les champs dans lordre spcifi en
dotant le type de lattribut SEQUENCE :
TYPE client ; SEQUENCE
INTEGER code, etc.
Laccs un champ dun objet structure se dnote laide du
caractre %.
Exemple
quidam % nom
Une valeur structure se construit en numrant les valeurs des
champs dans lordre.
Exemple
quidam = CLIENT (1, Dupont, Paris, 75001, 0)

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

2.3 Tableaux
Un tableau est une collection de donnes homognes. Cette
homognit a permis de btir des architectures matrielles massivement parallles, dites vectorielles, pour appliquer simultanment une mme opration tout ou partie dun tableau. Fortran 90
sadapte ce progrs technologique, en traitant le tableau comme
un objet de premire classe (comme en PL /1), escort dune
panoplie doutils favorisant le calcul vectoriel.
En Fortran, la structure de tableau est une proprit de lobjet (et
non un type) ; elle se dfinit par les caractristiques suivantes :
son rang, ou nombre de dimensions (  7 en Fortran) ; par
convention, tout scalaire est de rang 0 ;
chaque dimension possde un intervalle de dfinition, donn
par deux entiers, et une tendue, qui est la longueur de cet intervalle
(bornes comprises). En Fortran 90, une tendue peut tre nulle, le
tableau tant alors vide ;
la taille dun tableau est le produit de ses tendues. Un
tableau vide est de taille 0 ;
son profil est le vecteur (tableau de rang 1) de ses tendues.
Le profil dun scalaire est le vecteur vide. Deux tableaux sont dits
compatibles sils ont le mme profil ; par convention, un scalaire est
compatible avec tout tableau.
Fortran 90 permet de dfinir des tableaux profil explicite
(constant ou calculable), et profil diffr (tableaux dynamiques).
Dans le cas dun profil explicite, la structure du tableau est
indique dans un attribut de dimension par la liste des intervalles
de dfinition de ses diverses dimensions :
(i 1 : s 1 , i 2 : s 2 , ... , i n : s n )

n7

avec

la borne infrieure (in :) pouvant tre omise lorsquelle vaut 1.


Exemple
PARAMETER
(N = 5, M = 10)
DIMENSION T3 (N , 0 : M , N + M)
Un tableau profil diffr est dfini dynamiquement ; son attribut
de dimension nen prcise que le rang, par une liste de caractres
: . Il reoit en outre lattribut ALLOCATABLE ( rapprocher de
CONTROLLED en PL /1).
Exemple
REAL, ALLOCATABLE : : MAT (: , :)

! rang = 2

Dans le cours du calcul, une fois les dimensions dtermines, le


tableau est cr avec les dimensions voulues par une instruction ALLOCATE ( 4.1).
Laccs un lment de tableau sopre laide dune liste
dindices (expressions entires quelconques) en nombre gal au
rang du tableau.
Exemples
MAT (i , j + k)
ou

T3 (1 , i * j , k /i + 2)

On peut aussi accder un sous-tableau, de deux manires :


avec une notation par triplet, correspondant une
pseudo-boucle qui dnote une suite dindices en progression arithmtique.
Exemple
T3 (2 : N , M : 1 : 1 , 1 : M : 2)
La notation a : b : r reprsente la progression de premier terme a
et de raison r extraite de lintervalle a : b. La raison par dfaut est 1
(quivalent la notion de tranche en Ada). Des notations simplifies
existent, pour dsigner tout le dbut de lintervalle de dfinition dans
une dimension (: b), toute la fin (: a), ou lintervalle en entier (:) ;
avec un indice vectoriel.

Exemple
INTEGER, DIMENSION (4) : : INDEX = (/ 2, 0, 1, 10/)
DIMENSION VECT (0 : 20)
alors VECT (INDEX) dsigne le vecteur :
(/ Vect (2), Vect (0), Vect (1), Vect (10) /)
Un indice vectoriel peut contenir des valeurs en double, avec
certaines limitations quant leur emploi, lorsque lopration entrane
une smantique ambigu.

2.4 Objets points


Un objet point est cr dynamiquement par le programmeur, et
reste sous son contrle. Un tel objet se dfinit par son modle
(type + rang le cas chant), et par une variable (POINTER), qui
recevra ladresse de lobjet une fois cr.
Exemple
INTEGER, POINTER : : P
! pointeur vers un objet entier
TYPE maillon
! lment dune liste chane
INTEGER valeur
TYPE (maillon), POINTER : : succ
END TYPE maillon
TYPE (maillon), POINTER : : premier, temp
REAL, POINTER : : PVECT (:) ! pointeur vers un vecteur
! rel
Fortran 90 laisse une certaine ambigut dnotationnelle :
lidentificateur dclar avec lattribut POINTER dsigne tantt le
pointeur, tantt lobjet point, selon le contexte syntaxique ; ainsi :
temp = maillon (10, premier)
temp => premier

! objet point
! pointeur

De mme, le champ Succ du maillon dadresse Premier se dnote


( la manire dAda) : Premier % Succ.
La constante (valeur symbolique) adresse note NIL en Pascal et
NULL en PL /1 ou Ada sobtient par une instruction sur pointeur (s)
en Fortran 90 :
NULLIFY (temp)
! temp : = NIL en Pascal.
La cration dynamique dun objet point se ralise par le mme
ordre ALLOCATE que pour les tableaux profil diffr.
Exemple
ALLOCATE (temp, pvect (0 : 10))
Fortran 90 permet encore de redfinir dynamiquement une
variable statique ou automatique, voire un paramtre, qui doit alors
recevoir lattribut TARGET dans sa dclaration (pour permettre au
compilateur doptimiser la gestion des autres variables).
Exemple
TARGET : : CIBLE (10, 10)
Un pointeur est associ dynamiquement une cible par une
affectation dadresse (=> ; 4.2.1).

3. Instructions de dclaration
3.1 Typage des objets
Il existe deux sortes dobjets (ou donnes) : les constantes, et les
variables. Les variables se dsignent toujours par un identificateur.
Les constantes peuvent aussi le cas chant tre nommes ( 3.2,
attribut PARAMETER). Les objets nomms (constantes et variables)
doivent tre typs en Fortran. Ce typage sopre soit implicitement,

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 5

FORTRAN _____________________________________________________________________________________________________________________________

daprs la lettre initiale du nom de lobjet ; soit explicitement, au


moyen dune dclaration de type de lobjet. Par dfaut, tout objet
nomm non dclar est du type entier si son nom commence par
une lettre de I N, et rel sinon.
Le typage implicite peut tre modifi au moyen dune instruction
de dclaration IMPLICIT associant un ensemble de lettres une
spcification de type. Par dfaut, on a ainsi :
IMPLICIT INTEGER (I-N), REAL (A-H, O-Z)
Au contraire, si lon veut proscrire tout typage par dfaut (pour
des logiciels hautement critiques par exemple), on peut utiliser la
dclaration :
IMPLICIT NONE
Une dclaration IMPLICIT se place en premier lieu dans une unit
de programme (aprs dventuelles dclarations dimportation
USE : 6).

3.2 Les deux syntaxes orthogonales


de dclaration
En Fortran 77, un objet pouvait avoir au plus quatre proprits.
Aussi existait-il une instruction de dclaration spcifique pour
chacune :
une dclaration de type explicite le cas chant ;
PARAMETER pour les constantes nommes ;
DIMENSION pour les tableaux ;
SAVE pour les variables rmanentes (statiques) ;
DATA pour initialiser les variables (incompatible avec PARAMETER).
Fortran 90 distingue une dizaine de proprits (dont certaines
incompatibles). Plutt que dmietter la dclaration dune entit
entre autant dinstructions de dclaration, on peut dsormais, ct
du style prcdent (une dclaration par proprit), regrouper les
proprits dune mme entit dans une dclaration de type explicite.
Ainsi, les deux systmes de dclarations suivants sont quivalents :
1)
LOGICAL BOOL
DIMENSION BOOL (5)
SAVE BOOL
2)
LOGICAL, DIMENSION (5), SAVE : : BOOL
En Fortran 90, une dclaration complte se prsente donc ainsi :
spcification de type [, liste dattributs]
&
: : identificateur [= valeur] {, id [=v]}
o la spcification de type (scalaire) prend lune des formes
indiques au paragraphe 2.1.
Nota : les entits entre crochets sont dun usage facultatif, les entits entre accolades peuvent figurer zro ou plusieurs fois.

3.3 Liste des attributs de dclaration


Lattribut est (ou commence par) un mot-cl dcrivant une
proprit de lobjet. En sus du type, on peut ainsi utiliser :
PARAMETER
pour une constante nomme ;
DIMENSION (....)
pour un tableau ;
SAVE
pour une variable rmanente ;
ALLOCATABLE
pour un tableau profil diffr ;
POINTER
pour une variable accessible par pointeur ;
TARGET
pour une variable redfinissable par pointeur ;
INTENT (....)
pour un paramtre de procdure ;
OPTIONAL

PUBLIC / PRIVATE

H 2 120 6

EXTERNAL / INTRINSIC pour une procdure transmise


en paramtre
Remarque : lattribut DIMENSION peut tre remplac par un
attribut de dimension ( 2.3) plac la suite du nom de lobjet.
Exemple
LOGICAL, SAVE : : BOOL (5)

4. Charpente algorithmique
des programmes
Toute unit procdurale (programme principal ou procdure)
comprend deux parties : une section dclarant les entits locales
lunit, et une squence dinstructions excutables exprimant la suite
des calculs mener pour rsoudre un problme donn. Ces instructions comprennent les instructions simples, et des instructions
composes traduisant la structure algorithmique de lunit.
Ces diverses instructions font intervenir des expressions, au
sens mathmatique du terme, que lon prsente en premier lieu.

4.1 Expressions
Une expression exprime un calcul, et possde une valeur, rsultat
de ce calcul lorsque lexpression est value. Elle prend la forme
dune constante, dune variable (la valeur tant celle de la variable
au moment de lvaluation), dun sous-objet (dune constante ou
dune variable tableau, structure ou chane de caractres), dun
constructeur de tableau ou de structure ( 2.2 et 2.3), dun appel
de fonction (prdfinie ou non), dune opration portant sur des
facteurs qui sont des expressions, ou dune expression entre
parenthses.
Dans le cas dune expression combinant plusieurs oprateurs,
lordre dvaluation repose sur des rgles de priorit entre oprateurs, comme en algbre :
b
a + b / c d est ainsi valu comme a + ----- d
c
Nous avons donn les priorits relatives des oprateurs pour
chaque type de donnes ( 2.1). Ces catgories doprateurs sont
eux-mmes hirarchiss ainsi, selon lordre croissant des priorits :
1) oprateurs logiques
2) concatnation
3) oprateurs de comparaison
4) oprateurs arithmtiques.
Lorsquune opration arithmtique ou de comparaison porte
sur 2 facteurs de types numriques diffrents, il y a conversion de
lun des facteurs en une valeur aussi semblable que possible du type
de lautre facteur, selon lordre hirarchique croissant des types :
1) entier

2) rel

3) complexe

Exemple : (0 , 1.0) + 2 donne le complexe (2.0 , 3.0).


Lorsquune opration porte sur deux facteurs de mme type mais
de paramtres KIND diffrents, le facteur du sous-type le moins
exigeant est converti en une valeur de lautre sous-type.
Exemple : 4.1 + 3.2 d 0 donne le rel 7.3 d 0 en double prcision.

pour une entit dclare dans un module ;

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

Enfin, si les deux facteurs sont scalaires, le rsultat de lopration


est scalaire. Si lun est un tableau et lautre un scalaire, le rsultat
est un tableau de mme profil que le facteur tableau.
Exemple
(/ (I , I = 1, 3) / ) + 2 donne le vecteur (/ 3, 4, 5 / )
Si les deux facteurs sont des tableaux, ils doivent tre
compatibles ( 2.3), le rsultat tant un tableau du mme profil.
Exemple
INTEGER, PARAMETER : : INDEX (0 : 3) = (/ 1, 0, 2, 4 /)
alors :
INDEX (0 : 2) + INDEX (1 : 3) donne le vecteur (/1, 2, 6 /)

4.2.2 Appel de sous-programme


Les sous-programmes, prdfinis ou non, peuvent tre considrs
du point de vue de lutilisateur comme des super-instructions
spcialises. En Fortran, on les appelle laide dune instruction
CALL (comme en PL /1) :
CALL < nom du sous-programme > [(liste des arguments dappel)]
Exemple : figure 1, lignes 52 et 55.
Les traitements prdfinis qui, dans dautres langages comme
Pascal ou Ada, se ralisent par lappel de sous-programmes, se
traduisent en Fortran par des instructions spcialises
(entres-sorties notamment, 7).

Il existe deux catgories dexpressions utilisables dans les dclarations, et soumises certaines restrictions spcifiques :

4.2.3 Instruction de branchement GOTO

les expressions constantes dinitialisation, utilisables pour


initialiser les variables dans une dclaration de type, ou dfinir les
constantes nommes.

Lenrichissement algorithmique de Fortran 90 devrait limiter


considrablement son emploi. Elle scrit :

Exemple
PARAMETER (MAXI = 50, IRESTE = MOD (MAXI, 6))
les expressions de spcification (scalaires de type entier),
dfinissant les bornes des tableaux ou les longueurs des chanes
automatiques.
Exemple
SUBROUTINE SSP (N, C)
CHARACTER (LEN = *) C ; DIMENSION IV (N + LEN (C))

4.2 Instructions simples

GOTO tiquette
o ltiquette est un entier positif prfixant linstruction vise.

4.2.4 Instructions de retour


Linstruction (facultative) RETURN dans une procdure permet
de quitter cette procdure pour revenir au point dappel.
Linstruction STOP arrte lexcution du programme et redonne
la main au systme dexploitation. Le mot-cl STOP est suivi facultativement dune chane de caractres, alors affiche par le systme.

4.2.1 Affectation

4.2.5 Instructions pour lallocation dynamique

Laffectation donne une nouvelle valeur tout ou partie dune


variable (scalaire ou tableau). Il y a deux sortes daffectations en
Fortran 90.

Fortran 90 introduit trois instructions pour lallocation dynamique :


NULLIFY (liste de (sous-)variables pointeurs) ! ( 2.4)
ALLOCATE (liste de (sous-)objets [, STAT = variable scalaire
entire])
DEALLOCATE (liste de (sous-)objets [, STAT = variable
scalaire entire])
Ces deux dernires instructions permettent de grer lexistence
de tableaux ALLOCATABLE, comme dobjets points (dans ce dernier
cas, elles correspondent des procdures prdfinies en Pascal :
new (pseudo-fonction en Ada), et dispose respectivement).

Laffectation de valeur classique, prsente dans tous les langages


impratifs :
(sous-)variable = expression
o la sous-variable est, le cas chant, une sous-chane, un champ
de structure, ou un sous-tableau. Lexpression est dabord value,
puis sa valeur donne la (sous-)variable, qui devient ainsi dfinie
le cas chant. Expression et variable doivent tre du mme type (pas
obligatoirement du mme sous-type sauf pour les caractres), ou
tous deux numriques ; dans ce dernier cas, la valeur de lexpression
est convertie avant affectation si les types diffrent.
Si la (sous-)variable est scalaire, lexpression doit ltre aussi ; si
cest un tableau, lexpression doit tre compatible ( 2.3).
Laffectation dadresse, qui scrit :
(sous-)variable pointeur => cible
o la cible peut tre une valeur dadresse (pointeur, ou fonction
rsultat POINTER), ou un (sous-)objet ayant lattribut TARGET.
Exemples

( 2.4) :
PREMIER => TEMP
PVECT
=> CIBLE (: , 1)

Exemples
ALLOCATE (MAT (0 : N **2, N-1 : N+M) )
DEALLOCATE (P, MAT, PVECT)
Dans les deux cas, la variable scalaire optionnelle reoit la valeur 0
si tout sest bien pass, et une valeur positive sinon.
En dehors de celles-ci, il existe dautres instructions simples
spcialises pour les entres-sorties ( 7), ou lies aux structures
algorithmiques ( 4.3.2).

4.3 Schmas algorithmiques


La programmation structure repose sur trois schmas de base :
lenchanement ou squence, le choix et litration ou boucle.
Tardivement civiliss , les schmas algorithmiques du Fortran 90
disposent dune syntaxe parenthse qui, linstar dAda, les
dispensent de recourir occasionnellement une forme syntaxique
spcifique pour leur associer une squence (comme DO ; .... END ;
en PL /1, BEGIN .... END en Pascal, ou {....} en C).

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 7

FORTRAN _____________________________________________________________________________________________________________________________

De manire gnrale, Fortran 90 unifie la syntaxe des schmas


algorithmiques sur le modle suivant :
[identificateur:] mot-cl [commande]
corps du schma
END mot-cl [identificateur]
Lidentificateur optionnel sert de repre syntaxique, permettant au
compilateur de vrifier lappariement, et amliorant la lisibilit dans
le cas de schmas embots.
Remarque : lespace entre END et le mot-cl est facultatif.

4.3.1 Schmas dcisionnels


Un tel schma excute une squence et une seule (au plus) parmi
un ensemble de squences places en exclusion mutuelle par le
schma.
Lalternative, ou schma de choix logique, scrit :
IF (expression scalaire logique) THEN
squence dinstructions excutables
{ELSE IF (expression logique) THEN
squence}
[ELSE
squence]
ENDIF
Les expressions sont values (dans lordre), et ds que lune
svalue vrai, la squence associe est seule excute ; si les
expressions ont toutes la valeur faux, la dernire squence (derrire
ELSE) est excute si elle est prsente.
Exemple : figure 1, lignes 22 32.
Ce schma admet une forme simplifie (appele IF logique) :
IF (expression logique) instruction simple excutable
Fortran 90 introduit une forme particulire de lalternative pour
conditionner des affectations de tableaux :
WHERE (expression de tableau logique)
squence daffectations de tableaux
[ELSEWHERE
squence daffectations de tableaux]
END WHERE
avec sa forme simplifie :
WHERE (expression de tableau) affectation de tableau
Tous les tableaux figurant dans un mme schma doivent tre
compatibles. Lexpression ou filtre est dabord value. Dans la
squence qui suit WHERE, laffectation et lvaluation ont lieu sur
les seuls lments de tableau correspondant une valeur vrai
du filtre, et faux pour la squence qui suit ELSEWHERE sil y a lieu.
Exemple
WHERE (MAT > 0.0) MAT = LOG (MAT) / MAT
Le schma de choix proprement dit (choix discret) scrit :
SELECT CASE (expression scalaire dun type discret)
CASE (slecteur1)
squence1
{CASE (slecteur)
squence}
[CASE DEFAULT
squence]
END SELECT

H 2 120 8

Lexpression (critre du choix) et les slecteurs sont dun mme


type discret (entier, chane de caractres, voire logique). Chaque
slecteur est une liste de valeurs simples et /ou dintervalles ferms
ou ouverts de valeurs, chaque valeur tant une expression constante
dinitialisation ( 3.1). Lintersection de deux ensembles de valeurs
correspondant deux slecteurs doit tre vide. Est excute lunique
(au plus) squence dont le slecteur contient la valeur du critre ;
si aucun ne la contient, la squence DEFAULT est excute si elle
est prsente.
Exemple : (schma de choix numrique ternaire, ancien IF
arithmtique) :
SELECT CASE (critre)
CASE (: 1) ; PRINT * , critre < 0
CASE (0)
; PRINT * , critre nul
CASE (+ 1 :) ; PRINT * , critre > 0
END SELECT

4.3.2 Boucles DO
Les boucles permettent de rpter volont lexcution dune
squence. En Fortran 90, leur criture subit un profond rajeunissement syntaxique. Elles enrichissent en outre de schmas algorithmiques absents du langage antrieurement.
Il y a deux sortes de boucles DO en Fortran 90 :
Boucle de parcours :
DO variable indice = a, b [, r]
squence dinstructions excutables
END DO
donne successivement lindice les valeurs de la progression arithmtique de premier terme a et de raison r extraite de lintervalle
[a, b] ( 2.3, notation par triplet), et excute la squence pour chaque
valeur (0 fois si la progression est vide).
Exemple
HARMO
= 0.0
DO I
= 100, 1, 1
HARMO = HARMO + 1.0 / I
END DO
a, b et r peuvent tre des expressions scalaires quelconques de
type entier. Lindice doit aussi tre scalaire et de type entier ; aprs
sortie normale de la boucle, il est gal la premire valeur de la
progression extrieure lintervalle (soit 0 dans lexemple ci-dessus),
comme en PL /1 ou en C.
Boucles de recherche :
DO WHILE (expression scalaire logique)
squence dinstructions excutables
END DO
qui excute la squence tant que lexpression vaut vrai.
Exemple : figure 2, lignes 78-85.
Le test darrt dune boucle de recherche WHILE est effectu au
dbut de chaque itration. Fortran 90 permet de le placer en un point
quelconque du corps de la boucle grce au schma (dit boucle
n + 1 /2 de Dijkstra) :
DO
squence1
IF (expression logique test darrt) EXIT
squence2
END DO
La boucle WHILE correspond une squence1 vide, la boucle
repeat....until du Pascal (ou do....while de C) une squence2 vide.

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

Figure 2 Exemple de module exportant un type abstrait

Plus gnralement, toute boucle peut contenir une instruction


EXIT, ou CYCLE, provoquant les effets suivants :
EXIT (instruction de mme nom en Ada, et break en C) permet
de quitter la boucle ;
CYCLE (continue en C) permet de passer litration suivante.

Ces deux instructions oprent sur la boucle la plus interne les


contenant ; en cas de boucles embotes elles doivent mentionner
lidentifcateur-repre prfixant la boucle concerne si ce nest pas
la plus interne.

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 9

FORTRAN _____________________________________________________________________________________________________________________________

5. Procdures
5.1 Dfinitions
Les procdures (ou sous-programmes selon les langages, en Ada
par exemple) sont dfinies dans larticle Langages de programmation. Introduction [H 2 000]. Elles concourent dcouper une application en units rduites, plus facilement comprhensibles, et
accroissent de ce fait sa maintenabilit.
Une procdure est comparable un programme principal, tant au
plan de sa logique dexcution, que de sa structure syntaxique. La
diffrence majeure est que le programme est lanc par une
commande du systme dexploitation, tandis quune procdure
sexcute par appel depuis une instruction Fortran.
Il y a deux catgories syntaxiques de procdures en Fortran :
les sous-programmes (SUBROUTINE), qui dfinissent une
action, et qui sont appels par une instruction CALL ( 4.2.2) ; ils
correspondent aux procdures de Pascal ou Ada, et aux fonctions
de type void en C ;
les fonctions (FUNCTION), qui calculent une valeur scalaire ou
tableau (procdure .... returns .... en PL /1), et dont lappel se place
dans une expression.
Une procdure admet un nombre fixe (ventuellement nul) de
paramtres (ou arguments formels) permettant un change
dinformation avec lunit appelante.
La figure 1 montre un exemple de sous-programme (Q_STATS,
lignes 16-39), la figure 2 dautres exemples de sous-programmes
et un de fonction (L_VIDE, lignes 28-33).
En Fortran 90, une procdure peut en contenir dautres ( 5.2). Les
procdures peuvent tre optionnellement rcursives : leur entte
doit alors tre prfix du mot-cl RECURSIVE (comme en PL /1).
Fortran offre en outre un grand nombre de procdures prdfinies
(plus dune centaine) ( 8).

5.2 Classification des procdures


par localisation
Il existe trois catgories de procdures selon leur localisation :
les procdures externes (les seules existant en Fortran 77),
formant chacune une unit de compilation ;
les procdures de module ( 6) ;
les procdures internes une autre procdure (leur hte), et
qui ne peuvent pas elles-mme contenir de procdure interne
(contrairement aux langages structure de bloc comme PL /1, Pascal
ou Ada), ni tre transmises en argument.
Les procdures externes sont les composants actuels des bibliothques Fortran. Mais, avec Fortran 90, elles devraient tre remplaces par des procdures regroupes en modules, garantissant une
relle fiabilit aux appels.
Syntaxiquement les procdures internes sont regroupes la fin
de leur hte, dans une section spcifique introduite par le mot-cl
CONTAINTS (comme pour un module : figure 2).

5.3 Paramtres et modes de transmission


Fortran admet des paramtres de tout type, y compris procduraux. Linstruction dentte de la procdure cite le nom seul des
paramtres : leurs caractristiques et leur mode de transmission se
dclarent dans la section dclarative de la procdure.

H 2 120 10

Fortran 90 reconnat quatre modes de transmission des donnes,


dont trois, analogues ceux du langage Ada, se dclarent
explicitement par lattribut INTENT (cf. les diverses procdures des
figures 1 et 2) :
paramtres dentre, qui sont des constantes locales la
procdure (comme en Ada), et reoivent lattribut INTENT (IN) (cest
le seul mode existant en C) ;
paramtres rsultats, dfinis par la procdure (qui peut les
utiliser ensuite, contrairement Ada), qui reoivent lattribut INTENT
(OUT) ;
les paramtres mixtes ( la fois dentre et rsultats), qui
reoivent lattribut INTENT (INOUT).
Le mode de transmission par dfaut est le quatrime mode, le seul
disponible en Fortran 77 (cest aussi celui de PL /1) ; retenu par ncessit de compatibilit, il noffre aucune garantie. Cest lemploi qui
est fait de paramtre par la procdure qui dicte son mode
logique : sil est modifi, largument dappel (ou argument rel)
doit tre une variable (comme dans les nouveaux modes OUT et
INOUT), sinon ce peut tre une expression quelconque.
Il ny a pas de mode de transmission explicite pour les paramtres
procduraux. On peut dclarer, comme en Pascal, linterface formelle
dune procdure paramtre au moyen dun bloc dinterface ( 5.5 et
figure 2, lignes 67-71).
Largument associ devra tre dclar EXTERNAL dans la procdure dappel (ou INTRINSIC si cet argument est une procdure prdfinie).
Les paramtres dentre ne peuvent avoir, comme en Ada, de
valeur par dfaut explicite, mais Fortran 90 offre un mcanisme plus
gnral : les paramtres optionnels, recevant lattribut OPTIONAL.
La prsence ou non dun argument associ lors dun appel est dtecte par la fonction logique prdfinie PRESENT.
Exemple
SUBROUTINE P (N, X, RES)
INTEGER, INTENT (IN), OPTIONAL : : N
REAL, INTENT (OUT), OPTIONAL : : RES
IF (PRESENT (N)) THEN ; NN = N
ELSE ; NN = 0 ! valeur par dfaut.
ENDIF
IF (PRESENT (RES)) RES = ....
Lors de lappel dune procdure, lassociation des arguments
dappel avec les paramtres utilise les deux procds noncs
dans larticle Langages de programmation. Introduction [H 2 000],
comme en Ada :
positionnel, commun la plupart des langages ;
associatif, utilisant les noms des paramtres comme mots-cls
locaux ; ce dernier procd, outre sa grande lisibilit, est souvent
indispensable lorsque des paramtres optionnels sont omis.
Exemple
CALL P (X = 3.0 * A + B, RES = SORTIE) ! N est omis
Il doit y avoir identit de sous-type entre arguments et paramtres
apparis. Si le paramtre est un tableau, largument doit tre un
tableau de mme rang ; mais le profil du paramtre nest pas
spcifi : il hrite de celui de largument (figure 1, lignes 18 et 20) ;
il en est de mme pour la longueur dun paramtre de type chane
de caractres. Un tableau paramtre ne peut pas recevoir lattribut
ALLOCATABLE.
De faon plus gnrale quen Pascal (niveau 1 de la norme ISO),
on peut imposer des contraintes aux bornes dun paramtre tableau,
ou la longueur dune chane, laide dexpressions de spcification
faisant intervenir dautres paramtres.

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

Exemple
SUBROUTINE SSP (U, X, Y)
DIMENSION U (: , :) ! profil hrit.
REAL, INTENT (IN), DIMENSION (SIZE (U,1)) : : X, Y

5.4 Caractristiques spcifiques


aux fonctions
Le type dune fonction est soit implicite, soit explicite. Sil est explicite, la spcification de son type peut prfixer linstruction FUNCTION
dentte (comme en C ; figure 2, ligne 28), ou figurer dans la section
dclarative. Ce type doit tre connu au point dappel, au besoin par
une dclaration de type du nom de la fonction.
Une fonction renvoie sa valeur par une variable-rsultat qui est
normalement le nom de la fonction (figure 2, ligne 32). Mais on peut
aussi suffixer linstruction FUNCTION par une clause RESULT
(variable) : cest alors cette variable qui doit tre utilise. Ce dernier
procd est obligatoire si la fonction est RECURSIVE, le nom de la
fonction tant alors rserv aux appels rcursifs.
Il faut noter quen Fortran, la variable-rsultat est une vraie
variable : elle doit tre dfinie, mais peut ensuite tre value
(contrairement Pascal).

5.5 Blocs dinterface et applications


Les bibliothques de procdures externes thsaurises jusqu
prsent offrent le grand inconvnient de ne pas permettre au
compilateur de contrler la validit des appels (saufs utiliser un
outil logiciel spcialis). Fortran 90 formalise un procd pour dcrire
linterface formelle dune procdure : le bloc dinterface, que
lutilisateur peut inclure dans son programme dappel (ou mieux,
dans un module : 6).
Exemple : figure 2, lignes 67-71 (pour un paramtre procdural,
mais la forme est identique pour toute procdure).
On y dfinit compltement linterface formelle dune ou plusieurs
procdures, telle quelle figure dans le texte original de la procdure
( de possibles variations syntaxiques prs, telles que les noms des
paramtres, lordre des dclarations, etc.). Ce(s) bloc(s) dinterface
se place(nt) dans la section dclarative de lunit utilisatrice.
Au-del de leur intrt en terme de fiabilit, les blocs dinterfaces
ont de nombreuses applications.
Rendant visible linterface formelle dune procdure externe, un
bloc dinterface permet dutiliser lappel associatif mot-cl ( 5.2).
Dfinition d oprateurs associs des fonctions unaires ou
binaires.
Exemple
INTERFACE OPERATOR (+)
TYPE (ENSEMBLE) FUNCTION UNION (E1, E2)
TYPE (ENSEMBLE), INTENT (IN) : : E1, E2
END
END INTERFACE
qui, pour deux ensembles A et B, permet dappeler la fonction
volont comme UNION (A, B) ou A + B.
Cette facult nest pas, comme en Ada, rserve aux seuls noms
doprateurs prdfinis : lutilisateur peut crer ses propres noms
(identificateurs) crits entre deux points (comme les oprateurs
logiques), par exemple : .IN.

Affectation gnralise
Un sous-programme ayant deux paramtres, dont le premier a le
mode de transmission OUT ou INOUT et le second le mode IN,
peut tre appel par une affectation de valeur au premier
paramtre :
INTERFACE ASSIGNMENT (=)
SUBROUTINE CHAR_TO_NUM (N, CH)
INTENT (OUT) : : N
CHARACTER (LEN = *), INTENT (IN) : : CH
END SUBROUTINE
END INTERFACE
permet toute affectation dune chane de caractres une
variable scalaire entire dtre interprte comme un appel de
CHAR_TO_NUM.
Gnricit
Il faut entendre ce terme la manire de PL /1 : dfinition dun
nom unique pour la mme opration conceptuelle ralise techniquement par diverses procdures selon le contexte ; en Ada, lquivalent est assur par la surcharge, ou homonymie naturelle propre
ce langage (la gnricit y dfinit un modle paramtr la
compilation). Ce concept nest pas nouveau en Fortran : depuis la
norme 77, la plupart des fonctions prdfinies sont gnriques.
Ainsi, pour dfinir une opration gnrique dchange de la
valeur de deux variables :
INTERFACE ECHANGER ! la procdure gnrique
SUBROUTINE I_SWAP (I, J)
INTENT (INOUT) : : I, J
END
SUBROUTINE R_SWAP (U, V)
INTENT (INOUT) : : U, V
END
SUBROUTINE MAT_SWAP (M1, M2)
REAL, INTENT (INOUT), DIMENSION (: , :) : : M1, M2
END
END INTERFACE

5.6 Macrofonctions
la manire de C (#define), Fortran permet de dfinir des
macrofonctions, dintrt purement local aux units procdurales
qui les dfinissent, et destines crire une seule fois une expression de structure donne.
Exemple
IMPLICIT LOGICAL (B)
BON_DIM (I, J, K) = K > 0. AND. K < I + J
BON_TRIANGLE (I, J, K) =
&
Bon_dim (i, j, k) .and. Bon_dim (j, k, i).and. Bon_dim (k, i, j)

6. Modularit
6.1 Prsentation
Le module Fortran correspond la classe introduite par Simula 67,
au package (paquetage) de Ada, et lunit de mme nom en Pascal
tendu et Modula-2. Le concept est prsent dans larticle Langages
de programmation. Introduction [H 2 000] de ce trait. Son adoption
permet Fortran 90 doprer un saut qualitatif fondamental, et rend

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 11

FORTRAN _____________________________________________________________________________________________________________________________

obsoltes de fait un certain nombre de caractristiques antrieures


parmi les plus discutes (tel le COMMON).
Le module est une unit de programme non excutable exportant
un ensemble de ressources logicielles de manire fiable. Compilable
sparment, il constituera la base des futures bibliothques de
composants Fortran 90, remplaant terme (en les intgrant) les procdures externes jusqualors seules disponibles.
On distingue gnralement quatre emplois du module, par ordre
de complexit croissante :
mise disposition dun ensemble de donnes et de types
(largissant le rle traditionnel des COMMON et BLOCK DATA
associs) ;
fonction bibliothque de procdures indpendantes (mais
ayant un certain rapport smantique) ; dans un premier temps, on
crira des modules de cette nature pour exporter des blocs
dinterface ( 5.5) fiabilisant lutilisation des bibliothques Fortran
existantes. Le module STATS_QUALITATIVES de la figure 1
appartient cette catgorie ; il exporte une procdure (Q_STATS),
rendant visible sont interface formelle ;
module objet abstrait grant les transitions dtat dun objet,
partir dun tat initial ; cach lutilisateur, cet objet volue et est
consult au moyen de procdures exportes par le module ;
classe proprement dite (au sens des langages objets) : cette
catgorie de module exporte un type abstrait de donnes dont la
structure reste secrte, avec son lot de primitives (procdures)
publiques dfinissant les oprations sur le type. Tel est le module
LISTE_D_ENTIERS de la figure 2, exportant un type abstrait appel
LISTE.
En dehors du premier cas, tout module exporte des procdures
dont limplmentation est cache. Toutefois, en Fortran 90, le module
forme toujours une seule unit de compilation : il ny a pas sparation
entre une partie spcification visible, et une partie implmentation
cache, comme en Pascal tendu (interface et implmentation) ou
en Ada (interface et package body). Cela peut obliger recompiler
une unit utilisatrice alors qu spcification (et smantique)
constante, seule la ralisation technique volue.
Accessoirement, un module Fortran na pas de partie optionnelle
excutable (squence to begin do en Pascal tendu, squence
finale begin en Ada).

6.2 Entits visibles et prives


Par dfaut, toute entit dfinie dans un module est exporte,
donc visible par lutilisateur du module. Cela correspond lattribut
par dfaut PUBLIC (quivalent dexport en Pascal tendu) ; il faut
alors donner lattribut PRIVATE toute entit (type, objet ou procdure) cache. on peut inverser cette situation en introduisant une
instruction de dclaration :
PRIVATE
qui oblige ensuite dclarer toute entit exporte avec lattribut
explicite PUBLIC.
Dans le cas des types cartsiens, il existe trois possibilits,
comme en Ada :

H 2 120 12

le type est entirement visible, nom et structure (il a, implicitement ou explicitement, lattribut PUBLIC) ;
le type est visible, mais sa structure est cache (type t is
private ; en Ada) ; exemple : figure 2, le type LISTE (lignes 10-12) ;
le type est entirement cach (en Ada, dfini dans la section
private de linterface, ou dans le corps du module) ; le type reoit,
implicitement ou explicitement, lattribut PRIVATE ; exemple :
figure 2, le type MAILLON (lignes 5-8).
Remarque : lquivalent des types Ada limited private nexiste
pas en Fortran 90 : laffectation reste toujours utilisable pour un type
priv ; mais le module peut la redfinir ( 5.5).

6.3 Importation des ressources


dun module
Un module doit tre compil avant toute unit utilisatrice, ce qui
cre un fichier dcrivant linterface visible du module, gr automatiquement par le compilateur.
Fortran 90 confond en une seule dclaration (USE) la fois
limportation dun module (clause with en Ada), et la dclaration de
visibilit (use en Ada).
Lutilisation la plus simple (correspondant en Ada with m ;
use m ;) est :
USE nom_de_module
qui importe le module, et donne accs toutes ses ressources
visibles sous leur nom dorigine, sauf en cas de conflit de nom ; on
peut nanmoins accder de telles entits en les renommant, la
manire de Pascal tendu.
Exemple
USE Liste_d_Entiers, INT_LISTE => LISTE, L_EMPTY
&
=> L_VIDE
baptise localement INT_LISTE et L_EMPTY les entits associes du
module.
Ce mme procd est employer si lon recourt deux modules
exportant deux entits distinctes homonymes que lon souhaite
utiliser. Le mlange with / use est compens en Fortran par la possibilit de limiter laccessibilit aux entits visibles dun module,
toujours comme en Pascal tendu, laide dune clause ONLY.
Exemple
USE Liste_d_Entiers, ONLY : ! quivalent dun with Ada
............................
CONTAINS
SUBROUTINE P
USE Liste_d_Entiers ! quivalent dun use Ada.
La premire dclaration USE permet daccder au module sans en
rien importer ; on peut linclure en tte de lunit importatrice pour
des raisons de lisibilit. Si la procdure P est lutilisatrice effective
du module, la seconde dclaration USE lui donne toute la visibilit
requise.

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

Plus gnralement, en particulier pour des modules de type bibliothque, on peut restreindre la liste des entits importes, ventuellement en les renommant.
Exemple
MODULE M
PRIVATE
PUBLIC:: A, B, C, D
..................................
PROGRAM principal
USE M, ONLY : B, VLOC => A
nimporte que B (sous son nom), et A renomm localement VLOC.
La relation dimportation est transitive : un module M2 important
une entit dun module M1 peut la rexporter librement. On peut
limiter cette rexportation en rendant PRIVATE dans M2 les noms
locaux des entits importes.

7. Entres-sorties
7.1 Fichiers

7.2 Ordres gnraux


On peut interroger le systme sur un fichier connu par son nom,
ou par son numro dunit logique (ul), grce linstruction :
INQUIRE (f, liste des paramtres rsultats)
o f est FILE = nom ou UNIT = ul.
Les paramtres permettent dobtenir une information sur lexistence de f (EXIST =), sur les permissions accordes par le systme
(SEQUENTIAL, DIRECT, (UN)FORMATTED), sur les caractristiques
de lexploitation en cours (OPENED, RECL, ACCESS, FORM, READ,
WRITE, READWRITE et ACTION), sur le nom externe (NAMED,
NAME) ou le numro dunit logique (NUMBER), plus quelques paramtres spcifiques (BLANK, DELIM, PAD pour les fichiers de texte ;
NEXTREC pour un fichier direct ; POSITION pour un fichier
squentiel).
Remarque : certains de ces paramtres correspondent des fonctions prdfinies en Ada (OPENED = correspond is-open,
ACTION = correspond mode, NAME = correspond fonction de
mme nom) et en Pascal tendu (NEXTREC correspond position).
Fortran 90 introduit une nouvelle forme de cette instruction :
INQUIRE (IOLENGTH = variable entire) liste de variables

Paradoxalement, Fortran, langage scientifique par excellence, dispose dune assez belle panoplie doutils pour manipuler les fichiers,
encore enrichie par la rcente norme.
On distingue deux types de fichiers selon la forme de leur
contenu :
les fichiers de texte, dont les enregistrements (ou composants)
contiennent exclusivement des suites de caractres (fichiers de type
text en Pascal ; offerts par le paquetage prdfini text_io en Ada ;
crs sous le contrle dun format ddition en Fortran, et en mode
stream en PL /1) ;
les fichiers binaires, dont les enregistrements sont des suites
de valeurs quelconques (ou fichiers sans format).
Deux mthodes daccs aux enregistrements sont disponibles en
Fortran :
squentielle (offerte en Ada par le paquetage prdfini
squential_io pour les fichiers binaires ; cest la seule possible en
Pascal ISO) ;
directe par le rang (paquetage direct_io en Ada pour les fichiers
binaires ; type file [....]of.... en Pascal tendu).
Sur certains systmes, les fichiers enregistrements de longueur fixe peuvent admettre les deux mthodes.
En Fortran, tout fichier peut tre trait en criture seulement, en
lecture seulement, ou en modification ; cest un paramtre spcifique
(ACTION =) de linstruction OPEN ( 7.2) qui dtermine lutilisation
possible. En accs squentiel, on peut aussi allonger un fichier
existant (grce au paramtre POSITION = append de lordre
OPEN).
Dans un programme Fortran, un fichier est dsign par un numro
dunit logique, qui est un entier positif ou nul, choisi louverture
du fichier. Si le fichier est rmanent, il est connu du systme sous
un nom externe dfinissable et accessible en Fortran.
Il existe deux units prdfinies, dnotes * ; lune en lecture (sysin
en PL /1, input en Pascal, standard_input en Ada), lautre en criture
(sysprint en PL /1, output en Pascal, standard_output en Ada). En
mode dexcution dialogu, toutes deux correspondent au terminal
de lutilisateur ; elles dsignent toujours un fichier de texte
squentiel.

o la liste dcrit la structure des enregistrements dun fichier


binaire ; la variable reoit alors la longueur interne des enregistrements associs (valeur utilisable ensuite pour le paramtre RECL
de linstruction OPEN).
Les units prdfinies (*) sont accessibles sans formalit ds le
dbut du programme. Les autres fichiers doivent tre ouverts
avant leur utilisation et associs un numro dunit logique par
une instruction :
OPEN ([UNIT =] ul, liste de paramtres dentre)
Les paramtres dfinissent diverses caractristiques gnrales du
fichier (FILE, STATUS, FORM, ACCESS, RECL, POSITION, ACTION),
et prcisent certaines options spcifiques pour les fichiers de texte
(BLANK, PAD, DELIM).
Remarque : en accs squentiel :
OPEN (ul, POSITION

= rewind, ACTION = write [,....])

correspond la procdure prdfinie rewrite en Pascal ; la procdure reset correspond ACTION = read.
Une fois le traitement du fichier termin, il est recommand de
le fermer par linstruction :
CLOSE ([UNIT =] ul [, STATUS = action prendre])
qui correspond aux procdures close ou delete en Ada (selon la
valeur de STATUS).
Remarque : toutes les instructions dentre-sortie Fortran
peuvent en outre comporter les paramtres suivants :
ERR = tiquette de transfert en cas derreur ;
IOSTAT = variable scalaire entire (= 0, 0 en cas derreur), dont
la logique correspond celle de STAT pour les instructions
ALLOCATE / DEALLOCATE ( 4.2.5).

7.3 Instructions de lecture-criture


Les instructions ci-aprs portent sur un fichier dsign par un
numro dunit logique. Lcriture dun nouvel enregistrement se
ralise par linstruction :
WRITE (liste de commande) [Liste de donnes]

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 13

FORTRAN _____________________________________________________________________________________________________________________________

et la lecture dun enregistrement par :


READ (liste de commande) [liste de variables]
En Fortran, les listes dentre-sortie (donnes ou variables) ne
correspondent pas ncessairement un objet structure unique
comme dans la plupart des langages, mme si leur introduction en
Fortran 90 doit en gnraliser lemploi dans ce contexte.
Les listes de commande sont de la forme :
[UNIT =] ul [, options]
o les options possibles sont en particulier :
END = tiquette pour grer la fin du fichier en lecture squentielle ;
REC = expression pour les fichiers directs (paramtres from et to
en Ada).
Dautres options sont spcifiques aux fichiers de texte ( 7.4).
En accs squentiel, on dispose encore de linstruction :
REWIND ([UNIT =] ul)
pour replacer un fichier son dbut (effet quivalent au paramtre
POSITION = rewind de lordre OPEN).
Il existe en outre deux instructions techniquement obsoltes :
ENDFILE (ul) et BACKSPACE (ul).

7.4 Fichiers de texte


Ils sont dfinis au paragraphe 7.1. Il existe trois faons de diriger
la correspondance entre les donnes du programme transfres, et
les caractres qui les reprsentent dans les enregistrements :
par un format ddition explicite (quivalent au mode edit des
ordres get /put en PL /1) ;
par liste, ou en format libre (dnot * ; mode list en PL /1) ;
par noms de donnes (NAMELIST ; mode data du PL /1).
De plus, contrairement aux fichiers binaires, lexcution dun seul
ordre READ ou WRITE peut traiter plusieurs enregistrements
(appels lignes dans le cas des fichiers de texte) successifs.
Pour les units prdfinies, il existe des formes abrges des
ordres READ / WRITE avec format explicite ou libre :
READ format [, Liste de variables]
PRINT format [, Liste de donnes]! figure 1, lignes 53-58.

7.4.1 dition avec format explicite


Les instructions READ / WRITE utilisent dans leur liste de
commande loption :
[FMT =] format
et, optionnellement :
ADVANCE = et, en lecture seulement : SIZE = et EOR =
Remarque : loption ADVANCE = no permet dobtenir un effet
quivalent aux procdures prdfinies read et write de Pascal (sans
elle, les ordres Fortran READ / WRITE quivalent readln et writeln
respectivement).
Lindication de format est ltiquette dune instruction FORMAT
(figure 1, ligne 59), ou une expression de type chane de caractres
dont la valeur est de la forme :
(flist), o flist est une liste dlments de la forme :
[r] ed o ed est un modle ddition de donne (rptable)
ou /
ned o ned est un modle non rptable
(tous autres modles ddition) ;

H 2 120 14

[r] (flist)
r : facteur de rptition (constante entire > 0).
Le principe est de faire correspondre, chaque donne dite, un
modle ddition de donne adapt son type, et dcrire la mise
en place des champs dits laide de modles auxiliaires.
Liste des modles ddition de donnes
Remarque : w dsigne le nombre de caractres du champ dit
sur la ligne ;
d : nombre de chiffres de la partie fractionnaire ;
e : nombre de chiffres de lexposant ;
m : nombre minimal de chiffres afficher ;
s : nombre de chiffres significatifs ;
pour un entier : lw, Bw, Ow, Zw, et leurs variantes lw.m, etc en
sortie (pour les bases de numration respectivement 10, 2, 8 et 16),
pour un rel : Fw.d, Ew.d [E.e], Dw.d, ENw.d [E.e], ESw.d [E.e] ;
en lecture, tous sont quivalents ; en sortie, ils permettent dobtenir
diverses variantes de prsentation,
pour une chane de caractres : Aw (avec en sortie troncature
ou compltion par des espaces de la valeur dite),
pour une valeur logique : Lw (T / F reprsentent les valeurs
logiques),
pour tous types : Gw.s [E.e] o seul w est utilis en dehors du
type rel.
Une valeur complexe est transmise laide de deux modles rels ;
une structure, laide dautant de modles que de champs scalaires.
Modles prcisant ldition numrique
BN, BZ
interprtation des espaces non initiaux en lecture ;
S, SS, SP
traitement du signe + en sortie ;
kP
facteur dchelle (k constante entire).
Rgles gnrales pour ldition numrique
En lecture, les espaces initiaux ne sont pas significatifs. Linterprtation des autres espaces est dirige par le contrle despace en
vigueur (cf. BLANK =, BN, BZ).
la lecture dun rel, un point dcimal dans le champ lu supplante lindication du modle.
En sortie, la reprsentation est cadre droite. Si la valeur transmise est trop grande pour tre reprsentable selon le modle, le processeur produit un champ de w astrisques.
Modles de positionnement des champs
La transmission du prochain caractre vers ou depuis la ligne
courante soprera partir du caractre :
Tc
de rang c sur la ligne ;
TLc
situ c positions avant la position courante ;
TRc ou cX
situ c positions aprs la position courante.
Autres modles
libell en sortie ; transmis tel quel (figure 1, ligne 59) ;
/
provoque la fin du traitement de la ligne courante ;
:
arrte lexploration du format aprs puisement des
donnes.

7.4.2 dition en format libre


Elle libre lutilisateur de toute obligation de cadrage des champs
en lecture, et des lourdes laborations de format en sortie. Lindication de format est alors remplace par * .
Chaque ordre dentre-sortie traite un ensemble de caractres
placs sur une ou plusieurs lignes, et formant une suite de valeurs :
constante ou valeur vide (le cas chant rpte par un facteur de

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

rptition r*), spares par une virgule ou un espace et, en entre,


termines le cas chant par /
Exemple de ligne en entre (remarque : 2* rpte la valeur vide) :
Bonjour 50 * 1.5

(2.5E3, 3.14)

2* ,1 3

Les fonctions attributs, ou dinterrogation, qui fournissent une


proprit de leur argument principal indpendamment de sa valeur
(qui peut mme tre indtermine) ; elles correspondent en Ada au
concept dattribut.
Les fonctions de transformation : toutes les autres fonctions ;
elles portent gnralement sur des tableaux.

7.4.3 dition dirige par noms

Les sous-programmes non distributifs.

Poursuivant des buts voisins du format libre, ce mode ddition


vise accrotre la lisibilit des donnes sur le support externe. Malheureusement, il rompt lindpendance donnes-programme. Le
principe consiste associer chaque type darticle logique du
fichier un nom de liste gnrique, quivalent un nom de structure, dont les champs sont dfinis par une dclaration :

Linterface dune procdure prdfinie est toujours visible, ce qui


permet les deux formes dappel ( 5.3), et autorise la prsence de
paramtres optionnels ; lorsquils sont mentionns, ils apparaissent
ici en lettres minuscules.
Remarque : lorsquune procdure prdfinie est transmise en
argument (ce qui est possible en Fortran, contrairement Pascal), la
procdure dappel doit la dclarer INTRINSIC.

NAMELIST / nom darticle / liste des noms des champs


Dans le fichier, les donnes relatives un article logique
commencent par & nom de larticle, et se terminent par /. Les valeurs
des divers champs sont indiques sous forme daffectations
spares par des virgules.
Les instructions dentre-sortie prennent la forme :
READ ([UNIT =] ul, [NML =] nom darticle)
WRITE ([UNIT =] ul, [NML = ] nom darticle)
avec toujours les options facultatives ERR / IOSTAT, et END = en
lecture.
Exemple
DIMENSION A (9) ; CHARACTER * 20 TEXTE ; COMPLEX Z
NAMELIST / ARTICLE / TEXTE , Z , A
READ (* , NML = ARTICLE)
peut lire les lignes suivantes :
&ARTICLE TEXTE = EXEMPLE, Z = (0, 2),
A (1) = 47, A (4:8) = 5 * 0.6 /

7.4.4 Fichiers internes


Fortran permet de considrer une chane de caractres
((sous-)objet variable) comme un pseudo-fichier interne dune ligne,
et un (sous-)tableau de chanes comme un fichier form dautant de
lignes que dlments dans le tableau. Un fichier interne est toujours
trait avec format explicite.

Exemple
INTRINSIC COS
CALL CALCUL (COS, ....)

8.1 Fonctions distributives


8.1.1 Fonctions de conversion
Ces fonctions ont toutes un paramtre optionnel KIND, prcisant
le sous-type du rsultat. Ce sont : INT, REAL (plus larchaque DBLE),
CMPLX (X, y), LOGICAL.

8.1.2 Fonctions arithmtiques


Elles admettent des arguments dun type numrique quelconque,
le rsultat tant du mme type. Ce sont :
valeur absolue (ABS), arrondi (NINT et ANINT), troncature (AINT),
reste et modulo (MOD et MODULO), extremums (MIN et MAX),
transfert de signe (SIGN (A , B)), diffrence positive (DIM (X, Y)),
conjugu (CONJG (Z)).
Les fonctions suivantes oprent de plus une conversion de type :
multiplication en double prcision (DPROD), partie entire (FLOOR
et CEILING), partie imaginaire (AIMAG (Z)).

8.1.3 Fonctions mathmatiques

Exemple

10

CHARACTER (12) : : TEXTE


WRITE (TEXTE , 10) SOMME
FORMAT (F12.2, TL3 , ,)

8. Liste des procdures


prdfinies
Ces procdures font partie intgrante de la dfinition du langage,
et sont donc disponibles sur tous les compilateurs respectant intgralement la norme. Du point de vue de leur mode de calcul, on distingue quatre sortes de procdures prdfinies en Fortran 90.
Les procdures distributives, oprant sur des arguments a priori
scalaires, mais applicables des tableaux ; les fonctions renvoient
alors un tableau de mme profil, rsultant de la distribution de la
fonction aux lments du ou des arguments.

un rangement rel ou complexe ; ce sont : racine carre (SQRT),


exponentielle (EXP), logarithmes (LOG, LOG10), fonctions circulaires
(COS, SIN, TAN) et leurs inverses (ACOS, ASIN, ATAN et sa variante
ATAN2 (Y, X)), fonctions hyperboliques (COSH, SINH, TANH).

8.1.4 Fonctions relatives aux chanes de caractres


Comparaisons ASCII (LLT, LLE, LGE, LGT), conversion code
caractre (CHAR et ICHAR, et leurs quivalents ASCII : ACHAR et
IACHAR), localisation dune sous-chane (INDEX), justification
(ADJUSTL et ADJUSTR), longueur hors espaces finaux (LEN_TRIM),
contrle par rapport un alphabet (SCAN et VERIFY).

8.1.5 Fonctions de traitement des rels


Accs aux composantes du modle (FRACTION, EXPONENT et sa
rciproque SET_EXPONENT), et quelques fonctions trs spcialises
(NEAREST, SCALE, SPACING, RRSPACING).

Exemple : ABS (( / 3 , 2 , 7 /)) donne le vecteur ( / 3, 2 , 7 /)

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 15

FORTRAN _____________________________________________________________________________________________________________________________

Remarque : SPACING (X) donne la valeur absolue du dernier bit de


la reprsentation de X, et permet par exemple de mettre en uvre la
mthode de perturbation et permutation de Vignes.

8.3 Fonctions de transformation

8.1.6 Fonctions de traitement du bit


( arguments entiers)

Un certain nombre de ces fonctions ont un paramtre optionnel :


DIM (entier scalaire)
spcifiant une dimension
( 1  dim  rang du tableau argument).
MASK (logique)
filtre dapplication de la fonction.

Oprations logique bit bit (NOT, IAND, IOR, IEOR), dcalages


(absolu ISHFT, circulaire ISHFTC), accs au bit (BTEST et ses rciproques IBSET et IBCLR, IBITS).

8.1.7 Fonction de dfinition conditionnelle


MERGE (TSOURCE, FSOURCE, MASK)
Pour des tableaux, les fusionne sous le contrle de MASK (de
type logique) (cf. loprateur ? en C).

8.3.1 Fonctions sur tableaux

Application dune opration aux lments dun tableau


MINVAL et MAXVAL
lments extrmes ;
avec dans le mme ordre dide (figure 1, ligne 23) :
MINLOC et MAXLOC position des lments extrmes.
SUM et PRODUCT
somme et produit des lments.
ANY et ALL
somme et produit logique des lments
(idem en PL /1).
COUNT
nombre dlments vrai dans un tableau
logique.

8.2 Fonctions-attributs

Fonctions de calcul matriciel

8.2.1 Fonctions gnrales

DOT_PRODUCT
MATMUL
TRANSPOSE

KIND (X) : paramtre de type de lobjet X.


ASSOCIATED (POINTER, target) : test dassociation dun pointeur
(quivaut la comparaison de pointeurs dans les autres langages).
PRESENT (A) : test de prsence dun argument optionnel.
LEN (STRING) : longueur physique de la chane argument.

PACK

8.2.2 Caractristiques des types numriques

UNPACK
SPREAD

Externes
EPSILON, PRECISION, HUGE (+), TINY (plus petit rel > 0),
RANGE (rciproque de r dans une fonction SELECTED_t_KIND).
Internes
BIT_SIZE pour un entier, MINEXPONENT et MAXEXPONENT pour
un rel et, pour les deux types : DIGITS (nombre de chiffres
significatifs ; attribut de mme nom en Ada), et RADIX.

Autres fonctions
RESHAPE

EOSHIFT, CSHIFT

produit scalaire.
produit matriciel.
transpose dune matrice.
fonction de restructuration
(figure 1, lignes 26-29).
construit un vecteur dlments
(figure 1, lignes 26-27).
fonction inverse de PACK.
construit un tableau par duplication dun
autre.
dcalages (avec expulsion, ou circulaire).

8.3.2 Fonctions gnrales


SELECTED_INT_KIND (R) et SELECTED_REAL_KIND (p, r) voir 2.1.
REPEAT (STRING, NCOPIES) duplication de la chane STRING
TRIM (STRING)
chane STRING moins ses espaces finaux.
TRANSFER
transfert de type
(cf. unckecked_conversion en Ada.)

8.2.3 Fonctions relatives aux tableaux


ALLOCATED (ARRAY)

test dexistence dun tableau


ALLOCATABLE ( 2.3).
LBOUND (ARRAY, dim) et UBOND (ARRAY, dim)
bornes du tableau.
SHAPE (SOURCE)
donne le profil de son argument.
SIZE (ARRAY, dim)
donne une tendue (la taille si dim est
absent) du tableau.

8.4 Sous-programmes prdfinis


RANDOM_SEED
RANDOM_NUMBER
DATE_AND_TIME
SYSTEM_CLOCK
MVBITS

H 2 120 16

initialise ou interroge le gnrateur


pseudo-alatoire.
fournit un (tableau de) rel(s)
pseudo-alatoire(s).
fournit la date et lheure (figure 1,
ligne 52).
consultation de lhorloge interne.
transfert de bits entre entiers (procdure
distributive).

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

____________________________________________________________________________________________________________________________ FORTRAN

9. Conclusion
Fortran vient de soffrir une vritable rvolution culturelle, au bon
sens du terme, Des constructions saines et rigoureuses, accroissant
le pouvoir dexpression du langage et amliorant la fiabilit des
programmes, sont venues balayer un certain nombre de conceptions
archaques. Fortran sort ainsi renforc dans son domaine de
prdilection : le calcul intensif, tout en rejoignant enfin ! les
proccupations du gnie logiciel. Toutefois, cette modernisation
pousse a d conserver les caractristiques obsolescentes de
Fortran 77, pour dvidents motifs de rutilisation du code existant :
cela entrane la co-existence actuelle de deux styles dcriture
antinomiques, alourdissant considrablement les compilateurs
jusquau niveau de lanalyse lexicale ! De mme, si le professionnel
de la programmation ne peut quaccueillir avec faveur le rajeunis-

sements de son langage de prdilection, le scientifique ou le


technicien, utilisateur occasionnel, pourra rester perplexe devant sa
complexification apparente : sensibilisation et formation doivent
tre les rponses leur apporter.
Nous lavons dit ds lintroduction, Fortran 90 nest quune tape
dans un processus de progrs dsormais irrversible. Dores et dj
lavenir se prpare lhorizon 2000 est pour demain et des groupes
dexperts sont actuellement au travail pour enrichir encore Fortran :
le domaine du temps rel (Fortran Haute Performance ), celui de
la programmation par objets sont des voies intensivement
explores, ct dautres amliorations importantes comme la gestion des exceptions.
Reprenant la conclusion de la version prcdente de cet article,
il est plus que jamais permis dajouter : les dveloppements que
nous venons de mentionner font penser que Fortran connatra
encore de beaux jours au XXIe sicle.

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique

H 2 120 17

P
O
U
R

Fortran
par

Patrice LIGNELET
cole Nationale Suprieure dlectronique et de ses Applications (ENSEA)
(division des Administrateurs)
Animateur du groupe Fortran lAFNOR

Caractristiques obsolescentes
La norme indique comme telles des caractristiques de Fortran 77 sexprimant de meilleure faon en Fortran 90, et voues une probable disparition
ds la prochaine norme. Tout compilateur doit en signaler lemploi dans un programme. Elles comprennent des caractristiques dj obsolescentes de fait en
Fortran 77 (le descripteur Hollerith nH, linstruction PAUSE, les tiquettes de
FORMAT dfinies par ASSIGN), de douteux apports de Fortran 77 (indices ou
paramtres de boucles rels !, branchement vers ENDIF depuis lextrieur dun
IF), danciennes caractristiques rendues obsoltes par de nouvelles
constructions : IF arithmtique ternaire (utiliser un CASE pour les entiers, ou
un schma IF pour les rels), boucles DO embotes fin commune, ou sur une
instruction excutable (utiliser un END DO propre chaque boucle), ASSIGN
et GOTO assign (utiliser une procdure interne), et mme certaines caractristiques officiellement normalises par Fortran 77 (paramtres de type tiquette (*) et retour ventil, remplacer par un code de retour test par un CASE).

le format fixe de texte source avec zonage rigide (et espaces non
significatifs) ;
les zones communes (COMMON) et (BLOCK DATA) associs,
remplaces chacune par un module ;
lassociation de mmoire (EQUIVALENCE), remplace par les pointeurs
et les cibles (TARGET) ;
les paramtres tableaux borne implicite : utiliser un profil hrit ;
les points dentre secondaire (ENTRY) : utiliser un MODULE avec
autant de procdures distinctes ;
le GOTO de ventilation, remplac par le CASE ;
les noms spcifiques des fonctions prdfinies gnriques (dj
osboltes en Fortran 77) ;
et la nouvelle directive INCLUDE, dj rendue inutile par les modules,
qui oprent linclusion au niveau smantique.

E
N
S
A
V
O
I
R

Beaucoup dautres constructions, bien que non dclares obsolescentes


compte tenu de leur taux demploi lev, le sont devenues de fait :

Normes auxiliaires supplmentaires


Comme pour Ada, le module permet dsormais dtendre le langage sans
alourdir sa grammaire. Divers services logiciels spcialiss pourront ainsi tre
offerts au programmeur Fortran, laide de module les faisant chacun lobjet
dune norme auxiliaire supplmentaire rattache la norme principale du
langage.
Un type chane de caractres de longueur variable (char (n) varying en PL /1
est en voie dadoption. Le module sappelle ISO_VARYING_STRING ; il exporte
le type abstrait VARYING_STRING, et lunifie avec le type CHARACTER ( la
manire de Pascal tendu). Cest ainsi que toutes les oprations ou fonctions
applicables au type CHARACTER le deviennent au nouveau type, voire en

mlangeant les deux types le cas chant. Des procdures spcifiques sont
ajoutes :
VAR_STR (CHAR) pour convertir explicitement largument CHARacter
en VARYING_STRING ;
GET, PUT et PUT_LINE pour les entres-sorties du nouveau type ;
enfin, INSERT, REPLACE, REMOVE, EXTRACT et SPLIT pour manipuler
le contenu dune chane variable.
Dautres projets sont en crous dtude pour raliser des passerelles entre
Fortran et des normes relatives dautres domaines (le traitement graphique,
le langage daccs aux bases de donnes SQL, le systme dexploitation
POSIX, etc.)

Doc. H 2 120

12 - 1993

Disponibilit des compilateurs


Lhtrognit et la complexit croissantes du langage nincitent gure les
grands constructeurs acclrer la commercialisation de compilateurs ;
nont-ils pas souvent introduit dans leur implmentation de Fortran 77 un certain
nombre dextensions recoupant quelques unes des caractristiques nouvelles,
mais avec une syntaxe divergente ? Devant cette carence provisoire, quelques
fournisseurs spcialiss, plus dynamiques, ont su prendre le relai. On peut ainsi
faire appel :

Pacific-Sierra Research diffuse le produit VAST-90, qui traduit le code


Fortran 90 en Fortran 77 de lancienne norme (qui peut ensuite tre pris en charge
par un compilateur Fortran 77, avec une bibliothque complmentaire pour
certaines procdures prdfinies). Ce mme produit peut rcrire en Fortran 90
du code Fortran 77 existant. (Pacific-Sierra Research Corp., Computer Products
Group, 12340 Santa Monica Belvedere, Los Angeles, CA 90025).

NAG (Numerical Algorithms Group, Oxford), qui offre un compilateur


Fortran 90 (f90) sur :

La socit amricaine PARASOFT diffuse un autre traducteur de


Fortran 90 en Fortran 77 (Parasoft Corp., 2500 E, Foothill Belweder Pasadona,
CA 91107).

DEC station 3100, HP9000 / 700, IBM Risc system /6000, NeXT, Silicon Graphics
4D, SUN 3 et 4 Unix 4.2 bsd, Apollo Domain : F90 version 2 (la version 1 est
disponible sur HP9000 /400 et VAX /VMS).

Autres compilateurs : Microway (pour systme DOS, OS /2 et Unix) ; EPC


pour Sparc Solaris 1.x et 2.x, IBM RS /6000, Intel 3 /486 (SVR 384, Solaris 2.x),
Motorola 88000 /100/100 (SVR 384).

Ces compilateurs, crits en C, oprent en plusieurs passes, dont les


premiers traduisent le code Fortran 90 en C.

Un compilateur maison pour IBP 9000 vient dtre install chez certains
clients privilgis. On annonce encore un compilateur chez Hewlett-Packard,
chez SUN (partiellement construit partir du compilateur NAG), chez Digital
Equipement (DEC), chez CRAY (CF90, version Sparc), Microsoft, Lahey,
Portland, ACRI (pour machine Alpha)...

Ils sont commercialiss, hors maintenance, des prix hors taxes de 5 940 F
12 000 F (mars 1993). noter lexistence dune version de base pour processeur INTEL 386 SX ou +, propose 990 FH.T.
Salford Software offre un compilateur de mme nature (ralis en collaboration avec NAG) pour PC systmes DOS ou UNIX (FTN 90). (Salford
Software Marketing Ltd., Maxwell Building, The Crescent, Salford M5 4WT,
Grande-Bretagne).

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie


est strictement interdite. Techniques de lIngnieur, trait Informatique

Doc. H 2 120 1

P
L
U
S

P
O
U
R
E
N

FORTRAN _____________________________________________________________________________________________________________________________

Bibliographie
ABERTI (C.). Fortran 90. Initiation partir du
Fortran 77 . Srie Informatique, SI ditions,
Menton (1992).
BRAINERD (W.S.), GOLDBERG (C.H.) et ADAMS
(J.C.). Programmers Guide to Fortran 90 .
McGraw-Hill, New-York (1991).
BRAINERD (W.S.) et alii. The Fortran
90 Hand-book . Unicomp (1992).
COUNIHAN. Fortran 90 . Pitman (1991).
DELANNOY (C.). Programmer en Fortran 90 .
Eyrolles (1993).

S
A
V
O
I
R

DUBESSET (M.) et VIGNES (J.). Les spcifications


du Fortran 90. Technip (1993).
KERRIGAN (J.). Migrating to Fortran 90 . OReilly
(1993).
LIGNELET (P.). Fortran 90. Approche par la
Pratique . Srie Informatique, SI ditions,
Menton (1993).
LIGNELET (P.). Les fichiers en Fortran . Masson
(1988).
METCALF (M.) et REID (J.). Fortran 90 Explained .
1990, Oxford Universty Press, Oxford. Ouvrage
traduit en franais par PICHON (B.) et CAILLAT

(M.) sous le titre Fortran 90 : les concepts


fondamentaux . AFNOR ditions (1993).
METCALF (M.). A first Encounter with Fortran
90 (using the NAG f90 compiler). Fortran Journal, vol. 4, no 1, p. 2-8, janv.-fv. 1992.
Cet article est extrait de la revue bimestrielle
FORTRAN JOURNAL, The Journal of the Fortran
User Community (P.O. Box 201, Fullerton, CA
92634. En France, voir la socit OPTIMIZE : cf.
Annexe 3).
MORGAN et SCHONFELDER. Programming in
Fortran 90 . Blackwell (1993).

Normalisation
Norme internationale
ISO /IEC 1539
1991
ISO /IEC 1539-2

Programming language Fortran.


[en voie dadoption]
Varying Length Character Strings in Fortran.

France (AFNOR)
ISO /CEI 1539

Langage de programmation FORTRAN. (indice de


classement Z 65-110) [ paratre]

tats-Unis (ANSI)
X 3.198

1992

Programming Language Fortran Extended.

P
L
U
S

Doc. H 2 120 2

Toute reproduction sans autorisation du Centre franais dexploitation du droit de copie


est strictement interdite. Techniques de lIngnieur, trait Informatique