Upload
mouhamedlemine-ould-sidahmed
View
7
Download
0
Embed Size (px)
DESCRIPTION
gfg
Citation preview
Toute reproduction sans a
H 2
12
0
12
- 1
993
Fortran
par Patrice LIGNELETcole Nationale Suprieure dlectronique et de ses Applications (ENSEA)(division des Administrateurs)Animateur du groupe Fortran lAFNOR
1. Structure gnrale du langage............................................................. H 2 120 - 21.1 Exemple de programme Fortran 90 ........................................................... 21.2 Architecture des programmes.................................................................... 21.3 Structure lexicale ......................................................................................... 2
2. Types et oprateurs ................................................................................. 32.1 Types scalaires prdfinis........................................................................... 32.2 Types structures (ou drivs ) ............................................................... 4utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 1
2.3 Tableaux ....................................................................................................... 52.4 Objets points .............................................................................................. 5
3. Instructions de dclaration ................................................................... 53.1 Typage des objets........................................................................................ 53.2 Les deux syntaxes orthogonales de dclaration....................................... 63.3 Liste des attributs de dclaration ............................................................... 6
4. Charpente algorithmique des programmes ...................................... 64.1 Expressions.................................................................................................. 64.2 Instructions simples .................................................................................... 74.3 Schmas algorithmiques ............................................................................ 7
5. Procdures ................................................................................................. 105.1 Dfinitions .................................................................................................... 105.2 Classification des procdures par localisation.......................................... 105.3 Paramtres et modes de transmission ...................................................... 105.4 Caractristiques spcifiques aux fonctions ............................................... 115.5 Blocs dinterface et applications................................................................. 115.6 Macrofonctions ............................................................................................ 11
6. Modularit.................................................................................................. 116.1 Prsentation ................................................................................................. 116.2 Entits visibles et prives............................................................................ 126.3 Importation des ressources dun module.................................................. 12
7. Entres-sorties .......................................................................................... 137.1 Fichiers ......................................................................................................... 137.2 Ordres gnraux.......................................................................................... 137.3 Instructions de lecture-criture................................................................... 137.4 Les fichiers de texte..................................................................................... 14
8. Liste des procdures prdfinies......................................................... 158.1 Fonctions distributives ................................................................................ 158.2 Fonctions-attributs....................................................................................... 168.3 Fonctions de transformation ...................................................................... 168.4 Sous-programmes prdfinis..................................................................... 16
9. Conclusion ................................................................................................. 17
Pour en savoir plus........................................................................................... Doc. H 2 120
FORTRAN _____________________________________________________________________________________________________________________________
TouteH 2 120 2
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 tech-niquement dsarm pour affronter la dernire dcennie du sicle. Conscient dece danger dobsolescence, le groupe dexperts charg de cette nouvelle rvisionlui a intgr quelques-uns des concepts actuels les plus puissants, comme lamodularit (dj prsente en Ada et Pascal tendu par exemple) et le calculvectoriel.
Parmi les autres innovations majeures, on peut citer le paramtrage des typesnumriques, les types cartsiens, les pointeurs, la rcursivit, et, le plus visible,une syntaxe libre du zonage rigide vestige des cartes perfores. En outre, grceau concept de bloc interface coupl aux modules, elle fiabilise lexploitation duconsidrable investissement logiciel reprsent par les importantes biblio-thques 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 deuxstyles dcriture des programmes. Toutefois, la nouvelle norme sinsre dans unprocessus dvolution de caractristiques reclors de la prochaine rvindfiniment.
Ainsi dynamis par ceirremplaable pour lentechnique. Ds lors, ondans la formation initia
F
1. Structuredu langag
1.1 Exemple de p
Le programme de la figursur un chantillon dune couleur). Il illustre essenFortran 90, notamment lession en paramtre par desc(telles MAXLOC ou COUNcomme outil dexploitationdure Q_STATS).
1.2 Architecture
Fortran appartient la famille des langages impratifs ; il est (enprincipe) compil. Un programme Fortran se prsente matriel-lement sous la forme dun ou plusieurs fichiers de texte source,chacun comportant un certtion, ou units de compilatide dfinition de donnes programme principal. La setout module soit compil a
Le programme excutabldans tout langage compilunits appeles, en utilisantrieurement compils e
Fortran scrit laide dun jeu de caractres qui est unsous-ensemble de lalphabet ASCII (American Standard Code forInformation Interchange ) : reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
ain nombre de composants de lapplica-on : modules, procdures externes, blocs(BLOCK DATA), ainsi quun et un seulule contrainte dordre respecter est quevant son utilisation par une autre unit.
e est cr par ldition des liens, comme, partir du programme principal et desant sil y a lieu dautres composantst rangs en bibliothque.
les caractres alphanumriques, qui comprennent les 26 let-tres (majuscules et minuscules tant quivalentes, sauf dans unlibell ou chane de caractres), les 10 chiffres dcimaux et le blancsoulign (_) ;
19 caractres spciaux ou de ponctuation, qui sont, outrelespace typographique :
= + * / () , . : ! % & ; < > long terme du langage, en dgageant un certain nombreonnues comme surannes, et susceptibles de disparatreision de la norme ; le langage nest donc pas vou crotre
s apports novateurs, Fortran 90 demeure plus que jamaissemble de la programmation numrique, scientifique et doit galement souhaiter quil reprenne toute sa placele de nos futurs ingnieurs et techniciens.
gnralee
rogramme Fortran 90
e 1 dtermine les principales statistiquesvariable qualitative (par exemple, unetiellement les aspects vectoriels de
constructeurs de tableaux, la transmis-ripteur, des fonctions prdfinies variesT), etc. Il prsente aussi le MODULE
fiable dun service logiciel (ici la proc-
des programmes
Procdures externes et BLOKC DATA sont des vestiges de lancienstyle Fortran : le module devrait dsormais constituer lunique outilde dcomposition, exportant diverses ressources logicielles, dontdes procdures (figure 1). Un programme Fortran 90 typiquecomportera donc un programme principal, et modules,rpartis en un ou plusieurs fichiers-sources (le programme principaltant alors la dernire unit de compilation du dernier fichier-sourcecompil).
Un programme principal a la structure suivante :[PROGRAM identificateur]
[dclarations]instructions excutables
[CONTAINSprocdures internes]
END [PROGRAM [identificateur]]
1.3 Structure lexicale
n ( 0 )
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
Ces caractres servent construire les lments lexicaux, qui sontles plus petites entits interprtables des programmes. On distingueles mots-cls, prdfinis (qui ne sont pas rservs en Fortran), ennombre assez lev (de lordre de 75) ; ils dfinissent les caract-ristiques de donnes (ex : INTEGER, INTENT, etc.), prcisent le rledune instruction (ex : IF, CALL), etc.
Les identificateurs sont les noms choisis par le programmeur pourdsigner ses propres entits (ex. STATS_QUALITATIVES, Q_STATS,LISTEFF, etc.). Un identificateur est form dune suite de 1 31 carac-tres alphanumriques dont le premier est une lettre. Certains iden-tificateurs sont aussi prdfinis : ils dsignent des procduresFortran (ex : SIZE, MAXLOC, DATE_AND_TIME, etc.).
Les lments lexicaux comprennent encore les oprateurs, et lesconstantes (numriques, logiques ou chanes de caractre).
Linstruction est la phrase lmentaire dun programme ; elleregroupe diverses entits lexicales. Toute unit de compilationcomporte des instructions de dclaration, et des instructions ex-cutables. En Fortran 90, il y a une relative indpendance entrelinstruction et la ligne de texte qui lui sert de support dans unfichier source. Plusieurs instructions courtes peuvent apparatresur une mme ligne, spares par un point-virgule. Une instructionpeut scrire sur plusieurs lignes, en terminant toutes les lignes(sauf la dernire) par un caractre &. Le cas chant, la coupurepeut intervenir au milieu dune entit lexicale ; on doit alors crireun second & juste avant le premier caractre de lentit sur la ligne
Figure 1 Exemple de programme vectorielutorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 3
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 commentairestend depuis le ! jusqu la fin de la ligne. Ex : figure 1, lignes 1 11, 21, etc. Un commentaire peut apparatre derrire un & la findune ligne initiale dune instruction rpartie sur deux ou plusieurslignes.
Lancien style dcriture du texte source (avec dcoupage deslignes en zones) reste utilisable, avec des amliorations hrites dunouveau style. On note que, dans ce nouveau style, lespace est spa-rateur, ce qui rend lanalyse lexicale des programmes plus efficace.
Le compilateur doit bien sr tre averti du style dcriture utilisdans un fichier-source. Cela se fera par une option de compilation,un suffixe spcifique dans le nom du fichier, etc.
2. Types et oprateursTout programme manipule de linformation, qui peut revtir un
certain nombre de formes simples prdfinies dans un langage, outre construite par composition de telles formes simples : ce sontles types de donnes, caractriss pour lensemble des valeurspossibles, 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 paramtrede type (KIND) pour en dfinir diverses variantes ou sous-types :
nom_de_type (KIND = paramtre de sous-type)
Il existe dans chaque cas un sous-type privilgi, correspondant la valeur par dfaut du paramtre KIND pour ce type, et dsignantle type du Fortran 77 (pour des raisons de compatibilit ascendante).
FORTRAN _____________________________________________________________________________________________________________________________
TouteH 2 120 4
Rciproquement, le paramtre de type dun objet x sobtient parla fonction prdfinie KIND (x). Lensemble des paramtres KINDdisponibles dpend du compilateur.
Le sous-type dune constante scrit en suffixant sa valeur par leparamtre KIND voulu (sous forme dune constante) ; ex :347_INT_SHORT avec la dclaration pralable :
Le type entier (INTEGER) est un intervalle fini de lensemblemathmatique des entiers relatifs. On peut choisir de manireportable le sous-type voulu en spcifiant le nombre minimal r dechiffres dcimaux requis, en prenant comme valeur du paramtreKIND celle de la fonction prdfinie :
SELECTED_INT_KIND (r)
Rciproquement, la fonction prdfinie RANGE (x) fournit lenombre maximal de chiffres dcimaux autoriss par le sous-type(entier) de lobjet x.
Le type rel (REAL) est une approximation de lensemble math-matique des rels, forme de nombres rationnels (y compris 0) de laforme :
o m (la mantisse) et e (lexou 16 en pratique selondisponible.
On peut choisir de manirla prcision p souhaite, et /dsign par r (pour 10 r 1comme valeur du paramt
SELECT
Lancien type DOUBLE spcification :
REAL
o lobjet 0D0 reprse(= 0 10 0)
Le type complexe (COMPdeux types rels identiquesUn sous-type se dfinit dopour les rels. Les constantde nombres entre parenth
Les trois types numriqurateurs, dnots classiquecroissante :
+ et (unaires ou b* et /* * (exponentiation)
Ces oprateurs polymorphrgles propres ; cest ainsi(troncature vers zro).
Le type logique ou boovaleurs de vrit de la logiqLe paramtrage de ce typements restreints, et dpendment est dun mot numriqINTEGER et REAL, le type Les oprateurs logiques scroissante :.EQV. et .NEQV. (quivalen.OR..AND..NOT.
Le type caractre (CHARACTER) correspond au jeu de caractresdisponibles sur la machine cible (celle sur laquelle le programmesexcute). Le paramtre de type KIND pour les caractres est une exi-gence asiatique ; il peut aussi donner accs des jeux de caractresmathmatiques, chimiques, musicaux...
En fait, ce type correspond en Fortran aux chanes de caractres :il admet donc un second paramtre : LEN, qui dfinit la longueurde la chane (vide le cas chant) ; un caractre est une chane delongueur 1 (valeur par dfaut du paramtre LEN).
Les constantes chanes sencadrent au choix par des guillemets() ou des apostrophes. Le type caractre admet un oprateurinterne : 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, ilvaut 1 ; si b est omis, cest la longueur de la chane.
Par ailleurs, Fortran dispose doprateurs de comparaison, dontle rsultat est du type logique par dfaut, admettant deux nomsdistincts :
Ils sont applicables deux oprandes dun type scalaire quelconque,
ExemplePARAMETER (INT_SHORT = 2)
< = > .LT. .LE. .EQ. .NE. .GE. .GT. reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
m be
posant) sont des entiers relatifs, et b = 2 larchitecture de la virgule flottante
e portable un sous-type rel en spcifiantou lintervalle des valeurs reprsentables0 r en valeur absolue), hors 0, en prenantre KIND celle de la fonction prdfinie :
ED_REAL_KIND (p, r)
PRCISION correspond la nouvelle
(Kind = KIND (0D0))
nte le rel zro dans ce sous-type
LEX) correspond au produit cartsien de : les composantes relle et imaginaire.
nc par le mme paramtre de type quees complexes se dnotent par une paireses ; exemple : (0 , 1.0).
es partagent le mme ensemble dop-ment, par ordre de priorit algbrique
inaires)
es agissent pour chaque type selon ses que par exemple 8 / 5 donne lentier 1
lien (LOGICAL) correspond aux deuxue binaire, dnotes .FALSE. et .TRUE. .
correspond seulement des encombre- du compilateur. Par dfaut, lencombre-ue (comme pour les types par dfaut COMPLEX correspondant deux mots).ont les suivants, par ordre de priorit
ce et ou exclusif respectivement)
sauf complexe (qui nadmet que == et /=) et logique.
2.2 Types structures (ou drivs )
Cest un type construit correspondant un produit cartsiendensembles (champs) htrognes. Il est considrs commescalaire par opposition aux tableaux, bien quil puisse contenir deschamps tableaux. Ce type sappelle article en Pascal, et enregistre-ment en Cobol. Le nom de type driv adopt par la norme est regret-table, car il reprend celui dun concept du langage Ada qui na aucunrapport.
Un type structure se dfinit par une numration de champs,chacun ayant un nom particulier et ses propres caractristiques.
En Fortran 90, les structures ne sont pas paramtrables, quant leur forme (comme en Pascal, en C ou en Ada), mais on peut dimen-sionner un champ POINTER sur tableau ( 2.4). On peut obliger lecompilateur implmenter les champs dans lordre spcifi endotant le type de lattribut SEQUENCE :
TYPE client ; SEQUENCEINTEGER code, etc.
Laccs un champ dun objet structure se dnote laide ducaractre %.
Une valeur structure se construit en numrant les valeurs deschamps dans lordre.
ExempleTYPE client
INTEGER CODECHARACTER (LEN = 50) nomCHARACTER (30) villeINTEGER code-postal, &
soldeEND TYPE client
Un objet de ce type se dclare ainsi :TYPE (client) quidam
Exemplequidam % nom
Exemplequidam = CLIENT (1, Dupont, Paris, 75001, 0)
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
2.3 Tableaux
Un tableau est une collection de donnes homognes. Cettehomognit a permis de btir des architectures matrielles mas-sivement parallles, dites vectorielles, pour appliquer simultan-ment une mme opration tout ou partie dun tableau. Fortran 90sadapte ce progrs technologique, en traitant le tableau commeun objet de premire classe (comme en PL /1), escort dunepanoplie doutils favorisant le calcul vectoriel.
En Fortran, la structure de tableau est une proprit de lobjet (etnon un type) ; elle se dfinit par les caractristiques suivantes :
son rang, ou nombre de dimensions ; parconvention, tout scalaire est de rang 0 ;
chaque dimension possde un intervalle de dfinition, donnpar deux entiers, et une tendue, qui est la longueur de cet intervalle(bornes comprises). En Fortran 90, une tendue peut tre nulle, letableau tant alors vide ;
la taille dun tableau est le produit de ses tendues. Untableau 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. Dcompatibles sils ont le mme profil ; par concompatible avec tout tableau.
Fortran 90 permet de dfinir des table(constant ou calculable), et profil diffr (
Dans le cas dun profil explicite, la strindique dans un attribut de dimension parde dfinition de ses diverses dimensions :
(i1 : s1 , i2 : s2 , ... , in : sn ) av
la borne infrieure (in :) pouvant tre omise
Un tableau profil diffr est dfini dynamde dimension nen prcise que le rang, par : . Il reoit en outre lattribut ALLOCATACONTROLLED en PL /1).
Dans le cours du calcul, une fois les dimetableau est cr avec les dimensions votion ALLOCATE ( 4.1).
Laccs un lment de tableau sopdindices (expressions entires quelconquerang du tableau.
On peut aussi accder un sous-tableau,
avec une notation par triplet , copseudo-boucle qui dnote une suite dindicemtique.
La notation a : b : r reprsente la progresset de raison r extraite de lintervalle a : b. La(quivalent la notion de tranche en Ada). Deexistent, pour dsigner tout le dbut de linterune dimension (: b), toute la fin (: a), ou lin
avec un indice vectoriel.
Un indice vectoriel peut contenir des valeurs en double, aveccertaines limitations quant leur emploi, lorsque lopration entraneune smantique ambigu.
2.4 Objets points
Un objet point est cr dynamiquement par le programmeur, etreste sous son contrle. Un tel objet se dfinit par son modle(type + rang le cas chant), et par une variable (POINTER), quirecevra ladresse de lobjet une fois cr.
ExemplePARAMETER (N = 5, M =DIMENSION T3 (N , 0 : M , N
ExempleREAL, ALLOCATABLE : : MAT (: , :)
ExemplesMAT (i , j + k)
ou T3 (1 , i * j , k / i + 2
Exemple
T3 (2 : N , M : 1 : 1 , 1 : M
( 7 en Fortran)
ExempleINTEGER, 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) /)
ExempleINTEGER, POINTER : : P ! pointeur vers un objet entierTYPE maillon ! lment dune liste chaneutorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 5
eux tableaux sont ditsvention, un scalaire est
aux profil explicitetableaux dynamiques).
ucture du tableau est la liste des intervalles
ec
lorsquelle vaut 1.
iquement ; son attributune liste de caractresBLE ( rapprocher de
nsions dtermines, leulues par une instruc-
re laide dune listes) en nombre gal au
de deux manires :
rrespondant unes en progression arith-
ion de premier terme a raison par dfaut est 1s notations simplifiesvalle de dfinition danstervalle en entier (:) ;
Fortran 90 laisse une certaine ambigut dnotationnelle :lidentificateur dclar avec lattribut POINTER dsigne tantt lepointeur, tantt lobjet point, selon le contexte syntaxique ; ainsi :
temp = maillon (10, premier) ! objet pointtemp => premier ! 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 etNULL 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 mmeordre ALLOCATE que pour les tableaux profil diffr.
Fortran 90 permet encore de redfinir dynamiquement unevariable statique ou automatique, voire un paramtre, qui doit alorsrecevoir lattribut TARGET dans sa dclaration (pour permettre aucompilateur doptimiser la gestion des autres variables).
Un pointeur est associ dynamiquement une cible par uneaffectation dadresse (=> ; 4.2.1).
3. Instructions de dclaration
3.1 Typage des objets
Il existe deux sortes dobjets (ou donnes) : les constantes, et lesvariables. 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,
10) + M)
! rang = 2
)
: 2)
n 7
INTEGER valeurTYPE (maillon), POINTER : : succ
END TYPE maillonTYPE (maillon), POINTER : : premier, tempREAL, POINTER : : PVECT (:) ! pointeur vers un vecteur
! rel
ExempleALLOCATE (temp, pvect (0 : 10))
ExempleTARGET : : CIBLE (10, 10)
FORTRAN _____________________________________________________________________________________________________________________________
TouteH 2 120 6
daprs la lettre initiale du nom de lobjet ; soit explicitement, aumoyen dune dclaration de type de lobjet. Par dfaut, tout objetnomm non dclar est du type entier si son nom commence parune lettre de I N, et rel sinon.
Le typage implicite peut tre modifi au moyen dune instructionde dclaration IMPLICIT associant un ensemble de lettres unespcification 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 (pourdes logiciels hautement critiques par exemple), on peut utiliser ladclaration :
IMPLICIT NONE
Une dclaration IMPLICIT se place en premier lieu dans une unitde programme (aprs dventuelles dclarations dimportationUSE : 6).
3.2 Les deux syntaxes orthogonalesde dclaration
En Fortran 77, un objet pouvait avoir au plus quatre proprits.Aussi existait-il une instruction de dclaration spcifique pourchacune :
une dclaration de ty PARAMETER pour les DIMENSION pour les SAVE pour les variab DATA pour initialiser
METER).
Fortran 90 distingue unincompatibles). Plutt queentre autant dinstructions ddu style prcdent (une dproprits dune mme entiAinsi, les deux systmes de
1) LOGICALDIMENSSAVE BO
2) LOGICAL
En Fortran 90, une dcla
spcification de type [, liste
o la spcification de tyindiques au paragraphe 2
Nota : les entits entre crochets sovent figurer zro ou plusieurs fois.
3.3 Liste des attr
Lattribut est (ou commproprit de lobjet. En susPARAMETER pour uDIMENSION (....) pour uSAVE pour uALLOCATABLE pour uPOINTER pour uTARGET pour u
PUBLIC / PRIVATE pour u
EXTERNAL / INTRINSIC pour une procdure transmiseen paramtre
Remarque : lattribut DIMENSION peut tre remplac par unattribut de dimension ( 2.3) plac la suite du nom de lobjet.
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 suitedes calculs mener pour rsoudre un problme donn. Ces ins-tructions comprennent les instructions simples, et des instructionscomposes traduisant la structure algorithmique de lunit.
Ces diverses instructions font intervenir des expressions, ausens mathmatique du terme, que lon prsente en premier lieu.
INTENT (....)
OPTIONAL pour u
ExempleLOGICAL, SAVE : : BOOL (5) reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
pe explicite le cas chant ; constantes nommes ;tableaux ;les rmanentes (statiques) ;les variables (incompatible avec PARA-
e dizaine de proprits (dont certaines dmietter la dclaration dune entite dclaration, on peut dsormais, ct
claration par proprit), regrouper lest dans une dclaration de type explicite. dclarations suivants sont quivalents :
BOOLION BOOL (5)OL
, DIMENSION (5), SAVE : : BOOL
ration complte se prsente donc ainsi :
dattributs] &: : identificateur [= valeur] {, id [=v]}
pe (scalaire) prend lune des formes.1.nt dun usage facultatif, les entits entre accolades peu-
ibuts de dclaration
ence par) un mot-cl dcrivant une du type, on peut ainsi utiliser :ne constante nomme ;n tableau ;ne variable rmanente ;n tableau profil diffr ;ne variable accessible par pointeur ;ne variable redfinissable par pointeur ;
ne entit dclare dans un module ;
4.1 Expressions
Une expression exprime un calcul, et possde une valeur, rsultatde ce calcul lorsque lexpression est value. Elle prend la formedune constante, dune variable (la valeur tant celle de la variableau moment de lvaluation), dun sous-objet (dune constante oudune variable tableau, structure ou chane de caractres), dunconstructeur de tableau ou de structure ( 2.2 et 2.3), dun appelde fonction (prdfinie ou non), dune opration portant sur desfacteurs qui sont des expressions, ou dune expression entreparenthses.
Dans le cas dune expression combinant plusieurs oprateurs,lordre dvaluation repose sur des rgles de priorit entre opra-teurs, comme en algbre :
a + b / c d est ainsi valu comme
Nous avons donn les priorits relatives des oprateurs pourchaque type de donnes ( 2.1). Ces catgories doprateurs sonteux-mmes hirarchiss ainsi, selon lordre croissant des priorits :1) oprateurs logiques2) concatnation3) oprateurs de comparaison4) oprateurs arithmtiques.
Lorsquune opration arithmtique ou de comparaison portesur 2 facteurs de types numriques diffrents, il y a conversion delun des facteurs en une valeur aussi semblable que possible du typede lautre facteur, selon lordre hirarchique croissant des types :
1) entier 2) rel 3) complexe
Lorsquune opration porte sur deux facteurs de mme type maisde paramtres KIND diffrents, le facteur du sous-type le moinsexigeant est converti en une valeur de lautre sous-type.
n paramtre de procdure ;
Exemple :
(0 , 1.0) + 2 donne le complexe (2.0 , 3.0).
Exemple : 4.1 + 3.2 d 0 donne le rel 7.3 d 0 en double prcision.
a bc----- d+
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
Enfin, si les deux facteurs sont scalaires, le rsultat de loprationest scalaire. Si lun est un tableau et lautre un scalaire, le rsultatest un tableau de mme profil que le facteur tableau.
Si les deux facteurs sont des tableaux, ils doivent trecompatibles ( 2.3), le rsultat tant un tableau du mme profil.
Il existe deux catgories dexpressions utilisables dans les dcla-rations, et soumises certaines restrictions spcifiques :
les expressions constantes dinitialisation, utilisables pourinitialiser les variables dans une dclaration de type, ou dfinir lesconstantes nommes.
les expressions de spcification (scalaires de type entier),dfinissant les bornes des tableaux ou les automatiques.
4.2 Instructions simples
4.2.1 Affectation
Laffectation donne une nouvelle valeur variable (scalaire ou tableau). Il y a deux sFortran 90.
Laffectation de valeur classique, prsenteimpratifs :
(sous-)variable = express
o la sous-variable est, le cas chant, une de structure, ou un sous-tableau. Lexpressiopuis sa valeur donne la (sous-)variable, qle cas chant. Expression et variable doiventobligatoirement du mme sous-type sauf ptous deux numriques ; dans ce dernier cas, lest convertie avant affectation si les types di
Si la (sous-)variable est scalaire, lexpresscest un tableau, lexpression doit tre comp
Laffectation dadresse, qui scrit :
(sous-)variable pointeur =>
o la cible peut tre une valeur dadresse (rsultat POINTER), ou un (sous-)objet ayant
4.2.2 Appel de sous-programme
Les sous-programmes, prdfinis ou non, peuvent tre considrsdu point de vue de lutilisateur comme des super-instructionsspcialises. En Fortran, on les appelle laide dune instructionCALL (comme en PL /1) :
CALL < nom du sous-programme > [(liste des arguments dappel)]
Les traitements prdfinis qui, dans dautres langages commePascal ou Ada, se ralisent par lappel de sous-programmes, setraduisent en Fortran par des instructions spcial ises(entres-sorties notamment, 7).
4.2.3 Instruction de branchement GOTO
Lenrichissement algorithmique de Fortran 90 devrait limiterconsidrablement son emploi. Elle scrit :
GOTO tiquette
o ltiquette est un entier positif prfixant linstruction vise.
Exemple
(/ (I , I = 1, 3) / ) + 2 donne le vecteur (/ 3, 4, 5 / )
ExempleINTEGER, PARAMETER : : INDEX (0 : 3) = (/ 1, 0, 2, 4 /)
alors :
INDEX (0 : 2) + INDEX (1 : 3) donne le vecteur (/1, 2, 6 /)
ExemplePARAMETER (MAXI = 50, IRESTE = MOD (MAXI, 6))
ExempleSUBROUTINE SSP (N, C)CHARACTER (LEN = *) C ; DIMENSIO
Exemples ( 2.4) :PREMIER => TEMPPVECT => CIBLE (:
Exemple : figure 1, lignes 52 et 55.utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120
7
longueurs des chanes
tout ou partie duneortes daffectations en
dans tous les langages
ion
sous-chane, un champn est dabord value,ui devient ainsi dfinie tre du mme type (pasour les caractres), oua valeur de lexpressionffrent.
ion doit ltre aussi ; siatible ( 2.3).
cible
pointeur, ou fonction lattribut TARGET.
4.2.4 Instructions de retour
Linstruction (facultative) RETURN dans une procdure permetde quitter cette procdure pour revenir au point dappel.
Linstruction STOP arrte lexcution du programme et redonnela main au systme dexploitation. Le mot-cl STOP est suivi facul-tativement dune chane de caractres, alors affiche par le systme.
4.2.5 Instructions pour lallocation dynamique
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 lexistencede tableaux ALLOCATABLE, comme dobjets points (dans ce derniercas, elles correspondent des procdures prdfinies en Pascal :new (pseudo-fonction en Ada), et
dispose
respectivement).
Dans les deux cas, la variable scalaire optionnelle reoit la valeur 0si tout sest bien pass, et une valeur positive sinon.
En dehors de celles-ci, il existe dautres instructions simplesspcialises pour les entres-sorties ( 7), ou lies aux structuresalgorithmiques ( 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 90disposent dune syntaxe parenthse qui, linstar dAda, lesdispensent de recourir occasionnellement une forme syntaxiquespcifique pour leur associer une squence (comme DO ; .... END ;en PL /1, BEGIN .... END en Pascal, ou {....} en C).
N IV (N + LEN (C))
, 1)
Exemples
ALLOCATE (MAT (0 : N **2, N-1 : N+M) )DEALLOCATE (P, MAT, PVECT)
FORTRAN _____________________________________________________________________________________________________________________________
TouteH 2 120 8
De manire gnrale, Fortran 90 unifie la syntaxe des schmasalgorithmiques sur le modle suivant :
[identificateur:] mot-cl [commande]corps du schma
END mot-cl [identificateur]
Lidentificateur optionnel sert de repre syntaxique, permettant aucompilateur de vrifier lappariement, et amliorant la lisibilit dansle 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) parmiun ensemble de squences places en exclusion mutuelle par leschma.
Lalternative, ou schma de choix logique, scrit :
IF (expression scalaire logique) THENsquence dinstructions excutables
{ELSE IF (expression logique) THENsquence}
[ELSEsquence]
ENDIF
Les expressions sont vsvalue vrai, la squenexpressions ont toutes la vaELSE) est excute si elle e
Ce schma admet une fo
IF (expression logiq
Fortran 90 introduit uneconditionner des affectatio
WHERE (expressionsquence d
[ELSEWHEREsquence d
END WHERE
avec sa forme simplifie :
WHERE (expression
Tous les tableaux figuracompatibles. Lexpressionsquence qui suit WHERE,les seuls lments de tabledu filtre, et faux pour la sq
Le schma de choix propre
SELECT CASE (express
CASE (slecteur1)squence1
{CASE (slecteur)squence}
[CASE DEFAULTsquence]
END SELECT
Lexpression (critre du choix) et les slecteurs sont dun mmetype discret (entier, chane de caractres, voire logique). Chaqueslecteur est une liste de valeurs simples et /ou dintervalles fermsou ouverts de valeurs, chaque valeur tant une expression constantedinitialisation ( 3.1). Lintersection de deux ensembles de valeurscorrespondant 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 elleest prsente.
4.3.2 Boucles DO
Les boucles permettent de rpter volont lexcution dunesquence. En Fortran 90, leur criture subit un profond rajeunisse-ment syntaxique. Elles enrichissent en outre de schmas algorith-
Exemple : figure 1, lign
ExempleWHERE (MAT >
Exemple : (schma de choix numrique ternaire, ancien IFarithmtique) :
SELECT CASE (critre)CASE (: 1) ; PRINT * , critre < 0CASE (0) ; PRINT * , critre nulCASE (+ 1 :) ; PRINT * , critre > 0
END SELECT
reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique
alues (dans lordre), et ds que lunece associe est seule excute ; si lesleur faux, la dernire squence (derrirest prsente.
rme simplifie (appele IF logique) :
ue) instruction simple excutable
forme particulire de lalternative pourns de tableaux :
de tableau logique)affectations de tableaux
affectations de tableaux]
de tableau) affectation de tableau
nt dans un mme schma doivent tre ou filtre est dabord value. Dans la laffectation et lvaluation ont lieu surau correspondant une valeur vrai uence qui suit ELSEWHERE sil y a lieu.
ment dit (choix discret) scrit :
ion scalaire dun type discret)
miques 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 arith-mtique de premier terme a et de raison r extraite de lintervalle[a, b] ( 2.3, notation par triplet), et excute la squence pour chaquevaleur (
0 fois si la progression est vide
).
a, b et r peuvent tre des expressions scalaires quelconques detype entier. Lindice doit aussi tre scalaire et de type entier ; aprssortie normale de la boucle, il est gal la premire valeur de laprogression 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.
Le test darrt dune boucle de recherche WHILE est effectu audbut de chaque itration. Fortran 90 permet de le placer en un pointquelconque du corps de la boucle grce au schma (dit bouclen + 1 /2 de Dijkstra) :
DOsquence1IF (expression logique test darrt) EXITsquence2
END DO
La boucle WHILE correspond une squence1 vide, la bouclerepeat....until du Pascal (ou do....while de C) une squence2 vide.
es 22 32.
0.0) MAT = LOG (MAT) / MAT
Exemple
HARMO = 0.0DO I = 100, 1, 1
HARMO= HARMO + 1.0 / IEND DO
Exemple :
figure
2
, lignes 78-85.
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
Plus gnralement, toute boucle peut coEXIT, ou CYCLE, provoquant les effets suiva
EXIT (instruction de mme nom en Adade quitter la boucle ;CYCLE (continue en C) permet de passe
Figure 2 Exemple de module exportant un t
utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
H 2 120
9
ntenir une instructionnts :
, et
break
en C) permet
r litration suivante.
Ces deux instructions oprent sur la boucle la plus interne lescontenant ; en cas de boucles embotes elles doivent mentionnerlidentifcateur-repre prfixant la boucle concerne si ce nest pasla plus interne.
ype abstrait
FORTRAN _____________________________________________________________________________________________________________________________
TouteH 2 120 10
5. Procdures
5.1 Dfinitions
Les procdures (ou sous-programmes selon les langages, en Adapar exemple) sont dfinies dans larticle Langages de programma-tion. Introduction [H 2 000]. Elles concourent dcouper une appli-cation en units rduites, plus facilement comprhensibles, etaccroissent de ce fait sa maintenabilit.
Une procdure est comparable un programme principal, tant auplan de sa logique dexcution, que de sa structure syntaxique. Ladiffrence majeure est que le programme est lanc par unecommande du systme dexploitation, tandis quune procduresexcute 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) ; ilscorrespondent aux procdures de Pascal ou Ada, et aux fonctionsde type void en C ;
les fonctions (FUNCTION), qui calculent une valeur scalaire outableau (procdure .... returns .... en PL /1), et dont lappel se placedans une expression.
Une procdure admet uparamtres (ou argumendinformation avec lunit a
La figure 1 montre un elignes 16-39), la figure 2 det un de fonction (L_VIDE,
En Fortran 90, une procdprocdures peuvent tre odoit alors tre prfix du m
Fortran offre en outre un (plus dune centaine) ( 8).
5.2 Classificationpar localisati
Il existe trois catgories les procdures extern
formant chacune une unit les procdures de mo les procdures intern
qui ne peuvent pas elles(contrairement aux langageou Ada), ni tre transmises
Les procdures externesthques Fortran. Mais, avecces par des procdures rerelle fiabilit aux appels.
Syntaxiquement les procde leur hte, dans une secCONTAINTS (comme pour
5.3 Paramtres e
Fortran admet des paraduraux. Linstruction dentparamtres : leurs caractrdclarent dans la section d
Fortran 90 reconnat quatre modes de transmission des donnes,dont trois, analogues ceux du langage Ada, se dclarentexplicitement par lattribut INTENT (cf. les diverses procdures desfigures 1 et 2) :
paramtres dentre, qui sont des constantes locales laprocdure (comme en Ada), et reoivent lattribut INTENT (IN) (cestle seul mode existant en C) ;
paramtres rsultats, dfinis par la procdure (qui peut lesutiliser ensuite, contrairement Ada), qui reoivent lattribut INTENT(OUT) ;
les paramtres mixtes ( la fois dentre et rsultats), quireoivent lattribut INTENT (INOUT).
Le mode de transmission par dfaut est le quatrime mode, le seuldisponible en Fortran 77 (cest aussi celui de PL /1) ; retenu par nces-sit de compatibilit, il noffre aucune garantie. Cest lemploi quiest 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 etINOUT), sinon ce peut tre une expression quelconque.
Il ny a pas de mode de transmission explicite pour les paramtresprocduraux. On peut dclarer, comme en Pascal, linterface formelledune procdure paramtre au moyen dun bloc dinterface ( 5.5 et
reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.
Techniques de lIngnieur, trait Informatique
n nombre fixe (ventuellement nul) dets formels) permettant un changeppelante.
xemple de sous-programme (Q_STATS,
autres exemples de sous-programmeslignes 28-33).
ure peut en contenir dautres ( 5.2). Lesptionnellement rcursives : leur entteot-cl RECURSIVE (comme en PL /1).
grand nombre de procdures prdfinies
des procdureson
de procdures selon leur localisation :
es
(les seules existant en Fortran 77), de compilation ;
dule
( 6) ;
es
une autre procdure (leur hte), et-mme contenir de procdure internes structure de bloc comme PL /1, Pascal en argument.
sont les composants actuels des biblio- Fortran 90, elles devraient tre rempla-groupes en modules, garantissant une
dures internes sont regroupes la fintion spcifique introduite par le mot-cl un module : figure
2
).
t modes de transmission
mtres de tout type, y compris proc-te de la procdure cite le nom seul des
istiques et leur mode de transmission seclarative de la procdure.
figure
2
, lignes 67-71).
Largument associ devra tre dclar EXTERNAL dans la proc-dure dappel (ou INTRINSIC si cet argument est une procdure pr-dfinie).
Les paramtres dentre ne peuvent avoir, comme en Ada, devaleur par dfaut explicite, mais Fortran 90 offre un mcanisme plusgnral : les paramtres optionnels, recevant lattribut OPTIONAL.La prsence ou non dun argument associ lors dun appel est dtec-te par la fonction logique prdfinie PRESENT.
Lors de lappel dune procdure, lassociation des argumentsdappel avec les paramtres utilise les deux procds noncsdans 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 souventindispensable lorsque des paramtres optionnels sont omis.
Il doit y avoir identit de sous-type entre arguments et paramtresapparis. Si le paramtre est un tableau, largument doit tre untableau de mme rang ; mais le profil du paramtre nest passpcifi : il hrite de celui de largument (figure
1
, lignes 18 et 20) ;il en est de mme pour la longueur dun paramtre de type chanede caractres. Un tableau paramtre ne peut pas recevoir lattributALLOCATABLE.
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 spcificationfaisant intervenir dautres paramtres.
Exemple
SUBROUTINE P (N, X, RES)INTEGER, INTENT (IN), OPTIONAL : : NREAL, INTENT (OUT), OPTIONAL : : RESIF (PRESENT (N)) THEN ; NN = N
ELSE ; NN = 0 ! valeur par dfaut.ENDIFIF (PRESENT (RES)) RES = ....
Exemple
CALL P (X = 3.0 * A + B, RES = SORTIE) ! N est omis
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
5.4 Caractristiques spcifiquesaux fonctions
Le type dune fonction est soit implicite, soit explicite. Sil est expli-cite, la spcification de son type peut prfixer linstruction FUNCTIONdentte (comme en C ; figure 2, ligne 28), ou figurer dans la sectiondclarative. Ce type doit tre connu au point dappel, au besoin parune dclaration de type du nom de la fonction.
Une fonction renvoie sa valeur par une variable-rsultat qui estnormalement le nom de la fonction (figure 2, ligne 32). Mais on peutaussi suffixer linstruction FUNCTION par une clause RESULT(variable) : cest alors cette variable qui doit tre utilise. Ce dernierprocd est obligatoire si la fonction est RECURSIVE, le nom de lafonction tant alors rserv aux appels rcursifs.
Il faut noter quen Fortran, la variable-variable : elle doit tre dfinie, mais peu(contrairement Pascal).
5.5 Blocs dinterface et app
Les bibliothques de procdures externeprsent offrent le grand inconvnient decompilateur de contrler la validit des appoutil logiciel spcialis). Fortran 90 formalise ulinterface formelle dune procdure : le lutilisateur peut inclure dans son programdans un module : 6).
On y dfinit compltement linterface formprocdures, telle quelle figure dans le texte o( de possibles variations syntaxiques prs, paramtres, lordre des dclarations, etc.). Cse place(nt) dans la section dclarative de l
Au-del de leur intrt en terme de fiabilitont de nombreuses applications.
Rendant visible linterface formelle dunebloc dinterface permet dutiliser lappel asso
Dfinition doprateurs associs desbinaires.
qui, pour deux ensembles A et B, permet volont comme UNION (A, B) ou A + B.
Cette facult nest pas, comme en Ada, rdoprateurs prdfinis : lutilisateur peut c(identificateurs) crits entre deux points (clogiques), par exemple : .IN.
Affectation gnraliseUn 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 premierparamtre :
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 unevariable scalaire entire dtre interprte comme un appel deCHAR_TO_NUM.
GnricitIl faut entendre ce terme la manire de PL /1 : dfinition dun
nom unique pour la mme opration conceptuelle ralise techni-quement par diverses procdures selon le contexte ; en Ada, lqui-valent est assur par la surcharge, ou homonymie naturelle propre ce langage (la gnricit y dfinit un modle paramtr la
ExempleSUBROUTINE SSP (U, X, Y)
DIMENSION U (: , :) ! profil hrit.REAL, INTENT (IN), DIMENSION (SIZE (U,1)) : : X, Y
Exemple : figure 2, lignes 67-71 (pour umais la forme est identique pour toute procd
ExempleINTERFACE OPERATOR (+)
TYPE (ENSEMBLE) FUNCTION UTYPE (ENSEMBLE), INTENT (
ENDEND INTERFACE
utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
H 2 120
11
rsultat est une vraiet ensuite tre value
lications
s thsaurises jusqu ne pas permettre auels (saufs utiliser unn procd pour dcrirebloc dinterface, que
me dappel (ou mieux,
elle dune ou plusieursriginal de la procdure
telles que les noms dese(s) bloc(s) dinterface
unit utilisatrice.
, les blocs dinterfaces
procdure externe, un
ciatif mot-cl
( 5.2).
fonctions unaires ou
dappeler la fonction
serve aux seuls nomsrer ses propres nomsomme les oprateurs
compilation). Ce concept nest pas nouveau en Fortran : depuis lanorme 77, la plupart des fonctions prdfinies sont gnriques.
Ainsi, pour dfinir une opration gnrique dchange de lavaleur de deux variables :
INTERFACE ECHANGER ! la procdure gnrique
SUBROUTINE I_SWAP (I, J)
INTENT (INOUT) : : I, JEND
SUBROUTINE R_SWAP (U, V)
INTENT (INOUT) : : U, VEND
SUBROUTINE MAT_SWAP (M1, M2)
REAL, INTENT (INOUT), DIMENSION (: , :) : : M1, M2END
END INTERFACE
5.6 Macrofonctions
la manire de C (#define), Fortran permet de dfinir desmacrofonctions, dintrt purement local aux units procduralesqui les dfinissent, et destines crire une seule fois une expres-sion de structure donne.
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 Pascaltendu et Modula-2. Le concept est prsent dans larticle
Langagesde programmation. Introduction
[H 2 000] de ce trait. Son adoptionpermet Fortran 90 doprer un saut qualitatif fondamental, et rend
n paramtre procdural,ure).
NION (E1, E2)IN) : : E1, E2
Exemple
IMPLICIT LOGICAL (B)BON_DIM (I, J, K) = K > 0. AND. K < I + JBON_TRIANGLE (I, J, K) = &Bon_dim (i, j, k) .and. Bon_dim (j, k, i).and. Bon_dim (k, i, j)
FORTRAN _____________________________________________________________________________________________________________________________
Toute
H 2 120
12
obsoltes de fait un certain nombre de caractristiques antrieuresparmi les plus discutes (tel le COMMON).
Le module est une unit de programme non excutable exportantun ensemble de ressources logicielles de manire fiable. Compilablesparment, il constituera la base des futures bibliothques decomposants Fortran 90, remplaant terme (en les intgrant) les pro-cdures externes jusqualors seules disponibles.
On distingue gnralement quatre emplois du module, par ordrede complexit croissante :
mise disposition dun ensemble de donnes et de types(largissant le rle traditionnel des COMMON et BLOCK DATAassocis) ;
fonction bibliothque de procdures indpendantes (maisayant un certain rapport smantique) ; dans un premier temps, oncrira des modules de cette nature pour exporter des blocsdinterface ( 5.5) fiabilisant lutilisation des bibliothques Fortranexistantes. 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 estconsult au moyen de procdures exportes par le module ;
classe proprement dite (au sens des langages objets) : cettecatgorie de module exporte un type abstrait de donnes dont lastructure reste secrte, avec son lot de primitives (procdures)publiques dfinissant les oprations sur le type. Tel est le moduleLISTE_D_ENTIERS de la figure
2
, exportant un type abstrait appelLISTE.
En dehors du premier cas, tout module exporte des procduresdont limplmentation est cforme toujours une seule unentre une partie spcificaticache, comme en Pascal en Ada (interface et packagune unit utilisatrice aloconstante, seule la ralisat
Accessoirement, un modexcutable (squence to finale begin en Ada).
6.2 Entits visibl
Par dfaut, toute entit donc visible par lutilisateupar dfaut PUBLIC (quivaalors donner lattribut PRIVdure) cache. on peut inveinstruction de dclaration :
qui oblige ensuite dclaexplicite PUBLIC.
Dans le cas des types comme en Ada :
le type est entirement visible, nom et structure (il a, implici-tement ou explicitement, lattribut PUBLIC) ;
le type est visible, mais sa structure est cache (type t isprivate ; 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 nexistepas en Fortran 90 : laffectation reste toujours utilisable pour un typepriv ; mais le module peut la redfinir ( 5.5).
6.3 Importation des ressourcesdun module
Un module doit tre compil avant toute unit utilisatrice, ce quicre un fichier dcrivant linterface visible du module, gr auto-matiquement par le compilateur.
Fortran 90 confond en une seule dclaration (USE) la foislimportation dun module (clause with en Ada), et la dclaration devisibilit (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 ressourcesvisibles sous leur nom dorigine, sauf en cas de conflit de nom ; on reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
ache. Toutefois, en Fortran 90, le moduleit de compilation : il ny a pas sparationon visible, et une partie implmentationtendu (interface et implmentation) oue body). Cela peut obliger recompiler
rs qu spcification (et smantique)ion technique volue.
ule Fortran na pas de partie optionnellebegin do en Pascal tendu, squence
es et prives
dfinie dans un module est exporte,r du module. Cela correspond lattributlent dexport en Pascal tendu) ; il fautATE toute entit (type, objet ou proc-rser cette situation en introduisant une
PRIVATE
rer toute entit exporte avec lattribut
cartsiens, il existe trois possibilits,
peut nanmoins accder de telles entits en les renommant, lamanire de Pascal tendu.
Ce mme procd est employer si lon recourt deux modulesexportant deux entits distinctes homonymes que lon souhaiteutiliser. Le mlange with / use est compens en Fortran par la pos-sibilit de limiter laccessibilit aux entits visibles dun module,toujours comme en Pascal tendu, laide dune clause ONLY.
La premire dclaration USE permet daccder au module sans enrien importer ; on peut linclure en tte de lunit importatrice pourdes raisons de lisibilit. Si la procdure P est lutilisatrice effectivedu module, la seconde dclaration USE lui donne toute la visibilitrequise.
ExempleUSE Liste_d_Entiers, INT_LISTE => LISTE, L_EMPTY &
=> L_VIDEbaptise localement INT_LISTE et L_EMPTY les entits associes dumodule.
ExempleUSE Liste_d_Entiers, ONLY : ! quivalent dun with Ada............................CONTAINS
SUBROUTINE PUSE Liste_d_Entiers ! quivalent dun use Ada.
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
Plus gnralement, en particulier pour des modules de type biblio-thque, on peut restreindre la liste des entits importes, ventuel-lement en les renommant.
La relation dimportation est transitive : un module M2 importantune entit dun module M1 peut la rexporter librement. On peutlimiter cette rexportation en rendant PRIVATE dans M2 les nomslocaux des entits importes.
7. Entres-sorties
7.1 Fichiers
Paradoxalement, Fortran, langage scientifipose dune assez belle panoplie doutils pouencore enrichie par la rcente norme.
On distingue deux types de fichiers secontenu :
les fichiers de texte, dont les enregistremcontiennent exclusivement des suites de caratext en Pascal ; offerts par le paquetage prcrs sous le contrle dun format ddition stream en PL /1) ;
les fichiers binaires, dont les enregistrde valeurs quelconques (ou fichiers sans fo
Deux mthodes daccs aux enregistremeFortran :
squentielle (offerte en Ada par lesquential_io pour les fichiers binaires ; cePascal ISO) ;
directe par le rang (paquetage direct_io binaires ; type file [....]of.... en Pascal tendu
Sur certains systmes, les fichiers engueur fixe peuvent admettre les deux mth
En Fortran, tout fichier peut tre trait enlecture seulement, ou en modification ; cest u(ACTION =) de linstruction OPEN ( 7.2) qupossible. En accs squentiel, on peut auexistant (grce au paramtre POSITION =OPEN).
Dans un programme Fortran, un fichier estdunit logique, qui est un entier positif ou ndu fichier. Si le fichier est rmanent, il est cun nom externe dfinissable et accessible e
Il existe deux units prdfinies, dnotes *en PL /1, input en Pascal, standard_input en A(sysprint en PL /1, output en Pascal, standamode dexcution dialogu, toutes deux corde lutilisateur ; elles dsignent toujoursquentiel.
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 lexis-tence de f (EXIST =), sur les permissions accordes par le systme(SEQUENTIAL, DIRECT, (UN)FORMATTED), sur les caractristiquesde 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 para-mtres spcifiques (BLANK, DELIM, PAD pour les fichiers de texte ;NEXTREC pour un fichier direct ; POSITION pour un fichiersquentiel).
Remarque : certains de ces paramtres correspondent des fonc-tions prdfinies en Ada (OPENED = correspond is-open,ACTION = correspond mode, NAME = correspond fonction demme nom) et en Pascal tendu (NEXTREC correspond position).
ExempleMODULE M
PRIVATEPUBLIC:: A, B, C, D
..................................PROGRAM principal
USE M, ONLY : B, VLOC => Animporte que B (sous son nom), et A renomm localement VLOC.utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 13
que par excellence, dis-r manipuler les fichiers,
lon la forme de leur
ents (ou composants)ctres (fichiers de typedfini text_io en Ada ;en Fortran, et en mode
ements sont des suitesrmat).
nts sont disponibles en
paquetage prdfinist la seule possible en
en Ada pour les fichiers).
registrements de lon-odes.
criture seulement, enn paramtre spcifique
i dtermine lutilisationssi allonger un fichier append de lordre
dsign par un numroul, choisi louverture
onnu du systme sousn Fortran.
; lune en lecture (sysinda), lautre en criture
rd_output en Ada). Enrespondent au terminals un fichier de texte
Fortran 90 introduit une nouvelle forme de cette instruction :
INQUIRE (IOLENGTH = variable entire) liste de variables
o la liste dcrit la structure des enregistrements dun fichierbinaire ; la variable reoit alors la longueur interne des enregis-trements associs (valeur utilisable ensuite pour le paramtre RECLde linstruction OPEN).
Les units prdfinies (*) sont accessibles sans formalit ds ledbut du programme. Les autres fichiers doivent tre ouvertsavant leur utilisation et associs un numro dunit logique parune instruction :
OPEN ([UNIT =] ul, liste de paramtres dentre)
Les paramtres dfinissent diverses caractristiques gnrales dufichier (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 proc-dure reset correspond ACTION = read.
Une fois le traitement du fichier termin, il est recommand dele fermer par linstruction :
CLOSE ([UNIT =] ul [, STATUS = action prendre])
qui correspond aux procdures close ou delete en Ada (selon lavaleur de STATUS).
Remarque : toutes les instructions dentre-sortie Fortranpeuvent en outre comporter les paramtres suivants :
ERR = tiquette de transfert en cas derreur ;IOSTAT = variable scalaire entire (= 0, 0 en cas derreur), dontla logique correspond celle de STAT pour les instructionsALLOCATE / DEALLOCATE ( 4.2.5).
7.3 Instructions de lecture-criture
Les instructions ci-aprs portent sur un fichier dsign par unnumro dunit logique. Lcriture dun nouvel enregistrement seralise par linstruction :
WRITE (liste de commande) [Liste de donnes]
FORTRAN _____________________________________________________________________________________________________________________________
TouteH 2 120 14
et la lecture dun enregistrement par :
READ (liste de commande) [liste de variables]
En Fortran, les listes dentre-sortie (donnes ou variables) necorrespondent pas ncessairement un objet structure uniquecomme dans la plupart des langages, mme si leur introduction enFortran 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 paramtrePOSITION = rewind de lordre OPEN).
Il existe en outre deux instructions techniquement obsoltes :ENDFILE (ul) et BACKSPACE (ul).
7.4 Fichiers de te
Ils sont dfinis au paragrla correspondance entre lesles caractres qui les repr
par un format dditioordres get /put en PL /1) ;
par liste, ou en forma par noms de donnes
De plus, contrairement auordre READ ou WRITE p(appels lignes dans le cas
Pour les units prdfinordres READ / WRITE avec
READ format [, Liste
PRINT format [, Liste
7.4.1 dition avec fo
Les instructions READ commande loption :
[
et, optionnellement :
ADVANCE = et, en le
Remarque : loption ADVquivalent aux procdures elle, les ordres Fortran REArespectivement).
Lindication de format es(figure 1, ligne 59), ou une dont la valeur est de la for(flist), o flist est une lis
[r] ed o ed est unou /
ned o ned est u(tous au
[r] (flist)r : facteur de rptition (constante entire > 0).
Le principe est de faire correspondre, chaque donne dite, unmodle ddition de donne adapt son type, et dcrire la miseen 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 ensortie (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 dobtenirdiverses variantes de prsentation,
pour une chane de caractres : Aw (avec en sortie troncatureou compltion par des espaces de la valeur dite),
pour une valeur logique : Lw (T / F reprsentent les valeurslogiques),
pour tous types : Gw.s [E.e] o seul w est utilis en dehors dutype rel. reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
xte
aphe 7.1. Il existe trois faons de diriger donnes du programme transfres, etsentent dans les enregistrements :n explicite (quivalent au mode edit des
t libre (dnot * ; mode list en PL /1) ; (NAMELIST ; mode data du PL /1).
x fichiers binaires, lexcution dun seuleut traiter plusieurs enregistrements des fichiers de texte) successifs.
ies, il existe des formes abrges des format explicite ou libre :
de variables]
de donnes]! figure 1, lignes 53-58.
rmat explicite
/ WRITE utilisent dans leur liste de
FMT =] format
cture seulement : SIZE = et EOR =
ANCE = no permet dobtenir un effetprdfinies read et write de Pascal (sansD / WRITE quivalent readln et writeln
t ltiquette dune instruction FORMATexpression de type chane de caractresme :te dlments de la forme : modle ddition de donne (rptable)
n modle non rptabletres modles ddition) ;
Une valeur complexe est transmise laide de deux modles rels ;une structure, laide dautant de modles que de champs scalaires.
Modles prcisant ldition numriqueBN, 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. Linter-
prtation des autres espaces est dirige par le contrle despace envigueur (cf. BLANK =, BN, BZ).
la lecture dun rel, un point dcimal dans le champ lu sup-plante lindication du modle.
En sortie, la reprsentation est cadre droite. Si la valeur trans-mise est trop grande pour tre reprsentable selon le modle, le pro-cesseur produit un champ de w astrisques.
Modles de positionnement des champsLa 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 modleslibell 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 champsen lecture, et des lourdes laborations de format en sortie. Lindi-cation de format est alors remplace par * .
Chaque ordre dentre-sortie traite un ensemble de caractresplacs sur une ou plusieurs lignes, et formant une suite de valeurs :constante ou valeur vide (le cas chant rpte par un facteur de
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
rptition r*), spares par une virgule ou un espace et, en entre,termines le cas chant par /
7.4.3 dition dirige par noms
Poursuivant des buts voisins du format libre, ce mode dditionvise accrotre la lisibilit des donnes sur le support externe. Mal-heureusement, il rompt lindpendance donnes-programme. Leprincipe consiste associer chaque type darticle logique dufichier un nom de liste gnrique, quivalent un nom de struc-ture, dont les champs sont dfinis par une dclaration :
NAMELIST / nom darticle / liste des noms des champs
Dans le fichier, les donnes relatives un article logiquecommencent par & nom de larticle, et se terminent par /. Les valeursdes divers champs sont indiques sous forme daffectationsspares par des virgules.
Les instructions dentre-sortie prennent la forme :READ ([UNIT =] ul, [NML =] nomWRITE ([UNIT =] ul, [NML = ] nom
avec toujours les options facultatives ERR lecture.
7.4.4 Fichiers internes
Fortran permet de considrer une c((sous-)objet variable) comme un pseudo-fichet un (sous-)tableau de chanes comme un filignes que dlments dans le tableau. Un fichtrait avec format explicite.
8. Liste des procduprdfinies
Ces procdures font partie intgrante de laet sont donc disponibles sur tous les compigralement la norme. Du point de vue de leur tingue quatre sortes de procdures prdfin
Les procdures distributives, oprant surscalaires, mais applicables des tableaux ; alors un tableau de mme profil, rsultant fonction aux lments du ou des arguments
Les fonctions attributs, ou dinterrogation, qui fournissent uneproprit de leur argument principal indpendamment de sa valeur(qui peut mme tre indtermine) ; elles correspondent en Ada auconcept dattribut.
Les fonctions de transformation : toutes les autres fonctions ;elles portent gnralement sur des tableaux.
Les sous-programmes non distributifs.Linterface dune procdure prdfinie est toujours visible, ce qui
permet les deux formes dappel ( 5.3), et autorise la prsence deparamtres optionnels ; lorsquils sont mentionns, ils apparaissentici en lettres minuscules.
Remarque : lorsquune procdure prdfinie est transmise enargument (ce qui est possible en Fortran, contrairement Pascal), laprocdure dappel doit la dclarer INTRINSIC.
8.1 Fonctions distributives
Exemple de ligne en entre (remarque : 2* rpte la valeur vide) :
Bonjour 50 * 1.5 (2.5E3, 3.14) 2* ,1 3
ExempleDIMENSION A (9) ; CHARACTER * 20 TENAMELIST / ARTICLE / TEXTE , Z , AREAD (* , NML = ARTICLE)
peut lire les lignes suivantes :&ARTICLE TEXTE = EXEMPLE, Z = (0
A (1) = 47, A (4:8) = 5 * 0.6 /
ExempleCHARACTER (12) : : TEWRITE (TEXTE , 10) SO
10 FORMAT (F12.2, TL3 ,
Exemple : ABS (( / 3 , 2 , 7 /)) donne le v
ExempleINTRINSIC COSCALL CALCUL (COS, ....)utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 15
darticle) darticle)
/ IOSTAT, et END = en
hane de caractresier interne dune ligne,
chier form dautant deier interne est toujours
res
dfinition du langage,lateurs respectant int-mode de calcul, on dis-ies en Fortran 90.
des arguments a prioriles fonctions renvoientde la distribution de la.
8.1.1 Fonctions de conversion
Ces fonctions ont toutes un paramtre optionnel KIND, prcisantle 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 (FLOORet CEILING), partie imaginaire (AIMAG (Z)).
8.1.3 Fonctions mathmatiques
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 varianteATAN2 (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 etIACHAR), 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 sarciproque SET_EXPONENT), et quelques fonctions trs spcialises(NEAREST, SCALE, SPACING, RRSPACING).
XTE ; COMPLEX Z
, 2),
XTEMME
,)
ecteur ( / 3, 2 , 7 /)
FORTRAN _____________________________________________________________________________________________________________________________
TouteH 2 120 16
Remarque : SPACING (X) donne la valeur absolue du dernier bit dela reprsentation de X, et permet par exemple de mettre en uvre lamthode de perturbation et permutation de Vignes.
8.1.6 Fonctions de traitement du bit( arguments entiers)
Oprations logique bit bit (NOT, IAND, IOR, IEOR), dcalages(absolu ISHFT, circulaire ISHFTC), accs au bit (BTEST et ses rci-proques 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 (detype logique) (cf. loprateur ? en C).
8.2 Fonctions-attributs
8.2.1 Fonctions gnrales
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.
8.2.2 Caractristiques des types numriques
ExternesEPSILON, PRECISION, H
RANGE (rciproque de r da
InternesBIT_SIZE pour un entier, M
un rel et, pour les deuxsignificatifs ; attribut de m
8.2.3 Fonctions relat
ALLOCATED (ARRAY) tesALL
LBOUND (ARRAY, dim) et Ubor
SHAPE (SOURCE) donSIZE (ARRAY, dim) don
abs
8.3 Fonctions de transformation
8.3.1 Fonctions sur tableaux
Un certain nombre de ces fonctions ont un paramtre optionnel :
DIM (entier scalaire) spcifiant une dimension(
MASK (logique) filtre dapplication de la fonction.
Application dune opration aux lments dun tableauMINVAL 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.
Fonctions de calcul matricielDOT_PRODUCT produit scalaire.MATMUL produit matriciel.TRANSPOSE transpose dune matrice.
Autres fonctionsRESHAPE fonction de restructuration
(figure 1, lignes 26-29).PACK construit un vecteur dlments
(figure 1, lignes 26-27).UNPACK fonction inverse de PACK.SPREAD construit un tableau par duplication dun
autre.EOSHIFT, CSHIFT dcalages (avec expulsion, ou circulaire).
1 dim rang du tableau argument). reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique
UGE (+), TINY (plus petit rel > 0),ns une fonction SELECTED_t_KIND).
INEXPONENT et MAXEXPONENT pour types : DIGITS (nombre de chiffresme nom en Ada), et RADIX.
ives aux tableaux
t dexistence dun tableauOCATABLE ( 2.3).BOND (ARRAY, dim)
nes du tableau.ne le profil de son argument.ne une tendue (la taille si dim estent) du tableau.
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 STRINGTRIM (STRING) chane STRING moins ses espaces finaux.TRANSFER transfert de type
(cf. unckecked_conversion en Ada.)
8.4 Sous-programmes prdfinis
RANDOM_SEED initialise ou interroge le gnrateurpseudo-alatoire.
RANDOM_NUMBER fournit un (tableau de) rel(s)pseudo-alatoire(s).
DATE_AND_TIME fournit la date et lheure (figure 1,ligne 52).
SYSTEM_CLOCK consultation de lhorloge interne.MVBITS transfert de bits entre entiers (procdure
distributive).
____________________________________________________________________________________________________________________________ FORTRAN
Toute reproduction sans a
9. Conclusion
Fortran vient de soffrir une vritable rvolution culturelle, au bonsens du terme, Des constructions saines et rigoureuses, accroissantle pouvoir dexpression du langage et amliorant la fiabilit desprogrammes, sont venues balayer un certain nombre de conceptionsarchaques. Fortran sort ainsi renforc dans son domaine deprdilection : le calcul intensif, tout en rejoignant enfin ! lesproccupations du gnie logiciel. Toutefois, cette modernisationpousse a d conserver les caractristiques obsolescentes deFortran 77, pour dvidents motifs de rutilisation du code existant :cela entrane la co-existence actuelle de deux styles dcritureantinomiques, alourdissant considrablement les compilateurs jusquau niveau de lanalyse lexicale ! De mme, si le professionnelde la programmation ne peut quaccueillir avec faveur le rajeunis-
sements de son langage de prdilection, le scientifique ou letechnicien, utilisateur occasionnel, pourra rester perplexe devant sacomplexification apparente : sensibilisation et formation doiventtre les rponses leur apporter.
Nous lavons dit ds lintroduction, Fortran 90 nest quune tapedans un processus de progrs dsormais irrversible. Dores et djlavenir se prpare lhorizon 2000 est pour demain et des groupesdexperts sont actuellement au travail pour enrichir encore Fortran :le domaine du temps rel (Fortran Haute Performance ), celui dela programmation par objets sont des voies intensivementexplores, ct dautres amliorations importantes comme la ges-tion des exceptions.
Reprenant la conclusion de la version prcdente de cet article,il est plus que jamais permis dajouter : les dveloppements quenous venons de mentionner font penser que Fortran connatraencore de beaux jours au XXIe sicle. utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 17
Do
c. H
2 1
20
12 -
199
3
Toute reproductioest strictem
POUR
EN
SAV
Fortran
par Patrice LIGNELETcole Nationale Suprieure dlectronique et de ses Applications (ENSEA)(division des Administrateurs)Animateur du groupe Fortran lAFNOR
Caractristiques obsolescentesLa norme indique comme telles des caractristiques de Fortran 77 sexpri-
mant de meilleure faon en Fortran 90, et voues une probable disparitionds la prochaine norme. Tout compilateur doit en signaler lemploi dans un pro-gramme. Elles comprennent des caractristiques dj obsolescentes de fait enFortran 77 (le descripteur Hollerith nH, linstruction PAFORMAT dfinies par ASSIGN), de douteux apports deparamtres de boucles rels !, branchement vers ENDIFIF), danciennes caractristiques rendues obsolconstructions : IF arithmtique ternaire (utiliser un CASun schma IF pour les rels), boucles DO embotes fininstruction excutable (utiliser un END DO propre chet GOTO assign (utiliser une procdure interne), ettristiques officiellement normalises par Fortran 77 (pquette (*) et retour ventil, remplacer par un code de ret
Beaucoup dautres constructions, bien que non dcompte tenu de leur taux demploi lev, le sont deven
le format fixe de texte source avec zonage rigide (et espaces nonsignificatifs) ;
les zones communes (COMMON) et (BLOCK DATA) associs,remplaces chacune par un module ;
NorComme pour Ada, le module permet dsormais d
alourdir sa grammaire. Divers services logiciels spcialofferts au programmeur Fortran, laide de module lesdune norme auxiliaire supplmentaire rattache lalangage.
Un type chane de caractres de longueur variable (cest en voie dadoption. Le module sappelle ISO_VARYINle type abstrait VARYING_STRING, et lunifie avec le tmanire de Pascal tendu). Cest ainsi que toutes les oapplicables au type CHARACTER le deviennent au n
DLhtrognit et la complexit croissantes du langa
grands constructeurs acclrer la commercialisatnont-ils pas souvent introduit dans leur implmentationnombre dextensions recoupant quelques unes des caramais avec une syntaxe divergente ? Devant cette carencfournisseurs spcialiss, plus dynamiques, ont su prendfaire appel :
NAG (Numerical Algorithms Group, Oxford), quFortran 90 (f90) sur :
DEC station 3100, HP9000 / 700, IBM Risc system /6000, 4D, SUN 3 et 4 Unix 4.2 bsd, Apollo Domain : F90 verdisponible sur HP9000 /400 et VAX /VMS).
Ces compilateurs, crits en C, oprent en plusiepremiers traduisent le code Fortran 90 en C.
Ils sont commercialiss, hors maintenance, des pri 12 000 F (mars 1993). noter lexistence dune versioseur INTEL 386 SX ou +, propose 990 FH.T.
Salford Software offre un compilateur de mme nboration avec NAG) pour PC systmes DOS ou UNSoftware Marketing Ltd., Maxwell Building, The CresGrande-Bretagne).n sans autorisation du Centre franais dexploitation du droit de copieent interdite. Techniques de lIngnieur, trait Informatique Doc. H 2 120 1
OIR
PLUS
USE, les tiquettes de Fortran 77 (indices ou depuis lextrieur duntes par de nouvelles
E pour les entiers, ou commune, ou sur uneaque boucle), ASSIGN mme certaines carac-aramtres de type ti-our test par un CASE).
clares obsolescentesues de fait :
lassociation de mmoire (EQUIVALENCE), remplace par les pointeurset 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.
mes auxiliaires supplmentairestendre le langage sansiss pourront ainsi tre faisant chacun lobjet norme principale du
har (n) varying en PL /1G_STRING ; il exporte
ype CHARACTER ( laprations ou fonctionsouveau type, voire en
mlangeant les deux types le cas chant. Des procdures spcifiques sontajoutes :
VAR_STR (CHAR) pour convertir explicitement largument CHARacteren 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 entreFortran et des normes relatives dautres domaines (le traitement graphique,le langage daccs aux bases de donnes SQL, le systme dexploitationPOSIX, etc.)
isponibilit des compilateursge nincitent gure les
ion de compilateurs ; de Fortran 77 un certainctristiques nouvelles,e provisoire, quelquesre le relai. On peut ainsi
i offre un compilateur
NeXT, Silicon Graphicssion 2 (la version 1 est
urs passes, dont les
x hors taxes de 5 940 Fn de base pour proces-
ature (ralis en colla-IX (FTN 90). (Salford
cent, Salford M5 4WT,
Pacific-Sierra Research diffuse le produit VAST-90, qui traduit le codeFortran 90 en Fortran 77 de lancienne norme (qui peut ensuite tre pris en chargepar un compilateur Fortran 77, avec une bibliothque complmentaire pourcertaines procdures prdfinies). Ce mme produit peut rcrire en Fortran 90du code Fortran 77 existant. (Pacific-Sierra Research Corp., Computer ProductsGroup, 12340 Santa Monica Belvedere, Los Angeles, CA 90025).
La socit amricaine PARASOFT diffuse un autre traducteur deFortran 90 en Fortran 77 (Parasoft Corp., 2500 E, Foothill Belweder Pasadona,CA 91107).
Autres compilateurs : Microway (pour systme DOS, OS /2 et Unix) ; EPCpour Sparc Solaris 1.x et 2.x, IBM RS /6000, Intel 3 /486 (SVR 384, Solaris 2.x),Motorola 88000 /100/100 (SVR 384).
Un compilateur maison pour IBP 9000 vient dtre install chez certainsclients privilgis. On annonce encore un compilateur chez Hewlett-Packard,chez SUN (partiellement construit partir du compilateur NAG), chez DigitalEquipement (DEC), chez CRAY (CF90, version Sparc), Microsoft, Lahey,Portland, ACRI (pour machine Alpha)...
FORTRAN _____________________________________________________________________________________________________________________________POUR
EN
SAVOIR
PLUS
Toute reproduction sans autorisDoc. H 2 120 2 est strictement interdite.
BibliographieABERTI (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 Fortran90 Hand-book . Unicomp (1992).
COUNIHAN. Fortran 90 . Pitman (1991).DELANNOY (C.). Programmer en Fortran 90 .
Eyrolles (1993).
DUBESSET (M.) et VIGNES (J.). Les spcificationsdu Fortran 90. Technip (1993).
KERRIGAN (J.). Migrating to Fortran 90 . OReilly(1993).
LIGNELET (P.). Fortran 90. Approche par laPratique . 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. Ouvragetraduit en franais par PICHON (B.) et CAILLAT
(M.) sous le titre Fortran 90 : les conceptsfondamentaux . AFNOR ditions (1993).
METCALF (M.). A first Encounter with Fortran90 (using the NAG f90 compiler). Fortran Jour-nal, vol. 4, no 1, p. 2-8, janv.-fv. 1992.
Cet article est extrait de la revue bimestrielleFORTRAN JOURNAL, The Journal of the FortranUser Community (P.O. Box 201, Fullerton, CA92634. En France, voir la socit OPTIMIZE : cf.Annexe 3).MORGAN et SCHONFELDER. Programming in
Fortran 90 . Blackwell (1993).
NormalisationNorme internationaleISO /IEC 1539 1991 Programming language Fortran. ISO /IEC 1539-2 [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.ation du Centre franais dexploitation du droit de copie Techniques de lIngnieur, trait Informatique
Fortran1. Structure gnrale du langage1.1 Exemple de programme Fortran 901.2 Architecture des programmes1.3 Structure lexicale
2. Types et oprateurs2.1 Types scalaires prdfinis2.2 Types structures (ou drivs)2.3 Tableaux2.4 Objets points
3. Instructions de dclaration3.1 Typage des objets3.2 L