Vous êtes sur la page 1sur 333

Langage Fortran

(Base)
Anne Fouilloux
Patrick Corde
anne.fouilloux@ecmwf.int
Patrick.Corde@idris.fr

26 mai 2015

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

1 / 266

Table des matires I


1

Introduction
Historique
bibliographie
documentation

Gnralits
Bases de numration
Reprsentation des donnes
Reprsentation
Reprsentation
Reprsentation
Reprsentation
Reprsentation

des
des
des
des
des

entiers
rels
complexes
logiques
caractres

Jeu de caractres
Notion dunit de programme
lments syntaxiques
Format libre
Commentaires
3

Dclarations
Identificateurs
Diffrents types
Syntaxe
Le type CHARACTER
Instruction IMPLICIT NONE
Constantes littrales
Constantes entires
Constantes relles simple prcision

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

2 / 266

Table des matires II


Constantes relles double prcision
Constantes complexes
Constantes chanes de caractres

Initialisation
Linstruction DATA
Le symbole =

Constantes symboliques
Instruction EQUIVALENCE
4

Oprateurs et expressions
Oprateurs arithmtiques
Oprateurs relationnels
Oprateurs logiques
Oprateur de concatnation
Oprateur daffectation
Priorit des Oprateurs

Structures de contrle
Les tests
Le bloc IF
Le bloc SELECT-CASE

Les itrations
Linstruction GOTO
Les bloucles DO
6

Tableaux
Dclaration
Dfinitions (rang, profil, tendue)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

3 / 266

Table des matires III


Initialisation
Le symbole "="
Le constructeur de vecteurs
Linstruction DATA

Manipulation de tableaux
Expressions de type tableau

Sections de tableaux
7

Entres-Sorties
Introduction
Accs squentiel
Fichier binaire squentiel
Fichier texte squentiel

Accs direct
Fichier binaire accs direct
Fichier texte accs direct

Fichier temporaire
Destruction dun fichier
Fichier interne
Instructions de positionnement
Instruction INQUIRE
Formats BOZ
Units standards
Instruction FORMAT
Mots-cls END=, ERR=
8

Procdures
Arguments

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

4 / 266

Table des matires IV


Subroutines
Fonctions
Arguments de type chane de caractres
Arguments de type tableau
Arguments de type procdure
Procdures internes
Dure de vie et visibilit des identificateurs
Procdures intrinsques

Common
Linstruction COMMON
Common blanc
Common tiquet
Initialisation : BLOCK DATA
Instruction SAVE et COMMON

Rgles et restrictions

10

Include
La directive INCLUDE

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

5 / 266

Introduction

Introduction
Historique
bibliographie
documentation

Gnralits

Dclarations

Oprateurs et expressions

Structures de contrle

Tableaux

Entres-Sorties

Procdures

Common

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

6 / 266

Introduction

Historique

Code machine (notation numrique en octal) ;


Assembleurs de codes mnmoniques ;
1954 : projet cration du premier langage
symbolique FORTRAN par John Backus dIBM (Mathematical FORmula TRANslating System) :
Efficacit du code gnr (performance) ;
Langage quasi naturel pour scientifiques (productivit, maintenance, lisibilit).
1957 : Livraison des premiers compilateurs ;
1958 : Fortran II (IBM) sous-programmes compilables de faon indpendante.
Gnralisation aux autres constructeurs mais :
divergences des extensions ncessit de normalisation ;
ASA American Standards Association (ANSI American Nat. Standards Institute). Comit charg du
dveloppement dune norme Fortran.
1966 : Fortran IV (Fortran 66) ;
volution par extensions divergentes. . .
1977 : Fortran V (Fortran 77).

quasi compatible :
aucune itration des boucles nulles (DO I=1,0)
Nouveauts principales :
type caractre ;
IF-THEN-ELSE ;
E/S accs direct et OPEN.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

7 / 266

Introduction

Historique

Travail des comits X3J3/ANSI et WG5/ISO pour moderniser Fortran 77 :


Standardisation : inclusion dextensions ;
Dveloppement : nouveaux concepts dj exploits par langages plus rcents APL, Algol, PASCAL, Ada ; . . .
Performances en calcul scientifique ;
Totalement compatible avec Fortran 77.
1991/1992 : Norme Fortran 90 (ISO et ANSI) ;
1994 : Premiers compilateurs Fortran 90 Cray et IBM ;
1997 : Norme Fortran 95 (ISO et ANSI) ;
1999 : Premiers compilateurs Fortran 95 sur Cray T3E puis IBM RS/6000 ;
septembre 2004 : Norme Fortran 2003 (ISO et ANSI) ;
octobre 2010 : Norme Fortran 2008 (ISO et ANSI).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

8 / 266

Introduction

bibliographie

Adams, Brainerd, Hendrickson, Maine, Martin, Smith, The Fortran 2003 Handbook, Springer,

2009, (712 pages), ISBN 978-1-84628-378-9 ;


Adams, Brainerd, Martin, Smith et Wagener, Fortran 95 Handbook, MIT Press, 1997, (711 pages),

ISBN 0-262-51096-0 ;
Brainerd, Goldberg, Adams, Programmers guide to Fortran 90, 3e dit. Unicomp, 1996, (408 pages),

ISBN 0-07-000248-7 ;
Arjen Markus, Modern Fortran in Practice, Cambridge University Press, juin 2012, (272 pages),

ISBN 978-1-10760-347-9 ;
Chamberland Luc, Fortran 90 : A Reference Guide, Prentice Hall, ISBN 0-13-397332-8 ;
Delannoy Claude, Programmer en Fortran 90 Guide complet, Eyrolles, 1997, (413 pages),

ISBN 2-212-08982-1 ;
Dubesset M., Vignes J., Les spcificits du Fortran 90, ditions Technip, 1993, (400 pages),

ISBN 2-7108-0652-5 ;
Ellis, Phillips, Lahey, Fortran 90 Programming, Addisson-Wesley, 1994, (825 pages),

ISBN 0-201-54446-6 ;
Hahn B.D., Fortran 90 for the Scientist & Engineers, Edward Arnold, London, 1994, (360 pages),

ISBN 0-340-60034-9 ;

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

9 / 266

Introduction

bibliographie

Kerrigan James F., Migrating to Fortran 90, OReilly & Associates Inc., 1994, (389 pages),

ISBN 1-56592-049-X ;
Lignelet P., Fortran 90 : approche par la pratique, ditions Studio Image (srie informatique), 1993,

ISBN 2-909615-01-4 ;
Lignelet P., Manuel complet du langage Fortran 90 et Fortran 95, calcul intensif et gnie logiciel, Col.

Mesures physiques,Masson, 1996, (320 pages), ISBN 2-225-85229-4 ;


Lignelet P., Structures de donnes et leurs algorithmes avec Fortran 90 et Fortran 95, Masson, 1996, (360

pages), ISBN 2-225-85373-8 ;


Morgan and Schoenfelder, Programming in Fortran 90, Alfred Waller Ltd., 1993, ISBN 1-872474-06-3 ;
Metcalf M., Reid J.,
Fortran 90 explained, Science Publications, Oxford, 1994, (294 pages), ISBN 0-19-853772-7, Traduction
franaise par Pichon B. et Caillat M., Fortran 90 : les concepts fondamentaux, ditions AFNOR, 1993,
ISBN 2-12-486513-7 ;
Fortran 90/95 explained, Oxford University Press, 1996, (345 pages), ISBN 0-19-851888-9 ;
Fortran 95/2003 explained, Oxford University Press, 2004, (416 pages), ISBN 0-19-852693-8 ;

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

10 / 266

Introduction

bibliographie

Olagnon Michel, Traitement de donnes numriques avec Fortran 90, Masson, 1996, (364 pages),

ISBN 2-225-85259-6 ;
Redwine Cooper, Upgrading to Fortran 90,

Springer, 1995, ISBN 0-387-97995-6 ;


International Standard ISO/IEC 1539-1:1997(E) Information technology - Progr. languages - Fortran -

Part1 : Base language. Disponible auprs de lAFNOR.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

11 / 266

Introduction

documentation

Documentation IBM/Blue Gene/Q :


Getting Started with XL Fortran
Compiler Reference
Language Reference
Optimization and programming guide

disponibles sur le serveur Web IDRIS ladresse : http://www.idris.fr/turing/doc-ibm.html


Documentation gnrale
Supports de cours Fortran 95 IDRIS :
http://www.idris.fr/data/cours/lang/fortran/choix_doc.html
Manuel "Fortran 77 pour dbutants" (en anglais) :
http://www.idris.fr/data/cours/lang/fortran/F77.html
The Fortran Company :
http://www.fortran.com
tat davancement de lintgration de la norme Fortran 2003 :
http://fortranwiki.org/fortran/show/Fortran+2003+status
tat davancement de lintgration de la norme Fortran 2008 :
http://fortranwiki.org/fortran/show/Fortran+2008+status

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

12 / 266

Gnralits

Introduction

Gnralits
Bases de numration
Reprsentation des donnes
Reprsentation
Reprsentation
Reprsentation
Reprsentation
Reprsentation

des
des
des
des
des

entiers
rels
complexes
logiques
caractres

Jeu de caractres
Notion dunit de programme
lments syntaxiques
Format libre
Commentaires
3

Dclarations

Oprateurs et expressions

Structures de contrle

Tableaux

Entres-Sorties

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

13 / 266

Gnralits

Procdures

Common

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

14 / 266

Gnralits

Bases de numration

Soit un nombre n dont lcriture en base b est de la forme :


(up up1 ....u1 u0 )b
avec :
i {0, 1, ..., p} 0 ui < b
La valeur du nombre n en base 10 est :
n10 =

Pp
i=0

ui b i

Les ordinateurs ne savent calculer quen base 2, de ce fait les donnes stockes dans la mmoire le sont sous la
forme dune suite de chiffres binaires 0 et 1 appels bits abrviation de binary digits. Un ensemble de 8 bits
sappelle un octet.
Lcriture des donnes en base 2 se rvle fastidieuse. Par commodit, on adopte plutt la base 8 (base octale)
ou la base 16 (hexadcimale) pour les dfinir.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

15 / 266

Gnralits

Bases de numration

Lcriture dun nombre en octal seffectuera laide des chiffres de 0 7.


Lcriture dun nombre en hexadcimal seffectuera laide des chiffres de 0 9 auxquels on ajoute les lettres de
a f.
Supposons que lon dispose de lcriture dun nombre en base 2. Sa conversion en octal peut tre faite en
dcoupant le motif binaire par tranches de 3 bits en partant de la droite, puis en convertissant en base 10 chaque
groupe obtenu.
Sa conversion en hexadcimal pourra seffectuer de la mme manire laide dun dcoupage par tranches de 4
bits.
Exemple
10011101012
10011101012
10011101012

=
=
=
=

1 20 + 1*22 + 1*24 + 1*25 + 1*26 + 1*29


62910
1|001|110|1012 = 11658
10|0111|01012 = 27516

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

16 / 266

Gnralits

Reprsentation des donnes

Reprsentation des entiers

Dans la mmoire de lordinateur, les donnes numriques sont reprsentes laide dun motif binaire de
longueur 32, 64 voire 128 bits.
La reprsentation en machine dun nombre entier positif correspond son criture en base 2. Pour lobtenir, il
suffit de procder des divisions successives par 2.
Les nombres entiers ngatifs sont reprsents en complment vrai ou complment 2 qui consiste, partir du
motif binaire du nombre positif, inverser tous les bits puis dajouter 1.
De ce fait, sur n bits, les nombres reprsentables sont les suivants :
2n1 i 2n1 1
Exemple

+510
-510
-510
-510

=
=
=
=

000000000000000000000000000001012
111111111111111111111111111110102 + 1
111111111111111111111111111110112
FFFFFFFB16

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

17 / 266

Gnralits

Reprsentation des donnes

Reprsentation des rels

Un nombre rel ou flottant est caractris par :


1

son signe ;

son exposant ou caractristique ;

sa mantisse.

Son mode de reprsentation est un motif binaire respectant la norme IEEE.


Reprsentation dun nombre rel sur 32 bits
Ce type de rel, appel rel simple prcision, admet un motif binaire de la forme :
seeeeeeeemm
avec :
s : bit de signe ;
e : exposant sur 8 bits excdent 127 ;
m : mantisse sur 23 bits.

Le nombre reprsent correspond r = s1.m 2e127

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

18 / 266

Gnralits

Reprsentation des donnes

Ce type de reprsentation permet de reprsenter les nombres :


1.21038 |r | 3.410+38
avec 6 chiffres significatifs.
Reprsentation dun nombre rel sur 64 bits
Ce type de rel, appel rel double prcision, admet un motif binaire de la forme :
seeeeeeeeeeemm
avec :
s : bit de signe,
e : exposant sur 11 bits excdent 1023,
m : mantisse sur 52 bits.

Le nombre reprsent correspond r = s1.m 2e1023


Ce type de reprsentation permet de reprsenter les nombres :
2.210308 |r | 1.810+308
avec 15 chiffres significatifs.
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

19 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100

101

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
001

101
1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
0011

101
1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
0011

101
10

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110

101
10

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001

101
101

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
000010

101
101

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
000010

101
1010

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
0000100

101
1010,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
0000100

101
1010,0

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000

101
1010,0

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
00000011

101
1010,01

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110

101
1010,01

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,011

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,01100110011

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,011001100110011

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Lcriture en binaire du nombre rel 10,4 est finalement :


10,410 = 1010,01100110011001100110...2

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Lcriture en binaire du nombre rel 10,4 est finalement :


10,410 = 1010,01100110011001100110...2 = 1,01001100110011001100110...23

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Lcriture en binaire du nombre rel 10,4 est finalement :


10,410 = 1010,01100110011001100110...2 = 1,01001100110011001100110...23
= 1,01001100110011001100110...2130-127

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Lcriture en binaire du nombre rel 10,4 est finalement :


10,410 = 1010,01100110011001100110...2 = 1,01001100110011001100110...23
= 1,01001100110011001100110...2130-127

On en dduit alors le motif binaire suivant :


0

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Lcriture en binaire du nombre rel 10,4 est finalement :


10,410 = 1010,01100110011001100110...2 = 1,01001100110011001100110...23
= 1,01001100110011001100110...2130-127

On en dduit alors le motif binaire suivant :


010000010
| {z }

exposant 130

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Lcriture en binaire du nombre rel 10,4 est finalement :


10,410 = 1010,01100110011001100110...2 = 1,01001100110011001100110...23
= 1,01001100110011001100110...2130-127

On en dduit alors le motif binaire suivant :


010000010
| {z }01001100110011001100110
|
{z
}
exposant 130

mantisse (23bits)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 32 bits

On peut crire ce rel sous la forme suivante :


10,4 =

104
10

52
5

1101002
1012

Voici ce que donne la division binaire :


110100
00110
00001000
000000110
000000001

101
1010,0110011001100110011...

Lcriture en binaire du nombre rel 10,4 est finalement :


10,410 = 1010,01100110011001100110...2 = 1,01001100110011001100110...23
= 1,01001100110011001100110...2130-127

On en dduit alors le motif binaire suivant :


010000010
| {z }01001100110011001100110
|
{z
} = 4126666616
exposant 130

mantisse (23bits)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

20 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il suffit de prolonger son criture binaire dautant. On obtient :
10,410 = 1010,0110011001100110011001100110011001100110011001100...
= 1,0100110011001100110011001100110011001100110011001100...23
= 1,0100110011001100110011001100110011001100110011001100...21026-1023

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

21 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il suffit de prolonger son criture binaire dautant. On obtient :
10,410 = 1010,0110011001100110011001100110011001100110011001100...
= 1,0100110011001100110011001100110011001100110011001100...23
= 1,0100110011001100110011001100110011001100110011001100...21026-1023

On en dduit alors sa reprsentation interne :


10,4 I

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

21 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il suffit de prolonger son criture binaire dautant. On obtient :
10,410 = 1010,0110011001100110011001100110011001100110011001100...
= 1,0100110011001100110011001100110011001100110011001100...23
= 1,0100110011001100110011001100110011001100110011001100...21026-1023

On en dduit alors sa reprsentation interne :


10,4 I 0

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

21 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il suffit de prolonger son criture binaire dautant. On obtient :
10,410 = 1010,0110011001100110011001100110011001100110011001100...
= 1,0100110011001100110011001100110011001100110011001100...23
= 1,0100110011001100110011001100110011001100110011001100...21026-1023

On en dduit alors sa reprsentation interne :


10,4 I 0 10000000010
| {z }
exposant 1026

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

21 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il suffit de prolonger son criture binaire dautant. On obtient :
10,410 = 1010,0110011001100110011001100110011001100110011001100...
= 1,0100110011001100110011001100110011001100110011001100...23
= 1,0100110011001100110011001100110011001100110011001100...21026-1023

On en dduit alors sa reprsentation interne :


10,4 I 0 10000000010
{z
}
| {z }0100110011001100110011001100110011001100110011001100
|
exposant 1026

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

mantisse (52bits)

Langage Fortran(Base)

26 mai 2015

21 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il suffit de prolonger son criture binaire dautant. On obtient :
10,410 = 1010,0110011001100110011001100110011001100110011001100...
= 1,0100110011001100110011001100110011001100110011001100...23
= 1,0100110011001100110011001100110011001100110011001100...21026-1023

On en dduit alors sa reprsentation interne :


10,4 I 0 10000000010
{z
}
| {z }0100110011001100110011001100110011001100110011001100
|
exposant 1026

mantisse (52bits)

4024CCCCCCCCCCCC16

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

21 / 266

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il suffit de prolonger son criture binaire dautant. On obtient :
10,410 = 1010,0110011001100110011001100110011001100110011001100...
= 1,0100110011001100110011001100110011001100110011001100...23
= 1,0100110011001100110011001100110011001100110011001100...21026-1023

On en dduit alors sa reprsentation interne :


10,4 I 0 10000000010
{z
}
| {z }0100110011001100110011001100110011001100110011001100
|
exposant 1026

mantisse (52bits)

4024CCCCCCCCCCCC16

Remarque :
En vrit, le motif en mmoire est 4024CCCCCCCCCCCD car lors de la troncature le 1er bit perdu a pour valeur

1.
Sur 32 bits ce ntait pas le cas car le bit perdu a pour valeur 0.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

21 / 266

Gnralits

Reprsentation des donnes

Reprsentation des complexes

Un nombre complexe est une paire de nombres rels, simple ou double prcision, correspondant aux parties relle
et imaginaire.
Soit le nombre complexe : 1.5-1.5i
Sa reprsentation en simple prcision ncessite 2 rels sur 32 bits :
Partie relle
Partie imaginaire

0 01111111 1000...0002
1 01111111 1000...0002

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

=
=

3FC0000016
BFC0000016

Langage Fortran(Base)

=
=

+1.510
-1.510

26 mai 2015

22 / 266

Gnralits

Reprsentation des donnes

Reprsentation des logiques

Un logique est une entit qui peut prendre comme valeur :


.TRUE.
.FALSE.

Il est reprsent en gnral sur 32 bits (4 octets). Il peut exister des variantes codes sur 1, 2 voire 8 octets.
Tous les bits sont positionns 0 sauf le bit le plus droite qui pour la valeur .TRUE. est positionn 1.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

23 / 266

Gnralits

Reprsentation des donnes

Reprsentation des caractres

Un caractre est cod sur 1 octet. Sa reprsentation interne respecte un codage appel codage ASCII.
Il existe 128 caractres diffrents dont les reprsentations sont indiques dans une table dite table ASCII.
Dans cette table les caractres numriques ainsi que les caractres alphabtiques (majuscules et minuscules) sont
rangs conscutivement et en ordre croissant.
On appelle chane de caractres une suite de caractres rangs de faon conscutive en mmoire.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

24 / 266

Gnralits

Table 1:
Caract.
C-@ (NUL)
C-a (SOH)
C-b (STX)
C-c (ETX)
C-d (EOT)
C-e (ENQ)
C-f (ACK)
C-g (BEL)
C-h (BS)
C-i (HT)
C-j (LF)
C-k (VT)
C-l (FF)
C-m (CR)
C-n (SO)
C-o (SI)
C-p (DLE)
C-q (DC1)
C-r (DC2)
C-s (DC3)
C-t (DC4)
C-u (NAK)
C-v (SYN)
C-w (ETB)
C-x (CAN)
C-y (EM)
C-z (SUB)
C-[ (ESC)
C-\ (FS)
C-] (GS)
C-$ (RS)
C-_ (US)

dc.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Reprsentation des donnes

table des codes ASCII des caractres

hex
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0a
0x0b
0x0c
0x0d
0x0e
0x0f
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
0x18
0x19
0x1a
0x1b
0x1c
0x1d
0x1e
0x1f

oct.
000
001
002
003
004
005
006
007
010
011
012
013
014
015
016
017
020
021
022
023
024
025
026
027
030
031
032
033
034
035
036
037

Caract.
espace
!
"
#
$
%
&

(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?

Langage Fortran(Base)

dc.
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

hex
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
0x28
0x29
0x2a
0x2b
0x2c
0x2d
0x2e
0x2f
0x30
0x31
0x32
0x33
0x34
0x35
0x36
0x37
0x38
0x39
0x3a
0x3b
0x3c
0x3d
0x3e
0x3f

oct.
040
041
042
043
044
045
046
047
050
051
052
053
054
055
056
057
060
061
062
063
064
065
066
067
070
071
072
073
074
075
076
077
26 mai 2015

25 / 266

Gnralits

Table 2:
Caract.
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]

dc.
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

Reprsentation des donnes

table des codes ASCII des caractres (suite)

hex
0x40
0x41
0x42
0x43
0x44
0x45
0x46
0x47
0x48
0x49
0x4a
0x4b
0x4c
0x4d
0x4e
0x4f
0x50
0x51
0x52
0x53
0x54
0x55
0x56
0x57
0x58
0x59
0x5a
0x5b
0x5c
0x5d
0x5e
0x5f

oct.
100
101
102
103
104
105
106
107
110
111
112
113
114
115
116
117
120
121
122
123
124
125
126
127
130
131
132
133
134
135
136
137

Caract.

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}

C-?

dc.
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

hex
0x60
0x61
0x62
0x63
0x64
0x65
0x66
0x67
0x68
0x69
0x6a
0x6b
0x6c
0x6d
0x6e
0x6f
0x70
0x71
0x72
0x73
0x74
0x75
0x76
0x77
0x78
0x79
0x7a
0x7b
0x7c
0x7d
0x7e
0x7f

oct.
140
141
142
143
144
145
146
147
150
151
152
153
154
155
156
157
160
161
162
163
164
165
166
167
170
171
172
173
174
175
176
177

Aux entres 161 255 on trouve les caractres tendus suivant :


Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

26 / 266

Gnralits

Jeu de caractres

!
(
%
?

+
>
.

Jeu de caractres

26 lettres de lalphabet ;
chiffres 0 9 ;
caractres spciaux :

*
=
/

"
)
:
&

<
;
,
$

le caractre espace ;
le caractre _ (underscore).

Remarque :
les caractres minuscules sont convertis en majuscules par le compilateur

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

27 / 266

Gnralits

Notion dunit de programme

Un programme source Fortran est compos de parties indpendantes appeles units de programme (scoping
unit ).
Chaque partie est compile de faon indpendante. Chacune admet son propre environnement. Il sera cependant
possible que ces parties communiquent entre elles.
Les diffrentes units de programme sont :
1
2

le programme principal ;
les sous-programmes :
de type subroutine ;
de type function.

les modules ;

les block data.

Chaque unit comprend une partie dclarative (dclaration des variables locales, ...) suivie dune partie
comportant des instructions excutables parmi lesquelles peut apparatre linstruction STOP qui provoque
linterruption du programme.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

28 / 266

Gnralits

lments syntaxiques

lments syntaxiques

Dans le mode format libre les lignes peuvent tre de longueur quelconque concurrence de 132 caractres.
Il est galement possible de coder plusieurs instructions sur une mme ligne en les sparant avec le caractre ; .
Exemple
print * , " Entrez une valeur : " ; read * , n

Une instruction peut tre code sur plusieurs lignes : on utilisera alors le caractre & .
Exemple
print * , " Montant HT : " , montant_ht ,
"
TVA : " , tva
,
" Montant TTC : " , montant_ttc

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

&
&

Langage Fortran(Base)

26 mai 2015

29 / 266

Gnralits

lments syntaxiques

Lors de la coupure dune chane de caractres la suite de la chane doit obligatoirement tre prcde du
caractre & .
Exemple
print * , " Entrez un nombre entier &
& compris entre 100 & 199 "

Remarque : il existe aussi le Format fixe , considr maintenant comme obsolte dont la structure dune
ligne est :
1

zone tiquette (colonnes 1 5) ;

zone instruction (colonnes 7 72) ;

colonne suite (colonne 6)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

30 / 266

Gnralits

lments syntaxiques

Le caractre ! rencontr sur une ligne indique que ce qui suit est un commentaire. On peut videmment crire
une ligne complte de commentaires : il suffit pour cela que le 1er caractre non blanc soit le caractre ! .
Exemple
if ( n < 100 . or . n > 199) ! Test cas d erreur
. . . .
! On lit l exposant
read * , x
! On lit la base
read * , y
if ( y <= 0) then
! Test cas d erreur
print * , " La base doit tre un nombre > 0 "
else
z = y ** x
! On calcule la puissance
end if

Remarque :
En format fixe, les lignes qui commencent par C, c, * ou ! en colonne 1 sont des commentaires.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

31 / 266

Dclarations

Introduction

Gnralits

Dclarations
Identificateurs
Diffrents types
Syntaxe
Le type CHARACTER
Instruction IMPLICIT NONE
Constantes littrales
Constantes
Constantes
Constantes
Constantes
Constantes

entires
relles simple prcision
relles double prcision
complexes
chanes de caractres

Initialisation
Linstruction DATA
Le symbole =

Constantes symboliques
Instruction EQUIVALENCE
4

Oprateurs et expressions

Structures de contrle

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

32 / 266

Dclarations

Tableaux

Entres-Sorties

Procdures

Common

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

33 / 266

Dclarations

Identificateurs

Un identificateur permet de donner un nom :


une variable ;
une constante ;
une procdure.

Il est dfini par :


une suite de caractres alphanumriques (lettres non accentues, chiffres, underscore) ;
le premier caractre doit tre une lettre ;
la longueur est limite :
31 caractres (norme Fortran 90) ;
63 caractres (norme Fortran 2008).
on ne distingue pas les lettres majuscules des minuscules.
Exemple

compteur
Compteur
fin_de_fichier
montant_annee_1993

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

34 / 266

Dclarations

Diffrents types

Le type dune variable dtermine :


le nombre doctets rserver en mmoire ;
un mode de reprsentation interne ;
lensemble des valeurs admissibles ;
lensemble des oprateurs qui peuvent lui tre appliqus.

Types prdfinis
Mot-cl
INTEGER
CHARACTER
LOGICAL
REAL
DOUBLE PRECISION
COMPLEX

:
:
:
:
:
:

Type
entier
caractre
deux valeurs .TRUE., .FALSE.
rel simple prcision
rel double prcision
complexe simple prcision

Remarque :
la prcision dun rel simple est de 7 chiffres dcimaux significatifs alors que celle dun
double est de 15.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

35 / 266

Dclarations

Diffrents types

Attributs

Chaque type peut tre surcharg dattributs dont voici un extrait :


Attributs
Attribut
PARAMETER
DIMENSION
SAVE
EXTERNAL
INTRINSIC

:
:
:
:
:

Signification
constante symbolique
taille dun tableau
objet statique
procdure externe
procdure intrinsque

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

36 / 266

Dclarations

Syntaxe

Syntaxe dune dclaration

type[, liste_attributs ::] liste_identificateurs


Exemple
PROGRAM declaration
INTEGER , SAVE :: compteur
INTEGER
:: temperature
LOGICAL
:: arret_boucle
...
END PROGRAM declaration
...
PROGRAM declaration
INTEGER
indice_boucle
SAVE
indice_boucle
...
END PROGRAM declaration

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

37 / 266

Dclarations

Le type CHARACTER

Le type CHARACTER

Pour dclarer une chane de caractres on prcise de plus sa longueur. Si elle nest pas indique elle est gale 1 :
CHARACTER(len=n) ch_car
CHARACTER c
Lancienne syntaxe suivante est toujours disponible mais dclare obsolte :
CHARACTER*n ch_car
Exemple
PROGRAM declaration
CHARACTER ( LEN =11) chaine1
CHARACTER *11
chaine2
...
END PROGRAM declaration

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

38 / 266

Dclarations

Instruction IMPLICIT NONE

Instruction IMPLICIT NONE

Par dfaut, les variables dont lidentificateur commence par les caractres I N sont de type INTEGER.
Toutes les autres sont de type REAL.
Linstruction IMPLICIT NONE change cette rgle car elle impose lutilisateur la dclaration de chaque
variable.
Cette instruction est vivement recommande car elle permet la dtection dun certain nombre derreurs la
compilation.
IMPLICIT NONE se place avant les dclarations des variables,
Linstruction ne sapplique qu lunit de programme qui la contient.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

39 / 266

Dclarations

Constantes littrales

Constantes littrales : entires

une suite de chiffres en base 10,


une suite de chiffres en base 2 encadre par des quotes, le tout prcd du caractre B,
une suite de chiffres en base 8 encadre par des quotes, le tout prcd du caractre O,
une suite de chiffres en base 16 encadre par des quotes, le tout prcd du caractre Z.

Une valeur ngative sera prcde du signe -.


Exemple
1
123
-28
B 11011011100
O 3334
Z 6 DC

Remarque :
Les constantes crites en base 2, 8 ou 16 sappellent des constantes BOZ. Elles ne peuvent
figurer que dans les instructions dinitialisation de type DATA.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

40 / 266

Dclarations

Constantes littrales

Constantes littrales : relles simple prcision

Une constante de type REAL doit obligatoirement comporter :


soit le point dcimal, mme sil ny a pas de chiffres aprs la virgule ;
soit le caractre E pour la notation en virgule flottante.

Pour les nombres crits 0.xxxxx, on peut omettre le 0 avant le point dcimal.
Exemple
0.
1.0
1.
3.1415
31415E -4
1.6E -19
1E12
.001
-36.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

41 / 266

Dclarations

Constantes littrales

Constantes littrales : relles double prcision

Une constante double precision doit obligatoirement tre crite en virgule flottante, le E tant remplac par un D.
Exemple
0D0
0.D0
1.D0
1d0
3.1415d0
31415d -4
1.6D -19
1d12
-36.d0

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

42 / 266

Dclarations

Constantes littrales

Constantes littrales : complexes

Une constante de type COMPLEX est obtenue en combinant deux constantes relles entre parenthses spares par
une virgule : 2.5+i scrira (2.5,1.)
Exemple
(0. ,0.)
(1. , -1.)
(1.34 e -7 , 4.89 e -8)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

43 / 266

Dclarations

Constantes littrales

Constantes littrales : chanes de caractres

Une constante chanes de caractres est une suite de caractres encadre par le dlimiteur ou bien " .
Si parmi la suite des caractres figure le caractre dlimiteur, il devra tre doubl.
Exemple
La somme des n premiers entiers est :
l tendue dsire est :
"l tendue dsire est : "

partir dune variable chane de caractres on peut extraire une suite de caractres contigus. Pour cela on
spcifie le nom de la variable suivi entre parenthses dun couple dentiers n:m indiquant les rangs de dbut et
de fin dextraction.
Exemple
CHARACTER ( LEN =10) :: ch
ch = " Bonjour " ; ch (4:7) = " soir "

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

44 / 266

Dclarations

Initialisation

Linstruction DATA

Une initialisation pourra seffectuer au moyen de linstruction suivante :


DATA liste1 /init1 /[, ..., listei /initi /, ...]
listei fait rfrence une liste de variables initialiser,
initi indique les valeurs dinitialisation,
le type des valeurs dinitialisation doit respecter les rgles suivantes :
pour un objet de type caractre ou logique, la constante dinitialisation doit tre de mme type,
pour un objet de type entier, rel ou complexe, la constante dinitialisation peut tre de lun de ces types.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

45 / 266

Dclarations

Initialisation

Exemple
REAL
INTEGER
LOGICAL
DATA
DATA
DATA

a, b, c
n, m
arret
a , b , n /1.0 , 2.0 , 17/
c /2.6/ , m /3/
arret /. FALSE ./

Remarques :
cette instruction peut apparatre aprs des instructions excutables, mais la norme F95 a dclar cette

possibilit comme obsolte ;


les variables initialises par ce moyen hritent de lattribut SAVE : elles sont alors permanentes (cf. chapitre

Procdures, section Dure de vie des identificateurs).


Il nest pas rare de trouver ce type dinitialisation lors de la dclaration comme dans lexemple suivant (ce nest
pas conseill car cela ne fait pas partie de la norme donc non portable) :
Extension

REAL
INTEGER
LOGICAL

a /3.14/ , b /2.718/
n /1/ , m /4/
arret /. false ./

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

46 / 266

Dclarations

Initialisation

Fortran permet dinitialiser une variable lors de sa dclaration laide du symbole = . Dans ce contexte, les
caractres :: sont obligatoires :
TYPE[, attributs] :: v1 =c1 [, ..., vi =ci , ...]
o vi est le nom de la variable initialiser et ci sa valeur.
Exemple
PROGRAM ini tialisat ion
INTEGER :: debut
= 100
REAL
:: valeur = 76.3
LOGICAL :: drapeau = . TRUE .
...
END PROGRAM initiali sation

Note : ces variables hritent alors de lattribut SAVE, ce qui implique que leur emplacement mmoire est
permanent. Pour plus de dtails, se reporter page 238 du support.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

47 / 266

Dclarations

Constantes symboliques

Constantes symboliques

Lattribut PARAMETER permet de donner un nom symbolique une constante littrale :


TYPE, PARAMETER :: n1 =c1 [, ..., ni =ci , ...]
o ni est le nom donn une constante et ci sa valeur.
La notation suivante est aussi utilisable :
PARAMETER ( n1 =c1 [, ..., ni =ci , ...] )
Exemple
PROGRAM constante
LOGICAL , PARAMETER :: VRAI =. TRUE . , FAUX =. FALSE .
DOUBLE PRECISION
:: PI , RTOD
PARAMETER ( PI =3.14159265 d0 , RTOD =180. d0 / PI )
...
END PROGRAM constante

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

48 / 266

Dclarations

Instruction EQUIVALENCE

Instruction EQUIVALENCE

Linstruction EQUIVALENCE permet des variables de partager la mme zone mmoire au sein dune unit de

programme ;
il ny a pas de conversion de type ;
chaque variable garde les proprits de son type ;
le type CHARACTER ne peut pas tre associ dautres types.

Syntaxe gnrale :
EQUIVALENCE(v1 , v2 )[,..., (vi1 , vi ),...]
o les vi sont des scalaires (variables simples ou lments de tableaux).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

49 / 266

Dclarations

Instruction EQUIVALENCE

Exemple
PROGRAM cor responda nce
COMPLEX
cmplx (2)
REAL
temp (4)
EQUIVALENCE ( temp (1) , cmplx (1))
...
END PROGRAM correspo ndance

Agencement en mmoire :
|--------cmplx(1)-------|--------cmplx(2)-------|
|-----------|-----------|-----------|-----------|
|--temp(1)--|--temp(2)--|--temp(3)--|--temp(4)--|

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

50 / 266

Dclarations

Instruction EQUIVALENCE

Exemple
PROGRAM cor responda nce
CHARACTER ( LEN =4)
:: A , B
CHARACTER ( LEN =3)
:: C (2)
CHARACTER ( LEN =10)
:: chaine
CHARACTER ( LEN =1) , DIMENSION (10) :: tab_car
EQUIVALENCE
(A , C (1)) ,( B , C (2))
EQUIVALENCE
( chaine , tab_car (1))
...
END PROGRAM correspo ndance

Agencement en mmoire :
| 01 | 02 | 03 | 04 | 05 | 06 | 07 |

|---------A---------|
|-----C(1)-----|-----C(2)-----|
|---------B---------|

| 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
|-------------------- chaine ---------------------|
|
|
|--> tab_car(1)
|--> tab_car(7)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

51 / 266

Oprateurs et expressions

Introduction

Gnralits

Dclarations

Oprateurs et expressions
Oprateurs arithmtiques
Oprateurs relationnels
Oprateurs logiques
Oprateur de concatnation
Oprateur daffectation
Priorit des Oprateurs

Structures de contrle

Tableaux

Entres-Sorties

Procdures

Common

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

52 / 266

Oprateurs et expressions

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

53 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Les oprateurs arithmtiques

Table 3:
Symbole
+
+
*
/
**

Oprateurs arithmtiques

Expression
o1 + o2
+ o1
o1 - o2
- o1
o1 * o2
o1 / o2
o1 **o2

Interprtation
ajoute o2 o1
gal o1
soustrait o2 o1
inverse le signe de o1
multiplie o1 par o2
o1 divis par o2
lve o1 la puissance o2

Les oprandes o1 et o2 peuvent tre :


une constante numrique ;
une variable numrique, prcde ou non dun oprateur unaire (+ ou -) ;
une expression arithmtique entre parenthses.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

54 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Exemple
3.14159
K
(A + B) * (C + D)
-1.0 / X + Y / Z ** 2
-2.0 * 3.14159 * RADIUS

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

55 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3
(100*9)/5
(9/5)*100
99./100
99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

(100*9)/5
(9/5)*100
99./100
99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5
(9/5)*100
99./100
99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

(9/5)*100
99./100
99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100
99./100
99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

99./100
99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

INTEGER

99./100
99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

INTEGER

99./100

0.99

99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

INTEGER

99./100

0.99

REAL

99./100d0
(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

INTEGER

99./100

0.99

REAL

99./100d0

0.99d0

(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

INTEGER

99./100

0.99

REAL

99./100d0

0.99d0

DOUBLE PRECISION

(1.,2.)+1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

INTEGER

99./100

0.99

REAL

99./100d0

0.99d0

DOUBLE PRECISION

(1.,2.)+1

(2.,2.)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Le type dune expression arithmtique dpend des types de ses oprandes.


Dans le cas doprateurs binaires :
1

si les 2 oprandes sont du mme type alors lexpression arithmtique rsultante sera de ce type.

si les deux oprandes ne sont pas du mme type alors lexpression arithmtique sera value dans le type le
plus fort relativement la hirarchie suivante :
INTEGER < REAL < DOUBLE PRECISION < COMPLEX
Expression

Valeur

Type du rsultat

99/100

INTEGER

7/3

INTEGER

(100*9)/5

180

INTEGER

(9/5)*100

100

INTEGER

99./100

0.99

REAL

99./100d0

0.99d0

DOUBLE PRECISION

(1.,2.)+1

(2.,2.)

COMPLEX

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

56 / 266

Oprateurs et expressions

Oprateurs arithmtiques

Attention
Soit lexpression d = 1.d0+5.**0.5 avec la variable d dclare en DOUBLE PRECISION. La sous-expression
5.**0.5 est value dans le type REAL car les oprandes de loprateur ** le sont. Le reste de lvaluation
seffectuera ensuite dans le type DOUBLE PRECISION, le rsultat tant finalement stock dans la variable d.
Mais cette variable d bien que du type DOUBLE PRECISION hrite dun calcul qui a commenc dans le type REAL,
do une perte de prcision.
Cela peut induire par la suite des comportements inattendus lors de lvaluation dexpressions dans lesquelles
figurent cette variable (problme de convergence dans des processus itratifs comme dans lexercice 3).
En conclusion, lors de lcriture dexpressions avec prsence de constantes relles que lon dsire valuer en
DOUBLE PRECISION, il est impratif dcrire ces constantes dans ce type. Ce qui donne pour lexpression
prcdente :
d = 1.d0+5.d0**0.5d0

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

57 / 266

Oprateurs et expressions

Oprateurs relationnels

Les oprateurs relationnels

Table 4:
Oprateur
.LT. ou <
.LE. ou <=
.EQ. ou ==
.NE. ou /=
.GT. ou >
.GE. ou >=

Oprateurs relationnels

Opration
strictement plus petit
infrieur ou gal
gal
non gal
strictement plus grand
suprieur ou gal

Ces oprateurs admettent des oprandes de type INTEGER, REAL ou CHARACTER. Seuls les oprateurs ==, /=
peuvent sappliquer des expressions de type COMPLEX.
Exemple
N .GE. 0
X .LT. Y
Z /= 3.7
( B**2 - 4* A * C ) .GT. 0.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

58 / 266

Oprateurs et expressions

Oprateurs logiques

Les oprandes des oprateurs logiques doivent tre des expressions de type LOGICAL.
Table 5:
Oprateur
.NOT.
.AND.
.OR.
.EQV.
.NEQV.

Oprateurs logiques

Opration
ngation logique
conjonction logique
disjonction inclusive
quivalence logique
non-quivalence logique

Table 6:

Oprateur de ngation

l
.true.
.false.
Table 7:
l1
.true.
.true.
.false.
.false.

l2
.true.
.false.
.true.
.false.

l1 .AND.l2
.true.
.false.
.false.
.false.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

.NOT.l
.false.
.true.

Autres oprateurs

l1 .OR.l2
.true.
.true.
.true.
.false.

Langage Fortran(Base)

l1 .EQV.l2
.true.
.false.
.false.
.true.

l1 .NEQV.l2
.false.
.true.
.true.
.false.
26 mai 2015

59 / 266

Oprateurs et expressions

Oprateur de concatnation

Oprateur de concatnation

Loprateur de concatnation nadmet que des expressions de type CHARACTER.


Expression
c1 // c2

Interprtation
concatne c1 avec c2

Exemple
CHARACTER ( LEN =10) :: ch
ch
ch
ch
ch

=
=
=
=

" BON " // " JOUR "


! <-- Affectation de la chane " BONJOUR "
" BON "
ch // " JOUR "
! <-- Inoprant !!!
TRIM ( ch ) // " JOUR " ! <-- OK

Remarques :
1

lorsque la chane rceptrice est plus grande que celle affecte, elle est complte laide du caractre espace ;

reportez-vous la page 284 pour plus dinformations concernant la procdure TRIM utilise dans lexemple
ci-dessus.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

60 / 266

Oprateurs et expressions

Oprateur daffectation

Oprateur daffectation

variable = expression
o expression est une expression arithmtique, logique ou relationnelle.
une valeur de type CHARACTER ne peut pas tre affecte une variable numrique ou vice-versa,
une valeur de type INTEGER peut tre affecte une variable de type REAL,
une valeur de type REAL peut galement tre affecte une variable de type INTEGER. Mais dans ce cas, la

valeur est alors tronque en supprimant la partie fractionnaire.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

61 / 266

Oprateurs et expressions

Oprateur daffectation

Oprateur daffectation

variable = expression
o expression est une expression arithmtique, logique ou relationnelle.
une valeur de type CHARACTER ne peut pas tre affecte une variable numrique ou vice-versa,
une valeur de type INTEGER peut tre affecte une variable de type REAL,
une valeur de type REAL peut galement tre affecte une variable de type INTEGER. Mais dans ce cas, la

valeur est alors tronque en supprimant la partie fractionnaire.


En supposant dans les expressions suivantes, les variables x de type REAL et
n, m de type INTEGER :
Expression

Interprtation

x = 5
n = 0.9999
m = -1.9999

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

61 / 266

Oprateurs et expressions

Oprateur daffectation

Oprateur daffectation

variable = expression
o expression est une expression arithmtique, logique ou relationnelle.
une valeur de type CHARACTER ne peut pas tre affecte une variable numrique ou vice-versa,
une valeur de type INTEGER peut tre affecte une variable de type REAL,
une valeur de type REAL peut galement tre affecte une variable de type INTEGER. Mais dans ce cas, la

valeur est alors tronque en supprimant la partie fractionnaire.


En supposant dans les expressions suivantes, les variables x de type REAL et
n, m de type INTEGER :
Expression

Interprtation

x = 5

x = 5.0

n = 0.9999
m = -1.9999

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

61 / 266

Oprateurs et expressions

Oprateur daffectation

Oprateur daffectation

variable = expression
o expression est une expression arithmtique, logique ou relationnelle.
une valeur de type CHARACTER ne peut pas tre affecte une variable numrique ou vice-versa,
une valeur de type INTEGER peut tre affecte une variable de type REAL,
une valeur de type REAL peut galement tre affecte une variable de type INTEGER. Mais dans ce cas, la

valeur est alors tronque en supprimant la partie fractionnaire.


En supposant dans les expressions suivantes, les variables x de type REAL et
n, m de type INTEGER :
Expression

Interprtation

x = 5

x = 5.0

n = 0.9999

n = 0

m = -1.9999

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

61 / 266

Oprateurs et expressions

Oprateur daffectation

Oprateur daffectation

variable = expression
o expression est une expression arithmtique, logique ou relationnelle.
une valeur de type CHARACTER ne peut pas tre affecte une variable numrique ou vice-versa,
une valeur de type INTEGER peut tre affecte une variable de type REAL,
une valeur de type REAL peut galement tre affecte une variable de type INTEGER. Mais dans ce cas, la

valeur est alors tronque en supprimant la partie fractionnaire.


En supposant dans les expressions suivantes, les variables x de type REAL et
n, m de type INTEGER :
Expression

Interprtation

x = 5

x = 5.0

n = 0.9999

n = 0

m = -1.9999

m = -1

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

61 / 266

Oprateurs et expressions

Table 8:

Ordre de priorit des oprateurs

Oprateur
**
* et /
+ et - (unaire)
+ et - (binaire)
//
<, <=, ==
/=, >, >=
.NOT.
.AND.
.OR.
.EQV. et .NEQV.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Priorit des Oprateurs

Associativit
DG
GD
///////
GD
GD
GD
///////
GD
GD
GD

Langage Fortran(Base)

26 mai 2015

62 / 266

Oprateurs et expressions

Table 8:

Priorit des Oprateurs

Ordre de priorit des oprateurs

Oprateur
**
* et /
+ et - (unaire)
+ et - (binaire)
//
<, <=, ==
/=, >, >=
.NOT.
.AND.
.OR.
.EQV. et .NEQV.

Associativit
DG
GD
///////
GD
GD
GD
///////
GD
GD
GD

En supposant dans les expressions suivantes, les variables a, b, c, d de type REAL et


e, f, g de type LOGICAL :
Expression

Interprtation

2**3**2
5.+4.*9.**2
e.OR.f.AND.g
a**b+c.GT.d.AND.e

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

62 / 266

Oprateurs et expressions

Table 8:

Priorit des Oprateurs

Ordre de priorit des oprateurs

Oprateur
**
* et /
+ et - (unaire)
+ et - (binaire)
//
<, <=, ==
/=, >, >=
.NOT.
.AND.
.OR.
.EQV. et .NEQV.

Associativit
DG
GD
///////
GD
GD
GD
///////
GD
GD
GD

En supposant dans les expressions suivantes, les variables a, b, c, d de type REAL et


e, f, g de type LOGICAL :
Expression

Interprtation

2**3**2

2**(3**2) = 512

5.+4.*9.**2
e.OR.f.AND.g
a**b+c.GT.d.AND.e

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

62 / 266

Oprateurs et expressions

Table 8:

Priorit des Oprateurs

Ordre de priorit des oprateurs

Oprateur
**
* et /
+ et - (unaire)
+ et - (binaire)
//
<, <=, ==
/=, >, >=
.NOT.
.AND.
.OR.
.EQV. et .NEQV.

Associativit
DG
GD
///////
GD
GD
GD
///////
GD
GD
GD

En supposant dans les expressions suivantes, les variables a, b, c, d de type REAL et


e, f, g de type LOGICAL :
Expression

Interprtation

2**3**2

2**(3**2) = 512

5.+4.*9.**2

5.+(4.*(9.**2)) = 329.

e.OR.f.AND.g
a**b+c.GT.d.AND.e

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

62 / 266

Oprateurs et expressions

Table 8:

Priorit des Oprateurs

Ordre de priorit des oprateurs

Oprateur
**
* et /
+ et - (unaire)
+ et - (binaire)
//
<, <=, ==
/=, >, >=
.NOT.
.AND.
.OR.
.EQV. et .NEQV.

Associativit
DG
GD
///////
GD
GD
GD
///////
GD
GD
GD

En supposant dans les expressions suivantes, les variables a, b, c, d de type REAL et


e, f, g de type LOGICAL :
Expression

Interprtation

2**3**2

2**(3**2) = 512

5.+4.*9.**2

5.+(4.*(9.**2)) = 329.

e.OR.f.AND.g

e.OR.(f.AND.g)

a**b+c.GT.d.AND.e

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

62 / 266

Oprateurs et expressions

Table 8:

Priorit des Oprateurs

Ordre de priorit des oprateurs

Oprateur
**
* et /
+ et - (unaire)
+ et - (binaire)
//
<, <=, ==
/=, >, >=
.NOT.
.AND.
.OR.
.EQV. et .NEQV.

Associativit
DG
GD
///////
GD
GD
GD
///////
GD
GD
GD

En supposant dans les expressions suivantes, les variables a, b, c, d de type REAL et


e, f, g de type LOGICAL :
Expression

Interprtation

2**3**2

2**(3**2) = 512

5.+4.*9.**2

5.+(4.*(9.**2)) = 329.

e.OR.f.AND.g

e.OR.(f.AND.g)

a**b+c.GT.d.AND.e

(((a**b)+c).GT.d).AND.e

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

62 / 266

Structures de contrle

Introduction

Gnralits

Dclarations

Oprateurs et expressions

Structures de contrle
Les tests
Le bloc IF
Le bloc SELECT-CASE

Les itrations
Linstruction GOTO
Les bloucles DO
6

Tableaux

Entres-Sorties

Procdures

Common

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

63 / 266

Structures de contrle

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

64 / 266

Structures de contrle

Les tests

Le bloc IF

[ nom_bloc : ] IF ( exp 1 ) THEN


bloc 1
[ ELSE IF ( exp 2 ) THEN [ nom_bloc ]
bloc 2 ]
[ ELSE IF ( exp 3 ) THEN [ nom_bloc ]
bloc 3 ]
...
[ ELSE [ nom_bloc ]
bloc n ]
END IF [ nom_bloc ]

nom_bloc une tiquette facultative : si elle est prsente elle doit figurer au niveau de linstruction END

IF et peut apparatre la suite des ventuelles instructions ELSE, ELSE IF ;


expi une expression de type LOGICAL ;
bloci une suite dinstructions Fortran.

En labsence de clause ELSE lorsque bloc1 est rduit une seule instruction, la structure IF se simplifie en :

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

IF (exp) instruction

Langage Fortran(Base)

26 mai 2015

65 / 266

Structures de contrle

Les tests

Exemple

PROGRAM structure_if
REAL A ,B , SUM
...
IF ( A . LT . B ) THEN
SUM = SUM + A
IF ( SUM > 0.) PRINT * , SUM
END IF
...
END PROGRAM structure_if

Exemple

PROGRAM structure_if
REAL A , HRS
...
IF ( HRS . LE .40.0) THEN
A = HRS *150.0
ELSE IF ( HRS . LE .50.) THEN
A = ( HRS - 4 0 . 0 ) * 1 5 0 . 0 * 1. 5
ELSE
A = ( HRS - 5 0 . 0 ) * 1 5 0 . 0 * 2. 0
END IF
END PROGRAM structure_if

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

66 / 266

Structures de contrle

Les tests

Linstruction SELECT CASE permet des branchements multiples qui dpendent de la valeur dune expression
scalaire de type entier, logique ou chane de caractres.

[ nom_bloc : ] SELECT CASE ( expression )


CASE ( liste ) [ nom_bloc ]
bloc 1
...
[ CASE DEFAULT [ nom_bloc ]
bloc n
END SELECT [ nom_bloc ]

nom_bloc est une tiquette ;


expression est une expression de type INTEGER, LOGICAL ou CHARACTER ;
liste est une liste de constantes du mme type que expression ;
bloci est une suite dinstructions Fortran.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

67 / 266

Structures de contrle

Les tests

Exemple
PROGRAM str ucture_c ase
integer :: mois , nb_jours
logical :: annee_bissext
...
SELECT CASE ( mois )
CASE (4 , 6 , 9 , 11)
nb_jours = 30
CASE (1 , 3 , 5 , 7:8 , 10 , 12)
nb_jours = 31
CASE (2)
! ---------------------------------fevrier : select case ( annee_bissext )
case (. true .)
nb_jours = 29
case (. false .)
nb_jours = 28
end select fevrier
! ---------------------------------CASE DEFAULT
print * , " Numro de mois invalide "
END SELECT
END PROGRAM structur e_case

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

68 / 266

Structures de contrle

Les itrations

Linstruction GOTO permet deffectuer un branchement un endroit particulier du code :


GOTO tiquette
Cette instruction est viter car elle peut gnrer des programmes illisibles et difficiles corriger.
Exemple
PROGRAM ite ration_g oto
REAL diviseur , valeur , facteur
...
valeur = 0. ; diviseur = 360.
69 IF ( diviseur . NE . 0.) THEN
valeur
= valeur + facteur / diviseur
diviseur = diviseur - 10.
GOTO 69
END IF
...
END PROGRAM iteratio n_goto

Cet exemple peut tre remplac par une boucle itrative de type DO WHILE.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

69 / 266

Structures de contrle

Les itrations

Il existe plusieurs types de boucles itratives qui sont toutes de la forme :


[ nom_bloc : ] DO [ c o n t r l e _ d e _ b o u c l e ]
bloc
END DO [ nom_bloc ]

nom_bloc est une tiquette,


contrle_de_boucle dfinit les conditions dexcution et darrt de la boucle,
bloc est une suite dinstructions Fortran.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

70 / 266

Structures de contrle

Les itrations

1re forme : DO indx

contrle_de_boucle est de la forme :


variable = expr1 , expr2 [,expr3 ]
avec :
variable est un identificateur de type INTEGER ;
expr1 , expr2 et expr3 sont des expressions arithmtiques de type INTEGER.

Le nombre ditrations est valu avant le dmarrage de la boucle.


Exemple
PROGRAM iteration_do
INTEGER i , somme , n
...
! affectation de n
somme =0
DO i =1 ,n ,2
somme = somme + i
END DO
...
END PROGRAM iteration_do

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

71 / 266

Structures de contrle

Les itrations

2re forme : DO WHILE

Cest une boucle dont le contrle_de_boucle est de la forme :


WHILE (expression)
Remarques :
1

expression est de type scalaire logique ;

le corps de la boucle est excut tant que expression est vraie ;

pour pouvoir sortir de la boucle, il faut que expression puisse prendre la valeur .FALSE. dans le bloc.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

72 / 266

Structures de contrle

Sommation de la srie
courante :

P
n1

Les itrations

1/n2 jusqu ce que le terme gnral soit infrieur  fois la somme partielle

Exemple
PROGRAM it er at i on _w hi l e
INTEGER
DOUBLE PRECISION
DOUBLE PRECISION , PARAMETER
LOGICAL

::
::
::
::

n
terme , somme
epsilon = 1. d -3
fini

! Initial isation
n =0
somme =0. d0
fini =. FALSE .
DO WHILE (. not . fini )
n = n +1
terme = 1 d0 / n **2
somme = somme + terme
fini =( terme . LT . epsilon * somme )
END DO
print * , " Nombre d itrations : " , n
print * , " Somme = " , somme
END PROGRAM i te ra ti o n_ wh il e

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

73 / 266

Structures de contrle

Les itrations

3re forme : DO

Ce sont des boucles DO sans contrle de boucle. Pour en sortir, on utilise une instruction conditionnelle avec
une instruction EXIT.
Le corps de boucle bloc se prsente comme suit :
bloc1
IF ( expression ) EXIT
bloc2

avec :
expression une expression de type LOGICAL ;
bloci des squences de code Fortran.

Notons que la condition IF peut tre remplace par une instruction de type SELECT CASE.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

74 / 266

Structures de contrle

Les itrations

Exemple
PROGRAM ite ration_e xit
REAL
:: valeur
REAL
:: x , xlast
REAL , PARAMETER :: tolerance = 1.0 e -6
valeur = 50.
x = 1.0

! valeur initiale ( diff . 0)

DO
xlast = x
x = 0.5 * ( xlast + valeur / xlast )
IF ( ABS (x - xlast )/ x < tolerance ) EXIT
END DO
END PROGRAM iteratio n_exit

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

75 / 266

Structures de contrle

Les itrations

Instruction CYCLE

Le corps dune boucle peut contenir une instruction CYCLE laquelle permet dabandonner le traitement de
litration courante et de passer la suivante. Celle-ci sera excute, dune manire gnrale, suite une
condition, comme par exemple :
IF (expression) CYCLE
Remarque : linstruction IF peut bien videmment, comme prcdemment, tre remplace par une instruction
de type SELECT CASE.
Exemple
PROGRAM it er at i on _c yc l e
INTEGER :: annee
DO
READ (* ,*) annee
IF ( annee . LE . 0) EXIT
! On limine les annes bissextiles .
IF ( (( annee /4*4
. EQ . annee ) . AND . &
( annee /100*100 . NE . annee )) . OR . &
( annee /400*400 . EQ . annee ) ) CYCLE
PRINT * , " Traitement des annes non - bissextiles "
...
END DO
END PROGRAM i te ra ti o n_ cy cl e

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

76 / 266

Tableaux

Introduction

Gnralits

Dclarations

Oprateurs et expressions

Structures de contrle

Tableaux
Dclaration
Dfinitions (rang, profil, tendue)
Initialisation
Le symbole "="
Le constructeur de vecteurs
Linstruction DATA

Manipulation de tableaux
Expressions de type tableau

Sections de tableaux
7

Entres-Sorties

Procdures

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

77 / 266

Tableaux

Common

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

78 / 266

Tableaux

Dclaration

Un tableau est un ensemble dlments de mme type contigus en mmoire.


Pour dclarer un tableau, il est recommand dutiliser lattribut DIMENSION :
TYPE, DIMENSION(expr1 , ...,exprn ) :: liste_tab
avec :
n 7 ; i.e un tableau peut avoir jusqu 7 dimensions ;
expri sert indiquer ltendue dans la dimension correspondante. Cest une expression entire ou bien

deux expressions entires de la forme expr1 :expr2 avec expr1 <= expr2 .
liste_tab est une liste de tableaux.

Remarques :
1

si la dclaration est faite au sein du programme principal ces expressions doivent tre construites laide de
constantes entires (littrales ou symboliques) ;

si celle-ci est effectue lintrieur dune procdure celles-ci peuvent tre variables.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

79 / 266

Tableaux

Dclaration

Exemple
INTEGER , PARAMETER
:: lda = 6
REAL , DIMENSION (0: lda -1)
:: Y
REAL , DIMENSION (1+ lda * lda ,10) :: Z
REAL , DIMENSION (100)
:: R
REAL , DIMENSION (1:5 ,1:5 , 1:5) :: S
REAL , DIMENSION ( -10: -1)
:: X

Remarque : les dimensions dun tableau peuvent aussi tre spcifies sans lattribut DIMENSION :
Exemple
REAL :: T (10 ,10) , U (4 ,2) , G ( -1:10 ,4:9 ,1:3)

Attention, cette notation nest pas recommande !

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

80 / 266

Tableaux

Dfinitions (rang, profil, tendue)

Le rang (rank) dun tableau est son nombre de dimensions.


Le nombre dlments dans une dimension sappelle ltendue (extent) du tableau dans cette dimension.
Le profil (shape) dun tableau est un vecteur dont chaque lment est ltendue du tableau dans la

dimension correspondante.
La taille (size) dun tableau est le produit des lments du vecteur correspondant son profil.
Deux tableaux sont dits conformants sils ont le mme profil.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

81 / 266

Tableaux

Dfinitions (rang, profil, tendue)

Exemple
REAL , DIMENSION (15)
:: X
REAL , DIMENSION (1:5 ,1:3) :: Y
REAL , DIMENSION ( -1:3 ,0:2) :: Z

Le tableau X est de rang 1, Y et Z sont de rang 2 ;


Ltendue de X est 15, Y et Z ont une tendue de 5 et 3 ;
Le profil de X est le vecteur (/ 15 /), celui de Y et Z est le vecteur (/ 5,3 /)
La taille des tableaux X, Y et Z est 15.
Les tableaux Y et Z sont conformants.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

82 / 266

Tableaux

Dfinitions (rang, profil, tendue)

Ordre des lments

En mmoire la notion de tableau nexiste pas : les lments sont rangs les uns la suite des autres.
Pour accder ces lments, dans lordre mmoire, Fortran fait dabord varier le premier indice, puis le second et
ainsi de suite.
Par exemple, les lments dun tableau deux dimensions sont ordonns comme suit :
REAL, DIMENSION(5,3) :: C C(1,1),C(2,1),...,C(5,1),C(1,2),C(2,2),...,C(5,3)

C(1,1)

C(1,3)

C(5,1)

C(5,3)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

83 / 266

Tableaux

Initialisation

Fortran permet de manipuler globalement lensemble des lments dun tableau.


On pourra alors utiliser le symbole "=" comme pour linitialisation dune variable scalaire.
Pour initialiser 3 lensemble dun vecteur :
Exemple
REAL , DIMENSION (100) :: X = 3.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

84 / 266

Tableaux

Initialisation

Un constructeur de vecteur est un vecteur de scalaires dont les valeurs sont encadres par les caractres
(/ et /) (ou bien [ et ] depuis la norme Fortran 2008) :
1

vecteur = (/ expr1 , expr2 , ..., exprn /)

vecteur = [ expr1 , expr2 , ..., exprn ]

vecteur est un tableau de rang 1 ;


expri est :
un scalaire ;
une boucle DO implicite de la forme
(expr_scalaire, variable = m1 ,m2 [,m3 ]) avec variable un identificateur de type INTEGER
correspondant lindice de cette boucle et m1 , m2 , m3 des constantes entires dlimitant la boucle (voir
boucle DO).
Le constructeur et le tableau vecteur doivent tre conformants.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

85 / 266

Tableaux

Initialisation

Exemple
IMPLICIT NONE
REAL , DIMENSION (4)
:: heights =
(/ 5.10 , 5.6 , 4.0 , 3.6 /)

&

CHARACTER ( len =5) , DIMENSION (3) :: colours =


&
(/ " RED " , " GREEN " , " BLUE " /)
INTEGER
:: i
INTEGER , DIMENSION (10)
:: ints
=
(/ 100 , (i , i =1 ,8) , 100 /)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

&

26 mai 2015

86 / 266

Tableaux

Initialisation

Linstruction DATA

Comme pour les variables simples, on peut utiliser linstruction DATA pour initialiser les tableaux lors de leur
dclaration. Elle permet dinitialiser tout ou partie de tableaux laide dune liste de constantes encadre par le
caractre / (la notation n*valeur peut tre employe pour rpter une mme valeur).
Les lments initialiser peuvent tre spcifis au moyen dune boucle DO implicite : (tab(i), i =
m1 ,m2 [,m3 ]).
Exemple
IMPLICIT NONE
INTEGER

:: i , j

REAL ,
DIMENSION (20)
INTEGER , DIMENSION (10)
REAL ,
DIMENSION (2 ,3)

:: A , B
:: ints
:: MAT

DATA
DATA
DATA
DATA

A /20*7.0/ , B (1) , B (7) , B (10)/10. , 3.87 , 10.5/


( ints ( i ) , i =2 ,8 ,2)/4*6/ , A (10)/ -1.0/
MAT /1. , 2. , 3. , 4. , 5. , 6./
(( MAT (i , j ) , j =1 ,3) , i =1 ,2)/1. , 2. , 3. , &
4. , 5. , 6./

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

87 / 266

Tableaux

Manipulation de tableaux

Les tableaux peuvent tre utiliss en tant quoprandes dans une expression :
les oprateurs intrinsques sont applicables des tableaux conformants,
les fonctions lmentaires sappliquent lensemble du tableau.

Dans ces cas, les fonctions ou oprateurs sont appliqus chaque lment du tableau (log, sqrt, ...).
Exemple
REAL , DIMENSION ( -4:0 ,0:2) :: B
REAL , DIMENSION (5 ,3)
:: C
REAL , DIMENSION (0:4 ,0:2) :: D
...
B = C * D - B **2
B = SIN ( C )+ COS ( D )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

88 / 266

Tableaux

Manipulation de tableaux

Les sections rgulires de tableaux sont obtenus en faisant varier le ou les indices laide dun triplet de la
forme :
[limite1 ]:[limite2 ][:pas]
cette notation est quivalente une pseudo-boucle ;
une section de tableau est aussi un tableau ;
le rang dune section de tableau est infrieur ou gal celui du tableau global ;
un tel triplet indique que lindice correspondant dbute avec la valeur limite1 et se termine une valeur

limite2 ;
pas est lincrment de lindice.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

89 / 266

Tableaux

Manipulation de tableaux

Exemple
A (:)
A (3:9)
A (3:9:1)
A(m:n)
A(m:n:k)
A (8:3: -1)
A (8:3)
A ( m :)
A (: n )
A (::2)
A(m:m)
A(m)

!
!
!
!
!
!
!
!
!
!
!
!
!

Le tableau global
A (3) A (9) par pas de 1
Idem
A(m) A(n)
A ( m ) A ( n ) par pas de k
A (8) A (3) par pas de -1
A (8) A (3) , pas de 1 = > taille nulle
de A ( m ) la borne suprieure de A
de la borne infrieure de A A ( n )
borne inf . de A borne sup . , pas de 2
section constitue de 1 lment
( ce n est pas un scalaire !)
section quivalente un scalaire

Seules les oprations sur des sections conformantes sont valides :


Exemple
REAL , DIMENSION (1:6 ,1:8) :: P
P (1:3 ,1:4)
= P (1:6:2 ,1:8:2) ! VALIDE
P (2:8:2 ,1:7:3) = P (1:3 ,1:4)
! INVALIDE
P (2:6:2 ,1:7:3) = P (2:5 ,7)
! INVALIDE

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

90 / 266

Tableaux

Manipulation de tableaux

REAL, DIMENSION(1:6,1:8) :: P

P(1:3,1:4)

P(2:6:2,1:7:3)

P(2:5,7), P(2:5,7:7)

P(1:6:2,1:8:2)

Attention, P(2:5,7) est une section 1D tandis que P(2:5,7:7) est une section 2D : ces 2 tableaux ne sont
donc pas conformants.
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

91 / 266

Entres-Sorties

Introduction

Gnralits

Dclarations

Oprateurs et expressions

Structures de contrle

Tableaux

Entres-Sorties
Introduction
Accs squentiel
Fichier binaire squentiel
Fichier texte squentiel

Accs direct
Fichier binaire accs direct
Fichier texte accs direct

Fichier temporaire
Destruction dun fichier
Fichier interne
Instructions de positionnement
Instruction INQUIRE

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

92 / 266

Entres-Sorties

Formats BOZ
Units standards
Instruction FORMAT
Mots-cls END=, ERR=
8

Procdures

Common

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

93 / 266

Entres-Sorties

Introduction

Introduction

On appelle entre-sortie , un transfert dinformations entre la mmoire de lordinateur et lun de ses


priphriques (un disque le plus souvent).
Une entre se traduit par une lecture dinformations du priphrique vers la mmoire, tandis quune sortie
implique une criture de la mmoire vers le priphrique.
Ces informations sont stockes dans un fichier qui possde un nom.
Lunit de transmission entre la mmoire et le priphrique sappelle le bloc. Il permet deffectuer le traitement
en passant par une zone intermdiaire dite zone tampon (buffer ) permettant ainsi de limiter le nombre de
transferts entre la mmoire et le priphrique : opration coteuse.
Lunit de traitement est lenregistrement logique : il correspond la longueur des donnes traites lors dune
opration de lecture-criture.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

94 / 266

Entres-Sorties

Introduction

Lexploitation dun fichier au sein dun programme ncessite au pralable son ouverture qui, en Fortran, est faite
au moyen de linstruction OPEN.
Cette instruction permet notamment :
de connecter le fichier un numro dunit logique : cest celui-ci que lon indiquera par la suite pour

toute opration de lecture-criture ;


de spcifier le mode dsir : lecture, criture ou lecture-criture,
dindiquer le mode de transfert : avec ou sans conversion en caractres ;
dindiquer le mode daccs au fichier : squentiel ou direct.

Si louverture du fichier est fructueuse, des lectures-critures pourront tre lances laide des instructions
READ/WRITE par lintermdiaire du numro dunit logique.
Une fois le traitement du fichier termin, on le fermera au moyen de linstruction CLOSE.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

95 / 266

Entres-Sorties

Accs squentiel

Accs squentiel

On dit quun fichier est squentiel lorsquil est ncessaire davoir trait les enregistrements prcdant celui auquel
on dsire accder.
Pour un fichier en lecture le paramtre IOSTAT de linstruction READ permet notamment de grer la fin de
fichier ; celui-ci fait rfrence une variable entire qui est valorise lissue de la lecture comme suit :
0 si la lecture sest bien droule ;
une valeur positive si une erreur sest produite ;
une valeur ngative si la fin de fichier ou une fin denregistrement a t rencontre.

On prendra soin de tester la valeur de cette variable immdiatement aprs chaque lecture.
Pour une analyse plus fine des erreurs de lecture se reporter la page 217.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

96 / 266

Entres-Sorties

Accs squentiel

Fichier binaire squentiel

On appelle fichier binaire un fichier dans lequel on stocke les informations telles quelles sont reprsentes en
mmoire.
Cest au moment de louverture du fichier que lon indique le type de fichier trater.
Exemple
real , dimension (100)
integer
real
integer

::
::
::
::

tab
i
r
ios

OPEN ( UNIT =1 ,
FILE = " data_bin_seq " , &
FORM = " unformatted " , ACCESS = " sequential " , &
ACTION = " read " ,
POSITION = " rewind " ,
&
IOSTAT = ios )
if ( ios /= 0 ) stop " Problme l ouverture "
READ ( UNIT =1 , IOSTAT = ios ) tab , i , r
do while ( ios == 0 )
...
READ ( UNIT =1 , IOSTAT = ios ) tab , i , r
end do
CLOSE ( UNIT =1 )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

97 / 266

Entres-Sorties

Accs squentiel

On demande louverture du fichier dont le nom est data_bin_seq. Cest un fichier binaire squentiel (unformatted,
sequential) que lon dsire lire depuis le dbut (rewind).
Ce fichier est connect lunit logique dont le numro est 1. Cest ce numro que lon indique au moment de la lecture
des variables (tab, i, r), ainsi qu la fermeture du fichier.
En cas derreur lors de louverture dun fichier, en labsence du mot-cl IOSTAT le programme sinterrompt avec dition
dun message rsumant lerreur. Ici ce mot-cl est prcis. Il permet de personnaliser le traitement en cas derreur. Il fait
rfrence une variable entire (ici la variable ios) laquelle, lissue de lOPEN, est valorise de la faon suivante :
zro si tout sest bien pass ;
une valeur non nulle si une erreur sest produite.
Il faudra videmment la tester avant dentreprendre toute opration dentre-sortie sur le fichier.
Ce mme mot-cl est prcis au sein de linstruction READ. Il rfrence la mme variable (ios) qui refltera ltat de la
lecture une fois celle-ci effectue. Elle est utilise pour notamment grer la fin de fichier.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

98 / 266

Entres-Sorties

Accs squentiel

Fichier texte squentiel

Dans un fichier texte les donnes sont stockes sous forme de caractres. De ce fait :
lors dune lecture, elles sont converties en binaire avant dtre ranges en mmoire ;
lors dune criture, elles sont converties en caractres avant dtre crites dans le fichier.

Cette opration de conversion est signale au sein des instructions READ/WRITE :


laide dune chane de caractres appele format ddition (paramtre FMT=) ;
ou bien en utilisant un nom de liste (NAMELIST) regroupant les variables que lon dsire exploiter (paramtre

NML=).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

99 / 266

Entres-Sorties

Accs squentiel

Formats ddition

Pour que la conversion puisse tre faite, il est ncessaire de connatre le type de la donne convertir.
Pour cela le format ddition contient des descripteurs :
descripteur I pour le type INTEGER ;
descripteurs F, E pour le type REAL ;
descripteur L pour le type LOGICAL ;
descripteur A pour le type CHARACTER.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

100 / 266

Entres-Sorties

Accs squentiel

Exemple
PROGRAM t e x t e _ s e q u e n ti e l
real , dimension (10) ::
integer
::
real
::
integer
::

tab
i
r
ios

OPEN ( UNIT =1 ,
FILE = " data_txt_seq " ,
FORM = " formatted " , ACCESS = " sequential " ,
STATUS = " old " ,
ACTION = " write " ,
POSITION = " rewind " , IOSTAT = ios )
if ( ios /= 0 ) then ! Problme l ouverture
...
else
WRITE ( UNIT =1 , FMT = " (10 F8 .4 , I3 , F6 .3) " ) tab ,
...
endif
...
CLOSE ( UNIT =1 )
END PROGRAM t e x t e _ s e q u e n t i e l

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

&
&
&

i, r

26 mai 2015

101 / 266

Entres-Sorties

Accs squentiel

Dans cet exemple, on demande louverture du fichier dont le nom est data_txt_seq. Cest un fichier texte
squentiel (formatted, sequential) existant (old) que lon dsire craser (rewind).
Comme prcdemment, lissue de lOPEN on teste la valeur de retour contenue dans lentier ios .
Si louverture sest bien passe on lance, laide de linstruction WRITE, lcriture en caractres dun
enregistrement comportant un tableau de rels (tab) suivi dun entier puis dun rel (i, r).
Le format ddition spcifi sous la forme dune constante chane de caractres ((10F8.4,I3,F6.3)) permet
de convertir en caractres les variables ci-dessus :
10F8.4 : criture des 10 lments du tableau tab . Chacun a un gabarit de 8 caractres avec 4 chiffres en

partie dcimale ;
I3 : criture de lentier i sur 3 caractres ;
F6.3 : criture du rel r sur 6 caractres avec 3 chiffres en partie dcimale.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

102 / 266

Entres-Sorties

Accs squentiel

Formats ddition en lecture

Iw permet la conversion des w caractres suivants dans le type INTEGER ;


Fw.d : permet la conversion des w caractres suivants dans le type REAL. Si le point dcimal nest pas

prsent alors les d derniers caractres dsignent la partie fractionnaire ;


Ew.d : permet la conversion des w caractres suivants (interprts comme un nombre rel en notation

exponentielle) dans le type REAL ;


Lw : permet la conversion des w caractres suivants dans le type LOGICAL ;
A[w ] : permet de lire des caractres.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

103 / 266

Entres-Sorties

Accs squentiel

Format ddition I en lecture

Dans ce qui suit le caractre ^ reprsente lespace. Les diffrentes entres prsentes sont supposes figurer dans
un fichier texte squentiel connect lunit 1 aprs un OPEN.
Exemple
INTEGER i , j
...
READ ( UNIT =1 , FMT = " ( I5 , I4 ) " ) i , j
...

Entres
^^45^^^9^
^-24^10^^

Affectations
i=45, j=9
i=-24, j=10

noter : dans un champ en entre, lespace est ignor.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

104 / 266

Entres-Sorties

Accs squentiel

Formats ddition F, E et D en lecture

Ce format a la forme gnrale : Fw.d , Ew.d ou bien Dw.d .


Le nombre rel lire peut tre soit en notation virgule fixe, soit exponentielle avec, dans ce dernier cas,
lexposant prfix de la lettre E ou D.
Le point dcimal peut ne pas figurer :
sil est spcifi alors le nombre indiqu par d est ignor, cest le nombre de dcimales figurant en entre qui

est pris en compte ;


sil est omis cest le nombre indiqu par d qui est considr.
Exemple
REAL x , y
...
READ ( UNIT =1 , FMT = " ( F4 .1 , F6 .2) " ) x , y
...

Entres
^3.1-3.141
^123^^5678

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Affectations
x=3.1, y=-3.141
x=12.3, y=56.78

Langage Fortran(Base)

26 mai 2015

105 / 266

Entres-Sorties

Accs squentiel

Exemple
REAL x
...
READ ( UNIT =1 , FMT = " ( E12 .6) " ) x
! ou bien
READ ( UNIT =1 , FMT = " ( F12 .6) " ) x
...

Entres
2.718281^^^^
2718281^^^^^
27.18281d-1^
.2718281e+1^
.2718281^e^1
^^^^^2718281
^^2^7^18^281
^^^^^^^^^271

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Affectations
x=2.718281
x=2.718281
x=2.718281
x=2.718281
x=2.718281
x=2.718281
x=2.718281
x=0.000271

Langage Fortran(Base)

26 mai 2015

106 / 266

Entres-Sorties

Accs squentiel

Format ddition L en lecture

Ce format a la forme gnrale : Lw


Ce type de format permet la lecture de valeurs logiques.
Le caractre w indique comme prcdemment la largeur du champ en entre. Celui-ci doit comporter comme
premier caractre non blanc lune des lettres F, f, T ou t ventuellement prcde du caractre .. Nimporte
quels caractres peuvent complter le champ.
Exemple
LOGICAL l1 , l2
...
READ ( UNIT =1 , FMT = " ( L6 , L7 ) " ) l1 , l2
...

Entres
.true..false.
^^^^t..FACILE
t^^^^^F^^^^^^

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Affectations
l1=.TRUE., l2=.FALSE.
l1=.TRUE., l2=.FALSE.
l1=.TRUE., l2=.FALSE.

Langage Fortran(Base)

26 mai 2015

107 / 266

Entres-Sorties

Accs squentiel

Format ddition A en lecture

Ce format a la forme gnrale : A[w ]


Ce type de format permet la lecture de caractres. La valeur w indique le nombre de caractres que lon dsire
traiter en entre.
si la valeur de w est plus grande que la longueur l de la chane rceptrice, ce sont les l caractres les plus

droite qui seront lus ;


si elle est plus petite, w caractres seront lus et stockes dans la chane rceptrice qui sera complte

droite par des blancs ;


si elle nest pas prcise, cest la longueur spcifie lors de la dclaration de la chane de caractres qui

indiquera le nombre de caractres lire. Si la fin de lenregistrement est atteinte avant la fin de la lecture, la
chane est complte par des blancs.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

108 / 266

Entres-Sorties

Accs squentiel

Exemple
CHARACTER ( len =7) :: ch1 , ch2
...
READ ( UNIT =1 , FMT = " ( A6 , A8 ) " ) ch1 , ch2
READ ( UNIT =1 , FMT = " ( A6 , A8 ) " ) ch1 , ch2
READ ( UNIT =1 , FMT = " (A , A ) "
) ch1 , ch2
...

Entres

Affectations

BACH^^^^BACH^^
MOZARTHAENDEL^
MOZARTHAENDEL^

ch1="BACH^^^",ch2="^BACH^^"
ch1="MOZART^",ch2="AENDEL^"
ch1="MOZARTH",ch2="AENDEL^"

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

109 / 266

Entres-Sorties

Accs squentiel

Formats ddition en criture

Iw [.d ] permet ldition dune variable de type INTEGER sur w caractres. Sil est prsent d indique le

nombre minimum de chiffres dits : si ncessaire des 0 apparatront en tte du nombre ;


Fw.d : permet ldition dune variable de type REAL sur w caractres comprenant le point dcimal

suivi de d chiffres pour la partie fractionnaire ;


Ew.d : idem format F mais la sortie est faite en notation exponentielle ;
Lw : permet ldition dune variable de type LOGICAL sur w caractres ;
A[w ] : permet ldition dune variable de type CHARACTER.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

110 / 266

Entres-Sorties

Accs squentiel

Format ddition I en criture

Exemple
INTEGER i , j , k
i = -125
j = 1756
k = 1791
WRITE ( UNIT =1 , FMT = " ( I4 , I4 , I4 ) " ) i , j , k
WRITE ( UNIT =1 , FMT = " ( I5 , I6 , I6 ) " ) i , j , k
WRITE ( UNIT =1 , FMT = " ( I6 .5 , I6 .6 , I6 .6) " ) i , j , k

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Sorties
-12517561791
^-125^^1756^^1791
-00125001756001791

Langage Fortran(Base)

26 mai 2015

111 / 266

Entres-Sorties

Accs squentiel

Format ddition F en criture

Exemple
REAL x , y , z
x = 3.14159
y = -15.137
z = 799.7432
WRITE ( UNIT =1 , FMT = " ( F7 .5 , F8 .3 , F9 .4) " ) x , y , z
WRITE ( UNIT =1 , FMT = " ( F6 .2 , F9 .4 , F10 .5) " ) x , y , z

Sorties
3.14159^-15.137^799.7432
^^3.14^-15.1370^799.74323

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

112 / 266

Entres-Sorties

Accs squentiel

En ce qui concerne les formats 1 dcriture I, B, O, Z et F, lorsque le gabarit de la zone rceptrice est
insuffisant celle-ci est remplie par le caractre *. Depuis la norme Fortran 95 il est possible dviter cela en
indiquant 0 comme largeur de zone.
Exemple
PROGRAM gabarit
INTEGER I
REAL
R
I = 129876
R = -2345.78
WRITE ( UNIT =1 , FMT = " ( I4 , F6 .3) " ) I , R
WRITE ( UNIT =1 , FMT = " ( I0 , F0 .3) " ) I , R
END PROGRAM gabarit

Sorties
**********
129876-2345.780

formats B, O, Z : c.f. Remarques en fin de chapitre.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

113 / 266

Entres-Sorties

Accs squentiel

Format ddition E et D en criture

Avec les format Ew.d [Ee ], Dw.d on obtiendra en sortie le motif :


S0.XXX-XXXESXX[X], S0.XXX-XXXDSXX[X], S0.XXX-XXXESXX-XX
<--d-->
<--d-->
<--d--> <-e->
<-------w-------> <-------w-------> <-------w------->

par dfaut, le nombre de caractres e utilis pour reprsenter lexposant est 2

(3 pour les exposants tels que : 99 < |exp| 999) ;


le caractre S indique une position pour le signe ;
un facteur dchelle peut prcder ce type de format. Il scrit sous la forme k P et permet dditer le nombre

avec k chiffres avant le point dcimal (modifie en consquence la valeur de lexposant) ;


si -d <k 0, la partie dcimale sera constitue de |k | zros suivis de d -|k | chiffres significatifs ;
si 0<k <d +2, le nombre en sortie sera constitu de k chiffres significatifs avant le point dcimal et de d -k +1

chiffres significatifs en partie dcimale ;


toute autre valeur de k est invalide : dans ce cas, la zone en sortie sera remplie par le caractre * ;
celui-ci sapplique tous les formats E qui suivent. Pour retrouver le comportement par dfaut il suffit de

prciser le facteur 0P.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

114 / 266

Entres-Sorties

Accs squentiel

Exemple
REAL x , y , z
DOUBLE PRECISION xd , yd , zd
x = 3.14159;
y = -15.137;
z = 799.74328;
WRITE ( UNIT =1 ,
WRITE ( UNIT =1 ,
WRITE ( UNIT =1 ,
WRITE ( UNIT =1 ,

xd = 3.14159 d0
yd = -15.137 d0
zd = 799.74328 d0
FMT = " ( D12 .6 , E13 .5 , E15 .8) " ) x , y , z
FMT = " (4 P , D12 .6 , E13 .5 ,0 P , E10 .3) " ) x , y , z
FMT = " ( D12 .6 , E13 .5 , E15 .8) " ) xd , yd , zd
FMT = " (4 P , D12 .6 , E13 .5 ,0 P , E15 .8) " ) xd , yd , zd

Sorties
0.314159D+01^-0.15137E+02^0.79974329E+03
3141.590D-03^-1513.70E-02^0.800E+03
0.314159D+01^-0.15137E+02^0.79974328E+03
3141.590D-03^-1513.70E-02^0.79974328E+03

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

115 / 266

Entres-Sorties

Accs squentiel

Il existe deux variantes du format E qui correspondent aux descripteurs EN et ES. Le facteur dchelle k P ne peut
tre appliqu dans ce contexte.
Le descripteur EN permet la sortie dun rel en notation dite ingnieure . Dans ce type de reprsentation, la
valeur absolue de la partie entire est suprieure ou gale 1 et infrieure 1000 et lexposant est divisible par 3.
Exemple
REAL x , y , z , t
x = 6.421
y = -.5
z = .00217
t = 4721.3
WRITE ( UNIT =1 , FMT = " ( EN12 .3 , EN12 .3 , EN12 .3 , EN12 .3) " ) x , y , z , t

Sorties
^^^6.421E+00-500.000E-03^^^2.170E-03^^^4.721E+03

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

116 / 266

Entres-Sorties

Accs squentiel

Le descripteur ES permet la sortie dun rel en notation dite scientifique . Dans ce type de reprsentation, la
valeur absolue de la partie entire est suprieure ou gale 1 et infrieure 10.
Exemple
REAL x , y , z , t
x = 6.421
y = -.5
z = .00217
t = 4721.3
WRITE ( UNIT =1 , FMT = " ( ES12 .3 , ES12 .3 , ES12 .3 , ES12 .3) " ) x , y , z , t

Sorties
^^^6.421E+00^^-5.000E-01^^^2.170E-03^^^4.721E+03

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

117 / 266

Entres-Sorties

Accs squentiel

Par dfaut, la prsence du signe + pour les donnes numriques positives dpend du compilateur. Il existe des
descripteurs permettant de forcer sa prsence ou bien de le supprimer :
SS (sign suppress ) : le signe + napparat pas ;
SP (sign print ) : le signe + prcde la donne ;
S : restauration du mode par dfaut.
Exemple
INTEGER i , j
REAL x , y
i = 1756
j = -69
x = 6.421
y = .00217
WRITE ( UNIT =1 , FMT = " ( SP , F7 .3 , SS , ES12 .3 , I4 , SP , I6 ) " ) x , y , j , i

Sorties
^+6.421^^^2.170E-03^-69^+1756

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

118 / 266

Entres-Sorties

Accs squentiel

Format ddition L en criture

Ce format a la forme gnrale : Lw


Ce type de format permet lcriture de valeurs logiques.
En sortie on obtiendra w -1 blancs suivis de la lettre T pour une valeur .true. et F pour une valeur .false..
Exemple
LOGICAL l1 /. true ./ , l2 /. false ./
...
WRITE ( UNIT =1 , FMT = " ( L6 , L7 ) " ) l1 , l2
...

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Sorties
^^^^^T^^^^^^F

Langage Fortran(Base)

26 mai 2015

119 / 266

Entres-Sorties

Accs squentiel

Format ddition A en criture

Le format A[w ] permet la sortie de chanes de caractres. La valeur w est facultative. Si elle est prcise, elle
indique la largeur de la zone rceptrice.
si la valeur de w est plus grande que la longueur l de la chane, en sortie celle-ci apparatra prcde de w -l

blancs ;
si elle est plus petite, seuls les w caractres les plus gauche de la chane seront crits ;
si la valeur w est absente, cest la longueur de la chane spcifie la dclaration qui indique la largeur du

champ en sortie.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

120 / 266

Entres-Sorties

Accs squentiel

Exemple
CHARACTER ( len =9) :: ch1 , ch2 , ch3
...
ch1 = " BEETHOVEN "
ch2 = " PUCCINI "
ch3 = " VERDI "
WRITE ( UNIT =1 , FMT = " ( A9 , A8 , A6 , A ) " ) ch1 , ch2 , ch3 , ch3
WRITE ( UNIT =1 , FMT = " ( A10 ) " ) ch3
ch1 = " Ludwig "
ch2 = " Van "
ch3 = " BEETHOVEN "
WRITE ( UNIT =1 , FMT = " (A ,A ,A , A ) " ) trim ( ch1 ) , trim ( ch2 ) , " " , ch3
...

Sorties
BEETHOVENPUCCINI^VERDI^VERDI^^^^
^VERDI^^^^
Ludwig^Van^BEETHOVEN

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

121 / 266

Entres-Sorties

Accs squentiel

Format ddition : Litteral string

Si une constante littrale de type chane de caractres est spcifie dans un format, celle-ci est reproduite telle
quelle en sortie.
Exemple
CHARACTER ( len =9) :: ch1 , ch2 , ch3
...
ch1 = " Ludwig "
ch2 = " Van "
ch3 = " BEETHOVEN "
WRITE ( UNIT =1 , FMT = " ( NOM : ,A , , PRNOM : ,A , A ) " ) &
ch3 , trim ( ch1 ) , trim ( ch2 )
...

Sortie
NOM^:^BEETHOVEN,^PRNOM^:^Ludwig^Van

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

122 / 266

Entres-Sorties

Accs squentiel

Descripteurs de contrle

descripteurs de positionnement :
n X : ignore (en entre), saute (en sortie) les n caractres suivants ;
Tc : permet de se positionner au caractre de rang c ;
TLn : permet de se positionner au caractre situ n positions gauche par rapport la position courante ;
TRn : permet de se positionner au caractre situ n positions droite par rapport la position courante.
descripteurs de gestion des blancs dans les champs numriques en entre :
BN (Blank Null ) : ignore les blancs ;
BZ (Blank Zero ) : interprte le caractre blanc comme un 0.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

123 / 266

Entres-Sorties

Accs squentiel

Exemple
INTEGER i , j , k , l
...
READ ( UNIT =1 , FMT = " ( I4 ,3 X , I2 , T12 , I3 , TL4 , I1 ) " ) i , j , k , l
...

Entres
1901^1254^4361

Affectations
i=1901,j=54,k=361,l=4

Exemple
INTEGER i , j , k
...
READ ( UNIT =1 , FMT = " ( I3 , BZ , I2 , BN , I3 ) " ) i , j , k
...

Entres
^8^2^4^^

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Affectations
i=8,j=20,k=4

Langage Fortran(Base)

26 mai 2015

124 / 266

Entres-Sorties

Accs squentiel

Un autre descripteur, /, provoque le passage lenregistrement suivant :


en entre : abandon de lenregistrement courant et positionnement au dbut du suivant.
Exemple
INTEGER i , j
READ ( UNIT =1 , FMT = " ( I4 ,/ , I4 ) " ) i , j

Entres
1756^1254
1791

Affectations
i=1756,j=1791

en sortie : criture du caractre newline .


Exemple
CHARACTER ( len =9) :: ch1 , ch2 , ch3
ch1 = " Ludwig "
ch2 = " Van "
ch3 = " BEETHOVEN "
WRITE ( UNIT =1 , FMT = " ( NOM

: ,A ,/ , PRNOM : ,A , A ) " ) ch3 , trim ( ch1 ) , trim ( ch2 )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Sortie
NOM^^^^:^BEETHOVEN
PRNOM^:^Ludwig^Van
Langage Fortran(Base)

26 mai 2015

125 / 266

Entres-Sorties

Accs squentiel

Facteur de rptition

Lorsquune liste de descripteurs identiques figure dans un format il est possible de les regrouper au moyen dun
facteur de rptition indiqu sous la forme dune constante littrale entire.
Exemple
INTEGER i , j , k
INTEGER t (3)
...
READ ( UNIT =1 , FMT = " ( I4 , I4 , I4 ) " ) i , j , k
READ ( UNIT =1 , FMT = " (3 I4 ) " ) t
...
WRITE (6 , " (3(1 X , I4 )) " ) t

Entres
^^45^^^9^^10
^-24^10^^^99

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Affectations
i=45, j=9, k=10
t(1)=-24, t(2)=10, t(3)=99
Sortie
^^-24^^^10^^^99

Langage Fortran(Base)

26 mai 2015

126 / 266

Entres-Sorties

Accs squentiel

Rexploration dun format

Lensemble des variables spcifies dans une instruction READ/WRITE sappelle la liste dentre-sortie. Chaque
lment de cette liste est associ un descripteur du format.
si le nombre de descripteurs correspond au nombre de variables de la liste, ceux-ci sappliquent aux lments

successifs de cette liste ;


sil est plus grand, les suivants sont ignors (le format est abandonn) ;
sil est plus petit, le format est rexplor. Cette rexploration entrane le passage lenregistrement suivant.

Conclusion
En Fortran la liste dentre-sortie est toujours satisfaite.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

127 / 266

Entres-Sorties

Accs squentiel

La rgle de rexploration est la suivante :


si le format ne contient aucun groupe de descripteurs entre parenthses, alors il est rexplor depuis son

dbut ;
sinon, la rexploration est faite partir du groupe de niveau 1 le plus droite. Sil est prcd dun facteur

de rptition, il est pris en compte.


Le caractre | dans les exemples suivant indique lendroit partir duquel la rexploration est effectue :
"( I6, 10X,I5, 3F10.2 )"
|
"( I6, 10X,I5, (3F10.2) )"
|
"( I6,(10X,I5), 3F10.2 )"
|
"( F6.2, (2F4.1,2X,I4, 4(I7,F7.2)) )"
|
"( F6.2, 2(2F4.1,2X,I4), 4(I7,F7.2) )"
|
"( F6.2,(2(2F4.1,2X,I4), 4(I7,F7.2)) )"
|

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

128 / 266

Entres-Sorties

Accs squentiel

Exemple
INTEGER :: i =100 , j =200 ! depuis Fortran 90.
INTEGER :: k , l
DATA
k /300/ , l /400/ ! ancienne forme
! d init ialisati on .
REAL
t (3 ,4)
DATA
t / 1. ,
4. ,
9. , &
16. , 25. , 36. , &
49. , 64. , 81. , &
100. , 121. , 144. /
WRITE (6 , " ( 4 i5 , ( t25 ,4 f8 .2) ) " ) i , j , k , l , &
(( t (i , j ) , j =1 ,4) , i =1 ,3)

Sorties
^^100^^200^^300^^400^^^^^^^^1.00^^^16.00^^^49.00^^100.00
^^^^^^^^^^^^^^^^^^^^^^^^^^^^4.00^^^25.00^^^64.00^^121.00
^^^^^^^^^^^^^^^^^^^^^^^^^^^^9.00^^^36.00^^^81.00^^144.00

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

129 / 266

Entres-Sorties

Accs squentiel

Format libre

En Fortran il existe un format implicite appel format libre (list-directed formatting ) :


dans linstruction READ/WRITE, on spcifie alors le caractre * la place du format ;
dans ce contexte, les enregistrements sont interprts comme une suite de valeurs spares par des

caractres appels sparateurs. Cest le type des variables auxquelles ces valeurs vont tre affectes qui
dtermine la conversion effectuer. Les caractres interprts comme des sparateurs sont :
la virgule ( , ) si lors de lOPEN le mot-cl DECIMAL a pour valeur POINT (valeur par dfaut) ;
le point-virgule ( ; ) si lors de lOPEN le mot-cl DECIMAL a pour valeur COMMA ;
le blanc (espace).

une chane de caractres contenant un caractre sparateur doit tre dlimite soit par des quotes () soit

par des guillemets (") ;


une constante complexe est code comme 2 nombres rels entre parenthses spars par une virgule. Les

parenthses ainsi que la virgule peuvent tre suivies ou prcdes de blancs.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

130 / 266

Entres-Sorties

Accs squentiel

une fin denregistrement (newline ) a le mme effet quun blanc. Elle peut apparatre :
au sein dune chane de caractres (dlimite par des quotes () ou par des guillemets (")) ;
entre la partie relle et la virgule ou entre la virgule et la partie imaginaire dune constante complexe.
si une chane de caractres a t dclare avec une longueur plus petite que celle de la valeur lue alors seuls

les caractres les plus gauche de la valeur seront stocks dans la chane. Sinon, celle-ci est complte par
des blancs ;
si dans lenregistrement en entre apparaissent deux virgules la suite (ventuellement avec des blancs

entre) alors llment correspondant de la liste ne sera pas affect ;


en entre, plusieurs valeurs identiques peuvent tre regroupes laide dun facteur de rptition sous la

forme n*valeur ;
la prsence du caractre / parmi les donnes en entre interrompt la lecture : les variables restantes au

sein de la liste fournie ne seront donc pas valorises ;


mme dans ce contexte, une lecture provoque le passage lenregistrement suivant : si lenregistrement

courant na pas t exploit dans sa totalit, le reste est donc perdu.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

131 / 266

Entres-Sorties

Accs squentiel

Exemple
INTEGER :: i =100 , j =200 , k =300
REAL
:: t (6)
DATA t /6*1./
COMPLEX c
CHARACTER ( len =18) ch
...
READ ( UNIT =1 , FMT =* ) i , j , k , t , c , ch
WRITE ( UNIT =2 , FMT =* ) i , j , k , c , ch (1:8)
WRITE ( UNIT =2 , FMT =* ) t
Entres
150
260,,
3*2.718
2* 3.14
( 2.
, 3. )
Wolfgang
Amadeus Mozart

Affectations
i=150
j=260
t(1)=t(2)=t(3)=2.718
t(4)=t(5)=1., t(6)=3.14
c=(2.,3.)
ch=Wolfgang Amadeus M

Sorties (avec compilateur xlf dIBM )


150 260 300 (2.000000000,3.000000000) Wolfgang
2.717999935 2.717999935 2.717999935 1.000000000 1.000000000 3.140000105

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

132 / 266

Entres-Sorties

Accs squentiel

Mme exemple avec mot-cl DECIMAL=COMMA


INTEGER
:: i =100 , j =200 , k =300
REAL , DIMENSION (6) :: t =1.
COMPLEX
:: c
CHARACTER ( len =18) :: ch
...
OPEN ( UNIT =1 , ... , DECIMAL = COMMA )
OPEN ( UNIT =2 , ... , DECIMAL = COMMA )
READ ( UNIT =1 , FMT =* ) i , j , k , t , c , ch
WRITE ( UNIT =2 , FMT =* ) i , j , k , c , ch (1:8)
WRITE ( UNIT =2 , FMT =* ) t
Entres
150
260;;
3*2,718
2* 3,14
( 2,
; 3, )
Wolfgang
Amadeus Mozart

Affectations
i=150
j=260
t(1)=t(2)=t(3)=2.718
t(4)=t(5)=1., t(6)=3.14
c=(2.,3.)
ch=Wolfgang Amadeus M

Sorties (avec compilateur xlf dIBM )


150 260 300 (2,000000000;3,000000000) Wolfgang
2,717999935 2,717999935 2,717999935 1,000000000 1,000000000 3,140000105

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

133 / 266

Entres-Sorties

Accs squentiel

Autre exemple
INTEGER
:: dates (2)
character ( len =15) :: nom
REAL , DIMENSION (6) :: t =1.
...
read ( unit =1 , fmt =* ) dates , nom
write ( unit =2 , fmt =* ) dates , trim ( nom )
read ( unit =1 , fmt =* ) t ; write ( unit =2 , fmt =* ) t
read ( unit =1 , fmt =* ) t ; write ( unit =2 , fmt =* ) t
read ( unit =1 , fmt =* ) t ; write ( unit =2 , fmt =* ) t
Entres
1944 1971
Jim Morisson
2.718 / 2*2.718
8* 3.14
6*9.81

1944
2.718000
2.718000
9.810000

Affectations
dates(1)=1944, dates(2)=1971
nom=Jim Morisson

t(1)=2.718, t(2:6)=1.
t(1)=2.718, t(2:6)=1.
t(:)=9.81

Sorties (avec compilateur ifort dINTEL )


1971 Jim Morisson
1.000000
3.140000
1.000000
1.000000
1.000000
3.140000
1.000000
1.000000
9.810000
9.810000
9.810000
9.810000

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

1.000000
1.000000
9.810000
26 mai 2015

134 / 266

Entres-Sorties

Accs squentiel

namelist

On peut regrouper les variables que lon dsire lire ou crire au sein dune liste laquelle on donne un nom.
Ce regroupement seffectue au moyen de linstruction NAMELIST :
NAMELIST/nom_liste/liste_variables
nom_liste est le nom de la NAMELIST ;
liste_variables est une liste de variables prcdemment dclares.

Remarques :
1

au niveau de linstruction READ/WRITE la namelist remplace le format ainsi que la liste de variables qui,
dans ce contexte, devient inutile ;

lenregistrement correspondant (lu ou crit) sera trat selon le format suivant :


&nom_liste liste daffectations /

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

135 / 266

Entres-Sorties

Accs squentiel

La liste daffectations concerne les variables de la namelist qui peuvent apparatre dans nimporte quel ordre,
certaines pouvant tre omises. Les diffrentes affectations sont spares par des caractres sparateurs (, ou
blancs).
Le caractre / indique la fin de la namelist . En entre, les ventuels caractres qui suivent sont ignors.
En entre les chanes de caractres doivent tre dlimites laide du caractre ou ".
En sortie celles-ci apparaissent par dfaut sans dlimiteur. Cest le paramtre DELIM= de linstruction OPEN qui
permet de le dfinir.
Dans linstruction READ/WRITE, la namelist est indique laide du paramtre NML= ( la place de FMT=).
Lutilisation des namelist est un moyen trs commode deffectuer des entres-sorties sans avoir dfinir de
format.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

136 / 266

Entres-Sorties

Accs squentiel

Exemple
INTEGER
:: i =100 , j =200 , k =300
INTEGER
:: t (3)
CHARACTER ( len =11) :: ch
NAMELIST / LISTE /i ,j ,k ,t , ch
...
READ ( UNIT =1 , NML = liste )
WRITE ( UNIT =2 , NML = liste )
...

Entres
&LISTE t=3*2,i=1, k=4 ch="Rythm&Blues" /
Affectations
i=1,k=4,t(1)=t(2)=t(3)=2,ch="Rythm&Blues"
Sorties
^&LISTE
^I=1,^J=200,^K=4,^T=2,^2,^2,^CH=Rythm&Blues
^/

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

137 / 266

Entres-Sorties

Accs direct

Accs direct

la diffrence dun fichier squentiel, il est possible daccder un enregistrement dun fichier accs direct
sans avoir trait les prcdents.
Chaque enregistrement est repr par un numro qui est son rang dans le fichier. Leur taille est fixe.
Au sein de linstruction OPEN :
le paramtre RECL= est obligatoire, sa valeur indique la taille des enregistrements (en caractres pour les

fichiers textes, dpend du processeur pour les fichiers binaires) ;


le paramtre POSITION= est invalide ;
si le paramtre FORM nest pas prcis, cest la valeur unformatted qui est prise en compte.

Le rang de lenregistrement que lon dsire traiter doit tre spcifi laide du paramtre REC= de linstruction
READ/WRITE. Un enregistrement ne peut pas tre dtruit mais par contre il peut tre rcrit. Dans ce contexte,
les namelist ainsi que le format libre sont interdits.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

138 / 266

Entres-Sorties

Accs direct

Fichier binaire accs direct

Exemple
real , dimension (100) :: tab
integer ios , n
OPEN ( UNIT =1 ,
FILE = " da t a_ bi n_ d ir ec t " , &
ACCESS = " direct " , ACTION = " read " ,
&
STATUS = " old " ,
RECL =400 )
OPEN ( UNIT =2 ,
FILE = " data_txt_seq " , &
ACTION = " read " , STATUS = " old " )
...
READ ( UNIT =2 , FMT =* ) n
READ ( UNIT =1 , REC =n , IOSTAT = ios ) tab
if ( ios > 0 ) then
print " (a , i0 ,/ , a ) " , " Erreur lors du traitement de &
&l enregist rement de rang " , rang , &
"
== > peut - tre un problme d existence . "
stop 4
end if
...
CLOSE ( UNIT =2 )
CLOSE ( UNIT =1 )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

139 / 266

Entres-Sorties

Accs direct

Le fichier dont le nom est data_bin_direct est connect lunit logique numro 1. Cest un fichier binaire
accs direct (ACCESS="direct" et paramtre FORM absent donc considr gal unformatted ). Chaque
enregistrement fait 400 octets (RECL=400).
On accde lenregistrement de rang n , valeur pralablement lue dans le fichier texte squentiel de nom
data_txt_seq connect lunit logique numro 2. Le paramtre IOSTAT de linstruction READ permet de
rcuprer ltat de la lecture dans lentier ios : une valeur non nulle positive signale une erreur du type
enregistrement inexistant par exemple.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

140 / 266

Entres-Sorties

Accs direct

Fichier texte accs direct

Exemple
real , dimension (100) :: tab
integer ios , n
OPEN ( UNIT =1 ,
FILE = " d at a _t xt _d i re ct " , &
FORM = " formatted " , ACCESS = " direct " ,
&
ACTION = " read " ,
STATUS = " old " ,
&
RECL =800 )
OPEN ( UNIT =2 ,
FILE = " data_txt_seq " , &
ACTION = " read " , STATUS = " old " )
READ ( UNIT =2 , FMT =* ) n
READ ( UNIT =1 , REC =n , IOSTAT = ios , FMT = " (100 F8 .4) " ) tab
if ( ios > 0 ) then
print " (a , i0 ,/ , a ) " , " Erreur lors du traitement de &
&l enregist rement de rang " , rang , &
"
== > peut - tre un problme d existence . "
stop 4
end if
...
CLOSE ( UNIT =2 ); CLOSE ( UNIT =1 )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

141 / 266

Entres-Sorties

Accs direct

On a adapt lexemple prcdent un fichier texte accs direct : le paramtre FORM="formatted" a donc t
prcis.
La valeur du paramtre RECL correspond la taille en caractres de chacun des enregistrements qui correspond
ici au format indiqu au niveau de linstruction READ (100*8=800).
Notes :
il nest pas permis de lire un fichier texte accs direct au moyen dun format libre ;
un fichier dans lequel on crit un seul enregistrement de rang n, contiendra en ralit n enregistrements avec

les n-1 premiers ayant un contenu indtermin. Lors de la lecture dun tel enregistrement, se pose le
problme de la reconnaissance de la nature de celui-ci. On pourra rsoudre ce problme en adjoignant aux
donnes une marque sous la forme dune variable logique par exemple.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

142 / 266

Entres-Sorties

Accs direct

Dans lexemple suivant des enregistrements de rang alatoire sont crs. Pour les reprer on ajoute en tte des
donnes une variable logique flag .
Exemple
program dir
implicit none
integer , parameter
::
real , dimension (n , m ) ::
real , dimension ( n )
::
integer i ,j , rang , ios ,
logical flag

n = 100 , m = 1000
matrice
vec
size

inquire ( iolength =size ) flag , matrice (: ,1)


open ( unit =1 ,
&
file = " direct . file " , &
form = " unformatted " , &
access = " direct " ,
&
action = " readwrite " , &
status = " unknown " ,
&
recl =size )
flag = . false .
do j =1 , m
write ( unit =1 , rec = j ) flag
end do
call random_number ( matrice )
flag = . true .
do j =1 , m
if ( matrice (1 , j ) > matrice (n , j ) ) &
write ( unit =1 , rec = j ) flag , matrice (: , j )
end do

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

143 / 266

Entres-Sorties

Accs direct

Exemple (suite)
do
print * , " Entrez un rang : "
read ( * , * , iostat = ios ) rang
if ( ios < 0 ) exit
if ( ios > 0 ) then
print * , " Erreur de saisie . Veuillez recommencer . "
cycle
end if
read ( unit =1 , rec = rang , iostat = ios ) flag , vec
if ( ios > 0 ) then
print " (a , i0 ,/ , a ) " , " Erreur lors du traitement de &
&l enregistrement de rang " , rang , &
"
== > peut - tre un problme d existence . "
cycle
end if
if ( flag ) then
print * , " vec (1) = " , vec (1) , " vec ( n ) = " , vec ( n )
else
print * , " Enregistrement " , rang , " indfini . "
end if
end do
close (1)
end program dir

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

144 / 266

Entres-Sorties

Accs direct

Notes :
linstruction INQUIRE( iolength=size ) ... permet de rcuprer dans lentier size la taille de la liste de

variables fournies qui servira renseigner, par la suite, le paramtre RECL de linstruction OPEN. Comme
cette valeur est exprime dans une unit dpendant du compilateur (pour les fichiers binaires en accs
direct), cette nouvelle forme de linstruction INQUIRE 2 , introduite par la norme Fortran 90, permet de la
calculer en saffranchissant de lunit ;
linstruction call random_number( matrice ) fait appel la procdure intrinsque RANDOM_NUMBER

(introduite par la norme Fortran 90) qui valorise le tableau transmis laide de nombres alatoires gnrs
dans lintervalle [0.,1.].

cette instruction est dtaille plus loin.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

145 / 266

Entres-Sorties

Fichier temporaire

Fichier temporaire

Si louverture dun fichier on positionne le mot-cl STATUS la valeur "scratch" alors celui-ci sera temporaire
et dtruit sa fermeture. Un tel fichier est anonyme : le paramtre FILE de linstruction OPEN ne doit donc pas
tre spcifi dans ce contexte.
Exemple
OPEN ( UNIT =1 ,
FORM = " formatted " ,
ACCESS = " direct " ,
ACTION = " write " ,
STATUS = " scratch " ,
RECL =1200 )
...
CLOSE ( UNIT =1 )

&
&
&
&
&

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

146 / 266

Entres-Sorties

Destruction dun fichier

Destruction dun fichier

Linstruction CLOSE admet le paramtre mot-cl STATUS qui par dfaut (pour un fichier non temporaire) prend
la valeur "KEEP" permettant ainsi de conserver le fichier aprs fermeture. Si on dsire le supprimer il suffira de
prciser la valeur "DELETE" pour ce paramtre.
Exemple
logical condition
OPEN ( UNIT =1 ,
&
FILE = " data_seq " , &
ACTION = " read " ,
&
STATUS = " old " )
...
if ( condition ) then
CLOSE ( UNIT =1 , STATUS = " delete " )
else
CLOSE ( UNIT =1 )
end if

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

147 / 266

Entres-Sorties

Fichier interne

Fichier interne

On appelle fichier interne un fichier dont les enregistrements sont en mmoire. Ce type de fichier induit des
changes entre zones de la mmoire et non plus entre un support externe et la mmoire.
Ces fichiers sont pr-connects : il ny a donc aucune ouverture ni fermeture effectuer.
Dans les instructions READ/WRITE, la place du numro dunit logique on indique une variable de type chane
de caractres. Cest celle-ci qui fait rfrence lenregistrement en mmoire.
Seul laccs squentiel format est permis dans ce cas. Les namelist sont interdites.
Lors dune criture il faut sassurer que la chane de caractres rceptrice est de taille suffisante.
Lors dune lecture, la fin de fichier est atteinte lorsquon essaie daccder aux caractres situs au-del de la
chane qui fait rfrence lenregistrement.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

148 / 266

Entres-Sorties

Fichier interne

Fichier interne

Exemple
INTEGER , PARAMETER
REAL , DIMENSION (n , m )
CHARACTER ( LEN =8)
INTEGER

::
::
::
::

n = 4, m = 6
tab
format = " ( F8 .3) "
i, j

WRITE ( format(2:3) , " ( I2 ) " ) n ! fichier interne


OPEN ( UNIT =1 ,
&
FILE = " data_txt_seq " , &
POSITION = " rewind " ,
&
ACTION = " write " ,
&
STATUS = " new " )
WRITE ( UNIT =1 , FMT =format ) (( tab (i , j ) , i =1 , n ) , j =1 , m )
CLOSE ( UNIT =1 )

Dans un format le facteur de rptition doit obligatoirement tre prcis laide dune constante littrale. Cet
exemple montre comment le gnrer dynamiquement en utilisant un fichier interne.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

149 / 266

Entres-Sorties

Fichier interne

Voici un autre exemple dans lequel on trate une centaine de fichiers dont les noms sont de la forme FILExxx
avec xxx prenant les valeurs de 001 100.
Exemple
PROGRAM gr ou pe _ fi ch ie r s
implicit none
character ( len =7) :: nom_fichier = " FILExxx "
integer i
do i =1 ,100
write ( nom_fichier (5:7) , " ( i3 .3) " ) i ! et non pas "( i3 )".
open ( unit =1 , file = nom_fichier , ... )
...
close ( unit =1 )
end do
END PROGRAM g ro up e_ f ic hi er s

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

150 / 266

Entres-Sorties

Fichier interne

Exemple
PROGRAM f i ch i er _interne
CHARACTER ( len =80) enreg
INTEGER
ios
REAL
x, y, z
NAMELIST / liste /x , y , z
OPEN ( UNIT =1 ,
FILE = " data_txt_seq " , &
FORM = " formatted " , ACTION = " read " ,
&
STATUS = " old " ,
POSITION = " rewind " )
DO
READ ( UNIT =1 , FMT = " ( a ) " , IOSTAT = ios ) enreg
if ( ios /= 0 ) exit
IF ( VERIFY ( enreg , " ,+ -0123456789. eEdD " ) == 0 ) THEN
READ ( enreg , FMT =* , iostat = ios ) x , y , z
! ---------------------------------------WRITE ( UNIT =* , NML = liste )
END IF
END DO
if ( ios > 0 ) stop " Erreur lors de la lecture . "
CLOSE ( UNIT =1 )
...
END PROGRAM f ichier_interne

Dans cet exemple on lit un fichier en ne traitant que les enregistrements constitus de rels et en ignorant tous
les autres.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

151 / 266

Entres-Sorties

Instructions de positionnement

Instructions de positionnement

Toute opration de lecture-criture dans un fichier est effectue par rapport la position courante dans ce
fichier. louverture celle-ci peut tre prcise laide du paramtre POSITION. Dans un fichier squentiel toute
lecture-criture dun enregistrement de rang n implique le positionnement lenregistrement de rang n+1.
Trois instructions BACKSPACE, REWIND et ENDFILE permettent de modifier la position :
BACKSPACE force la position au dbut de lenregistrement prcdent ;
REWIND force la position au dbut du fichier ;
ENDFILE crit un enregistrement de type fin de fichier. Il est alors ncessaire dexcuter ensuite lune des

deux instructions prcdentes.


Ces instructions admettent en paramtre le numro de lunit logique auquel le fichier est connect.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

152 / 266

Entres-Sorties

Instructions de positionnement

Exemple : troncature contrle dun fichier

Exemple
program troncature
REAL , dimension (100) :: tab
INTEGER
:: ios
LOGICAL
:: flag = . false .
OPEN ( UNIT =1 ,
FILE = " data_txt_seq " ,
ACTION = " readwrite " ,
POSITION = " append " ,
STATUS = " old " )

&
&
&
&

tab (:) = acos ( -1.)


WRITE ( UNIT =1 , FMT = " (100 F6 .3) " ) tab
REWIND ( UNIT =1 )

Le fichier dont le nom est data_txt_seq est ouvert avec un positionnement en fin de fichier
(POSITION="append"). Aprs criture dun enregistrement, on se repositionne en tte (REWIND).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

153 / 266

Entres-Sorties

Instructions de positionnement

Exemple (suite)
READ ( UNIT =1 , FMT = " (100 F6 .3) " , IOSTAT = ios ) tab
DO WHILE ( ios == 0 )
if ( flag ) then
BACKSPACE ( UNIT =1 )
ENDFILE ( UNIT =1 )
BACKSPACE ( UNIT =1 )
END IF
...
READ ( UNIT =1 , FMT = " (100 F6 .3) " , IOSTAT = ios ) tab
END DO
CLOSE ( UNIT =1 )
end program troncature

Ensuite on relit le fichier et si la variable flag contient la valeur .TRUE. on le tronque avant le dernier
enregistrement lu. (Instructions BACKSPACE et ENDFILE).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

154 / 266

Entres-Sorties

Instruction INQUIRE

Instruction INQUIRE

Linstruction dinterrogation INQUIRE permet de rcuprer un certain nombre dinformations concernant un


fichier ou un numro dunit logique.
Elle permet par exemple de tester si un fichier existe, sil est connect et dans ce cas de connatre les valeurs des
paramtres positionns lors de son ouverture via OPEN.
Cette interrogation peut tre faite en indiquant soit le numro dunit logique soit le nom du fichier.
Exemple
program inquire
LOGICAL existe
INTEGER ios
CHARACTER ( len =3) :: form
CHARACTER ( len =10) :: acces
INQUIRE ( FILE = " data_txt_seq " , EXIST = existe )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

155 / 266

Entres-Sorties

Instruction INQUIRE

Exemple (suite)
if ( existe ) then
OPEN ( UNIT =1 ,
FILE = " data_txt_seq " , &
POSITION = " rewind " , ACTION = " read " ,
&
IOSTAT = ios )
if ( ios /= 0 ) then ! erreur l ouverture
...
else
INQUIRE ( UNIT =1 ,
&
FORMATTED =form, &
ACCESS = acces )
end if
...
CLOSE ( UNIT =1 )
end if
end program inquire

Dans les variables caractres form et acces on rcupre respectivement les valeurs "YES" et "SEQUENTIAL" (si le
fichier data_txt_seq existe).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

156 / 266

Entres-Sorties

Formats BOZ

Formats BOZ
Les spcificateurs de format Bw [.d ], Ow [.d ] et Zw [.d ] permettent la conversion de donnes entires sous forme binaire,
octale et hexadcimale respectivement.
Exemple
PROGRAM boz
INTEGER I , J , K
I = 1415; J = 1515; K = 1715
WRITE ( UNIT = 1 , &
FMT = " ( B32 .32 , | , O11 .11 , | , Z8 .8) " ) I , J , K
I = -1415; J = -1515; K = -1715
WRITE ( UNIT = 1 , FMT = " ( B32 .32) " ) I
WRITE ( UNIT = 1 , FMT = " ( O11 .11) " ) J
WRITE ( UNIT = 1 , FMT = " ( Z8 .8) "
) K
END PROGRAM boz

Sorties
00000000000000000000010110000111|00000002753|000006B3
11111111111111111111101001111001
37777775025
FFFFF94D

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

157 / 266

Entres-Sorties

Units standards

Units standards

Les fichiers associs au clavier et lcran dune session interactive sont pr-connects en gnral aux numros
dunits logiques 5 et 6 respectivement : en lecture pour le premier, en criture pour le second.
Dans un souci de portabilit, on prfrera utiliser dans les instructions READ/WRITE le caractre * la place
du numro de lunit logique pour rfrencer lentre standard (READ) ou la sortie standard (WRITE). Cest
la valeur par dfaut du paramtre UNIT. Linstruction PRINT remplace linstruction WRITE dans le cas o celui-ci
nest pas prcis.
Exemple
CHARACTER ( LEN =8)
:: ft = " ( F8 .3) "
READ ( UNIT =5 , FMT = ft ) ...
READ ( UNIT =* , FMT = ft ) ...
READ ft , ...
...
WRITE ( UNIT =6 , FMT = ft ) ...
WRITE ( UNIT =* , FMT = ft ) ...
PRINT ft , ...

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

158 / 266

Entres-Sorties

Instruction FORMAT

Instruction FORMAT

Le format ddition peut tre dfini en dehors des instructions dentres-sorties READ/WRITE. Dans ce cas le
paramtre FMT= est positionn un numro (tiquette) renvoyant une instruction de dfinition de format
(FORMAT).
Exemple
REAL , DIMENSION (5 ,6) :: tab
INTEGER n , i
CHARACTER ( len =10) :: ch
...
PRINT " ( I4 ,A ,( T20 , F8 .3) ) " , n , ch , ( tab (i ,:) , i =1 ,5)
PRINT 100 , n , ch , ( tab (i ,:) , i =1 ,5)
100 FORMAT ( I4 ,A ,( T20 , F8 .3) )

En Fortran louverture dun fichier squentiel est facultative. dfaut, louverture du fichier est faite
implicitement lors de lexcution de la premire instruction dentre-sortie. Le compilateur attribue au fichier un
nom de la forme fort.i (i tant le numro de lunit logique indiqu dans linstruction READ/WRITE).
Louverture est faite en mode formatted ou unformatted suivant quun format a t ou non prcis.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

159 / 266

Entres-Sorties

Mots-cls END=, ERR=

Mots-cls END=, ERR=

Le paramtre END de linstruction READ offre un autre moyen de tester une fin de fichier pour un accs squentiel.
On lui indique le numro (tiquette) de linstruction laquelle on dsire poursuivre le traitement. Ce paramtre
nest pas valide dans le cas dun fichier accs direct.
De mme, le paramtre ERR permet de se dbrancher une instruction dans le cas dune erreur de lecture
(problme de format pour un fichier format, enregistrement inexistant pour un fichier accs direct ...).
Exemple

2
1

INTEGER :: date
DO
PRINT * , " Saisie d une date : "
READ ( * , " ( i4 ) " , END =1 , ERR =2 ) date
PRINT " ( i4 ) " , date
CYCLE
PRINT * , " Saisie invalide . Veuillez recommencer . "
END DO
PRINT * , " Arrt de la saisie . "

Remarque : au clavier, la saisie du caractre Ctrl-D aprs le caractre newline (touche Enter ) indique une fin
de fichier.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

160 / 266

Entres-Sorties

Mots-cls END=, ERR=

Mots-cls END=, ERR=

Lors dune lecture, lorsquune erreur se produit (problme de format sagissant dun fichier texte, dtection dune
fin de fichier ...) un traitement par dfaut est activ par le compilateur, lequel traitement peut fournir des
informations prcieuses quant la nature de lerreur. Lutilisation du paramtre IOSTAT dsactive ce traitement,
ce qui peut tre considr comme un inconvnient. De ce fait, pour tester une fin de fichier il peut tre prfrable
dutiliser le mot-cl END. Celui-ci a lavantage de ne pas masquer le traitement par dfaut concernant les erreurs
ventuelles.
Exemple
PROGRAM lecture
INTEGER date
OPEN ( UNIT =1 , FILE = " data " , ACTION = " read " )
DO
READ ( UNIT =1 , FMT = " ( i4 ) " , END =1 ) date
PRINT * , date
END DO
1 CLOSE ( UNIT =1 )
END PROGRAM lecture

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

161 / 266

Entres-Sorties

Mots-cls END=, ERR=

Mots-cls END=, ERR=

Exemple
Contenu du fichier " data "
1685
1756
17 a1
Sorties produites
1685
1756
" lecture . f90 " , line 11: 1525 -097 A READ statement
using decimal base input found the invalid digit
a in the input file . The program will recover
by assuming a zero in its place .
1701

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

162 / 266

Entres-Sorties

Mots-cls END=, ERR=

Mots-cls END=, ERR=

Exemple
PROGRAM lecture
INTEGER date , ios
OPEN ( UNIT =1 , FILE = " data " , ACTION = " read " )
DO
READ ( UNIT =1 , FMT = " ( i4 ) " , IOSTAT = ios ) date
if ( ios /= 0 ) exit
PRINT * , date
END DO
CLOSE ( UNIT =1 )
if ( ios < 0 ) print * , " Fin de fichier atteinte "
if ( ios > 0 ) print * , " Erreur de lecture dtecte "
END PROGRAM lecture
Sorties produites
1685
1756
Erreur de lecture dtecte

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

163 / 266

Procdures

Introduction

Gnralits

Dclarations

Oprateurs et expressions

Structures de contrle

Tableaux

Entres-Sorties

Procdures
Arguments
Subroutines
Fonctions
Arguments de type chane de caractres
Arguments de type tableau
Arguments de type procdure
Procdures internes
Dure de vie et visibilit des identificateurs
Procdures intrinsques

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

164 / 266

Procdures

Common

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

165 / 266

Procdures

Arguments

Arguments

Trs souvent, dans un programme, on a besoin deffectuer un mme traitement plusieurs fois avec des valeurs
diffrentes. La solution est de dfinir ce traitement une seule fois laide dune unit de programme de type
procdure (SUBROUTINE ou FUNCTION).
Les units de programmes dsirant effectuer ce traitement feront appel cette procdure en lui transmettant des
valeurs via des variables appeles arguments dappel (actual-arguments). La procdure appele rcupre les
valeurs quon lui a transmises via des variables appeles arguments muets (dummy-arguments).
En Fortran le passage de ces valeurs seffectue par rfrence ;
les adresses des arguments dappel sont transmises la procdure appele,
dans la procdure appele, les arguments muets sont des alias des arguments dappel.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

166 / 266

Procdures

Arguments

Schma passage arguments

Figure 1: Schma passage arguments

Procdure
appelante

Procdure
appele

arguments dappel

arguments muets

real t(100)
integer m
real
y

100

real :: tab(100)
18

integer :: i

32.

real

:: x

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Stack
Adresse du tableau tab
Adresse de lentier i
Adresse du rel

Langage Fortran(Base)

26 mai 2015

167 / 266

Procdures

Subroutines

Subroutines

Lappel dune procdure de type SUBROUTINE seffectue laide de linstruction CALL suivie du nom de la
procdure appeler avec la liste des arguments dappels entre parenthses. Au sein de celle-ci linstruction
return permet de forcer le retour la procdure appelante.
Exemple
REAL , DIMENSION (100) :: tab
REAL
:: moyenne , maximum
...
CALL SP ( tab , moyenne , maximum )
PRINT * , moyenne , maximum
END
SUBROUTINE SP ( t , moy , max )
REAL , DIMENSION (100) :: t
REAL
:: moy , max
INTEGER
:: i
max = t (1); moy = t (1)
DO i =2 ,100
IF ( t ( i ) > max ) max = t ( i )
moy = moy + t ( i )
END DO
moy = moy /100
END SUBROUTINE SP

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

168 / 266

Procdures

Fonctions

Fonctions

Un autre moyen de transmettre des valeurs une unit de programme est lutilisation dune procdure de type
FUNCTION.
la diffrence dune SUBROUTINE, une FUNCTION retourne une valeur ; celle-ci est donc type. De plus, son appel
seffectue en indiquant uniquement son nom suivi entre parenthses de la liste des arguments dappels.
Au sein de la fonction linstruction return sert transmettre la procdure appelante la valeur retourner.
Celle-ci nest ncessaire que dans le cas o on dsire effectuer ce retour avant la fin de la dfinition de la fonction.
Dans la procdure appelante lexpression correspondant lappel de la fonction est remplace par la valeur
retourne.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

169 / 266

Procdures

Fonctions

Fonctions

Exemple
REAL , DIMENSION (100) :: tab
REAL
:: moyenne , maximum
REAL
:: maxi
...
maximum = maxi ( tab , moyenne )
PRINT * , moyenne , maximum
...
END
FUNCTION maxi ( t , moy )
REAL , DIMENSION (100) :: t
REAL
:: moy , maxi
INTEGER
:: i
maxi = t (1); moy = t (1)
DO i =2 ,100
IF ( t ( i ) > maxi ) maxi = t ( i )
moy = moy + t ( i )
END DO
moy = moy /100
END FUNCTION maxi

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

170 / 266

Procdures

Arguments de type chane de caractres

Arguments de type chane de caractres

Lorsquune chane de caractres est transmise en argument, Fortran passe galement sa longueur de faon
implicite.
Dans la procdure appele, celle-ci peut tre rcupre laide de la fonction intrinsque LEN.
La dclaration de la chane de caractres au sein de la procdure appele est faite en spcifiant le caractre *
la place de la longueur.
La procdure appele fait alors rfrence une chane de caractres taille implicite (assumed-size string).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

171 / 266

Procdures

Arguments de type chane de caractres

Arguments de type chane de caractres

Dans lexemple ci-dessous les fonctions IACHAR/ACHAR permettent de mettre en relation un caractre et son rang
dans la table des caractres ASCII.
Exemple
program arg_chaine
implicit none
character ( len =10) :: ch
read ( a ) , ch
call conv ( ch )
print * , ch
end program arg_chaine
subroutine conv ( chaine )
implicit none
character ( len =*) :: chaine
integer i , j
do i =1 , len ( chaine )
if ( iachar ( chaine ( i : i ) ) < 97 . or . &
iachar ( chaine ( i : i ) ) > 122 ) cycle
j = iachar ( chaine ( i : i ) ) - 32
chaine ( i : i ) = achar ( j )
end do
end subroutine conv

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

172 / 266

Procdures

Arguments de type tableau

Arguments de type tableau


Lorsque lon transmet un tableau en argument il est commode de transmettre galement ses dimensions afin de pouvoir
dclarer largument muet correspondant au sein de la procdure appele laide de celles-ci ; de ce fait le tableau est
ajustable.
Exemple
program arg_tab
implicit none
integer , parameter
:: n = 3 , m = 2
real , dimension (n , m ) :: tab
real
:: somme
read * , tab ; print * , somme ( tab , n , m )
end program arg_tab
real function somme ( t , n , m )
integer
:: n ,m ,i , j
real , dimension (n , m ) :: t
somme = 0.
do i =1 , n
do j =1 , m
somme = somme + t (i , j )
end do
end do
end function somme

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

173 / 266

Procdures

Arguments de type tableau

Arguments de type tableau

Lorsquun tableau est pass en argument cest ladresse de son premier lment qui est transmise.
La procdure appele doit possder les informations lui permettant dadresser les diffrents lments de ce
tableau.
De faon gnrale, supposons que lon dispose dun tableau tab 2 dimensions constitu de n lignes et m
colonnes. Ladresse de llment tab(i,j) est :
@tab(i,j) = @tab(1,1) + [n(j-1)+(i-1)]taille(lment)
Le nombre de colonnes m nintervient pas dans ce calcul.
Souvent en Fortran, lors de lappel dune procdure seule la premire dimension dun tableau 2 dimensions est
transmise.
Dans la procdure appele celui-ci est dclar en indiquant le caractre * la place de la deuxime
dimension. On fait alors rfrence un tableau taille implicite (assumed-size array ).
Dans un tel cas, il faut faire preuve dune certaine prudence car dans la procdure appele on ne matrise pas
lespace mmoire total occup par le tableau.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

174 / 266

Procdures

Arguments de type tableau

Arguments de type tableau

Exemple
program t a i l l e _implicite
implicit none
integer , parameter
:: n = 5 , m = 6
real , dimension (n , m ) :: tab
real
:: somme , som
read * , tab
somme = som ( tab , n )
print * , somme
end program t a i lle_implicite
real function som ( t , lda )
implicit none
integer
:: lda
real , dimension ( lda ,*) :: t
integer
:: i , j
som = 0.
do i =1 , lda
do j =1 , lda
som = som + t (i , j )
end do
end do
end function som

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

175 / 266

Procdures

Arguments de type procdure

Arguments de type procdure

Une procdure peut tre transmise une autre procdure. Il est ncessaire de la dclarer dans la procdure
appelante avec lattribut EXTERNAL ou INTRINSIC si elle est intrinsque.
Exemple
program arg_proc
implicit none
double precision b_inf , b_sup , aire
double precision integrale
integer pas
double precision , external :: carre
b_inf = 1.
b_sup = 6.
pas = 200000
aire = integrale ( b_inf , b_sup , pas , carre )
print " ( Aire : , f11 .6) " , aire
end program arg_proc

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

176 / 266

Procdures

Arguments de type procdure

Arguments de type procdure

Exemple
function integrale ( borne_i , borne_s , pas , f )
implicit none
double precision borne_i , borne_s
double precision integrale
integer
pas , i
double precision h , f
h = ( borne_s - borne_i )/ pas
integrale = 0.
do i =0 , pas -1
integrale = integrale + h * f ( borne_i + i * h )
end do
end function integrale
function carre ( x )
implicit none
double precision x
double precision carre
carre = x * x
end function carre

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

177 / 266

Procdures

Procdures internes

Procdures internes

En Fortran une procdure peut en contenir dautres. Ces procdures sont appeles procdures internes. Elles
ne peuvent tre appeles que depuis la procdure les contenant.
Les dfinitions des procdures internes sont faites dans la procdure les incluant aprs linstruction CONTAINS.
Il ny a pas dimbrications possibles : une procdure interne ne peut pas elle-mme en contenir.
Exemple
program proc_interne
implicit none
character ( len =10) :: ch
read " ( a ) " , ch
call conversion ( ch )
print * , ch
end program proc_interne

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

178 / 266

Procdures

Procdures internes

Procdures internes

Exemple
subroutine conversion ( chaine )
implicit none
character ( len =*) :: chaine
integer i
do i =1 ,len( chaine )
if ( ichar ( chaine ( i : i ) ) < 97 . or .
ichar ( chaine ( i : i ) ) > 122 ) cycle
chaine ( i : i ) = car_majuscule ( chaine ( i : i ) )
end do
CONTAINS
function car_majuscule ( c )
character ( len =1) :: c , car_majuscule
integer
:: i
i = ichar ( c ) - ( ichar ( " a " ) - ichar ( " A " ))
car_majuscule = achar ( i )
end function car_majuscule
end subroutine conversion

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

179 / 266

Procdures

Procdures internes

Procdures internes

Dans une procdure interne, toute variable dclare dans lunit de programme qui la contient est accessible,
moins quelle nait fait lobjet dune redclaration.
Exemple
program visibilite
implicit none
integer i , j
i = 10; j = 20
call sub
print " ( i = , i3 , , j = , i3 ) " , i , j
contains
subroutine sub
integer j
! masque le " j " de l appelant
j = 100; i = i + 1
end subroutine sub
end program visibilite

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Sortie
i^=^11,^j^=^20

Langage Fortran(Base)

26 mai 2015

180 / 266

Procdures

Dure de vie et visibilit des identificateurs

Dure de vie et visibilit des identificateurs

On appelle dure de vie dun identificateur le temps pendant lequel il existe en mmoire. Il est visible sil existe
en mmoire et est accessible, car il peut exister mais tre masqu par un autre de mme nom (c.f. procdure
interne).
Par dfaut, une variable a une dure de vie limite celle de lunit de programme dans laquelle elle a t

dfinie ;
lattribut SAVE permet de prolonger la dure de vie celle de lexcutable : on parle alors de variable

permanente ou statique ;
dans une unit de programme linstruction SAVE sans spcification de liste de variables indique que toutes

les variables de cette unit sont permanentes ;


toute variable dclare au sein de lunit de programme principale reoit lattribut SAVE implicitement

(norme 2008) ;
une compilation effectue en mode static force la prsence de linstruction SAVE dans toutes les units de

programme, ce qui implique que toutes les variables sont permanentes ;


par contre si elle est faite en mode stack, les variables permanentes sont :
celles pour lesquelles lattribut SAVE a t prcis ;
celles initialises la dclaration (via linstruction DATA ou laide du signe = ).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

181 / 266

Procdures

Dure de vie et visibilit des identificateurs

Dure de vie et visibilit des identificateurs

Exemple
program newton
double precision :: valeur = 50. d0
double precision :: tolerance
double precision :: racine , x
tolerance = 1.0 d -1
x = racine ( valeur , tolerance )
print " ( Racine de , f5 .1 , = , d16 .8) " , valeur , x
tolerance = 1.0 d -6
x = racine ( valeur , tolerance )
print " ( Racine de , f5 .1 , = , d16 .8) " , valeur , x
end program newton
function racine ( valeur , tol )
double precision :: valeur , tol
double precision :: racine
double precision :: x = 1.0 d0 , x_prev
integer
:: nb_iterations
nb_iterations = 0
do
nb_iterations = nb_iterations + 1
x_prev = x
x = 0.5 * ( x_prev + valeur / x_prev )
if ( abs (x - x_prev )/ x < tol ) exit
end do
print * , " Nombre d itrations = " , nb_iterations
racine = x
end function racine

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

182 / 266

Procdures

Procdures intrinsques

Procdures intrinsques

Le compilateur Fortran dispose dune bibliothque de procdures couvrant diffrents domaines : mathmatique,
conversion de type, manipulation de chanes de caractres, comparaison de chanes de caractres, . . .
Pour une procdure donne, le nom dappel diffre suivant le type des arguments transmis. Un nom gnrique
permet de saffranchir de ces types : cest la solution fortement conseille car elle facilite la portabilit.
Par exemple un appel la procdure gnrique ABS, retournant la valeur absolue de son argument, est transform
par le compilateur en un appel la procdure :
IABS pour un argument entier,
ABS pour un argument rel simple prcision,
DABS pour un argument rel double prcision,
CABS pour un argument complexe.

Une liste des procdures intrinsques est fournie en annexe B.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

183 / 266

Common

Introduction

Gnralits

Dclarations

Oprateurs et expressions

Structures de contrle

Tableaux

Entres-Sorties

Procdures

Common
Linstruction COMMON
Common blanc
Common tiquet
Initialisation : BLOCK DATA
Instruction SAVE et COMMON

Rgles et restrictions

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

184 / 266

Common

10

Include

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

185 / 266

Common

Linstruction COMMON

Linstruction COMMON

Linstruction COMMON permet le regroupement de zones mmoires pouvant tre partages par diffrentes units de
programme (fonctions, procdures).
La syntaxe dune instruction COMMON est la suivante :
COMMON [/[nom_common]/] liste_variables
Le COMMON est dit tiquet si nom_common est prcis. Sil na pas de nom on lappelle COMMON blanc.
Les diffrentes zones regroupes au sein du bloc COMMON sont adresses via des variables dont les noms sont
indiqus dans la partie liste_variables de linstruction COMMON. Pour quune unit de programme ait accs
ces zones, il est ncessaire quelle contienne linstruction COMMON les rfrenant.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

186 / 266

Common

Common blanc

Common blanc

Lors de la dclaration dun COMMON blanc nom_common est omis et les deux slashes "/" sont alors optionnels.
Ses particularits sont :
un COMMON blanc est permanent (il hrite de lattribut SAVE),
les variables apparaissant dans un COMMON blanc ne peuvent pas tre initialises lors de leur dclaration. Ce

type de bloc est initialement constitu de bits 0. En consquence :


les donnes numriques sont initialises 0,
les donnes logiques sont initialises la valeur .FALSE.,
les donnes de type chane de caractres reprsentent des chanes vides.

un COMMON blanc peut ne pas avoir la mme taille dune unit de programme une autre, cest alors la taille

maximum qui sera retenue pour lensemble du programme.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

187 / 266

Common

Common blanc

Common blanc

Exemple
PROGRAM common_blanc
INTEGER
:: i
INTEGER , DIMENSION (6) :: itab
LOGICAL , DIMENSION (3) :: ltab
COMMON
itab , ltab
DO i =1 ,6
itab ( i ) = i
END DO
ltab (1) = . true .
ltab (2) = . false .
ltab (3) = . true .
CALL sub
END PROGRAM common_blanc
! *************************************
SUBROUTINE sub
INTEGER , DIMENSION (6) :: itab
LOGICAL , DIMENSION (3) :: ltab
COMMON
itab , ltab
PRINT * , " Tableau entier = " , itab
PRINT * , " Tableau logique = " , ltab
END SUBROUTINE sub

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

188 / 266

Common

Common tiquet

Common tiquet

Un COMMON est dit tiquet lorsque nom_common est prcis entre caractres /.
Ses particularits sont :
il peut tre initialis par lintermdiaire dune unit de programme de type BLOCK DATA,
un bloc COMMON dfini dans le programme principal reoit implicitement lattribut SAVE. Sil ne lest pas,

lattribut SAVE est ncessaire si on dsire le rendre permanent.


Exemple
INTEGER , DIMENSION (6) :: itab
REAL ,
DIMENSION (12) :: rtab
COMMON / TAB / itab , rtab

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

189 / 266

Common

Common tiquet

Initialisation : BLOCK DATA

BLOCK DATA est une unit de programme qui permet dinitialiser des objets dclars dans des COMMONs tiquets :
BLOCK DATA [nom_block_data]
bloc_init
END BLOCK DATA [nom_block_data]
nom_block_data est le nom du BLOCK DATA
bloc_init est une suite :
de dclarations de type (INTEGER, REAL, ...),
de dclarations de zones communes (COMMON),
dinitialisations statiques (DATA).

Un bloc COMMON ne peut apparatre que dans un seul BLOCK DATA.


On peut se dfinir plusieurs units BLOCK DATA, chacune regroupant les COMMON qui ont un lien logique entre eux.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

190 / 266

Common

Common tiquet

Initialisation : BLOCK DATA

Exemple
BLOCK DATA INIT
REAL
:: A , B , C , D
REAL , DIMENSION (10 ,15) :: MATRICE
INTEGER , DIMENSION (20) :: VECTEUR
COMMON / BLOC1 / MATRICE , A , B
COMMON / BLOC2 / VECTEUR , C , D
DATA A / -1./ , B /3.14/ , C /0./ , D /7.1/
DATA MATRICE /150 * 50.0/ , VECTEUR /20 * 4/
END BLOCK DATA INIT

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

191 / 266

Common

Common tiquet

Instruction SAVE et COMMON

Les valeurs des variables dun COMMON tiquet deviennent indfinies quand une procdure se termine (retour
lunit appelante) sauf sil existe une autre unit de programme active le rfrenant.
Le cas chant, on lui appliquera linstruction SAVE pour conserver son contenu :
SAVE /nom_common/
Un COMMON qui reoit lattribut SAVE dans une fonction ou procdure devra toujours tre dclar avec ce

mme attribut dans toutes les autres units de programme,


Il est inutile de spcifier lattribut SAVE si le COMMON a t dclar dans le programme principal.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

192 / 266

Common

Common tiquet

Instruction SAVE et COMMON

Exemple
PROGRAM common_save
call first
call second
END PROGRAM common_save
! *************************************
SUBROUTINE first
REAL , DIMENSION (6)
:: rtab
LOGICAL
:: drapeau
COMMON / BLOC / rtab , drapeau
SAVE / BLOC /
CALL random_number ( rtab )
PRINT * , " Afficher le tableau ( true / false ) "
READ (* ,*) drapeau
END SUBROUTINE first
! *************************************
SUBROUTINE second
REAL , DIMENSION (6)
:: rtab
LOGICAL
:: drapeau
COMMON / BLOC /
rtab , drapeau
SAVE
/ BLOC /
IF ( drapeau ) PRINT * , " Tableau de rels
END SUBROUTINE second

= " , rtab

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

193 / 266

Common

Rgles et restrictions

Rgles et restrictions

Un COMMON ne peut pas contenir :


les noms de procdures (sous-programmes, fonctions),
les arguments de procdures,
les constantes symboliques (ayant lattribut PARAMETER).
une mme variable ne peut pas apparatre dans deux COMMONs de noms diffrents,
la taille dun bloc COMMON tiquet doit tre la mme dans chaque unit de programme le rfrenant,
Fortran 90 permet dsormais le mlange de donnes numriques et caractres au sein dun bloc COMMON,
dune unit de programme une autre, les variables de la liste peuvent porter des noms diffrents,
au sein dune mme unit de programme, un bloc COMMON (tiquet ou non) peut tre rfrenc plusieurs

fois : les diffrentes listes de variables sont alors ajoutes les unes aux autres.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

194 / 266

Common

Rgles et restrictions

Rgles et restrictions

un bloc COMMON peut tre dcoup diffremment dune unit de programme une autre, cest--dire

rfrenc laide de variables de types diffrents condition que ce dcoupage soit cohrent (les zones
numriques doivent correspondre des zones numriques et de mme pour les zones caractres),
une instruction EQUIVALENCE ne peut pas :
associer des variables dclares dans des blocs COMMON diffrents,
avoir pour effet de prolonger le COMMON sa gauche. Dans lexemple suivant, on ne peut pas associer la variable

scalaire A au scalaire B(2) :


Exemple
REAL
:: A
REAL , DIMENSION (2) :: B
COMMON / X / A
EQUIVALENCE (A , B (2))
EQUIVALENCE (A , B (1))

! INVALIDE
! VALIDE

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

195 / 266

Common

Rgles et restrictions

Rgles et restrictions

Exemple
program common_mixte
complex , dimension (10) :: c
character ( len =100)
:: chaine
COMMON / MIXTE /c , chaine
. . .
call sub
end program common_mixte
subroutine sub
real , dimension (20)
:: tab_reels
character ( len =1) , dimension (100) :: tab_car
COMMON / MIXTE / tab_reels , tab_car
. . .
! impression des parties relles
print * , tab_reels (1:20:2)
print * , tab_car (1) , tab_car (10)
end subroutine sub

Recommandations :
1

il est prfrable de dclarer un bloc COMMON de la mme faon dans les diffrentes units de programme et
donc demployer la technique de lexemple prcdent avec modration,

linstruction INCLUDE ci-aprs favorise le bon emploi des blocs COMMON.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

196 / 266

Include

Introduction

Gnralits

Dclarations

Oprateurs et expressions

Structures de contrle

Tableaux

Entres-Sorties

Procdures

Common

10

Include
La directive INCLUDE

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

197 / 266

Include

La directive INCLUDE

La directive INCLUDE

Elle demande au compilateur dinclure un fichier contenant des instructions Fortran :


INCLUDE nom_de_fichier
Exemple
PROGRAM inclusion
IMPLICIT NONE
INTEGER :: i
INCLUDE " inclusion . inc "
DO i =1 ,6
rtab ( i ) = PI
END DO
ltab (1) = . true .
ltab (2) = . false .
ltab (3) = . true .
CALL sub
END PROGRAM inclusion

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

198 / 266

Include

La directive INCLUDE

La directive INCLUDE
Exemple
SUBROUTINE sub
IMPLICIT NONE
INCLUDE " inclusion . inc "
PRINT * , " Tableau rels
= " , rtab
PRINT * , " Tableau logique = " , ltab
END SUBROUTINE sub

Le fichier inclusion.inc contient les dclarations de COMMONs et de paramtres :


Exemple (suite)
DOUBLE PRECISION , PARAMETER
:: PI =3.14159265 d0
DOUBLE PRECISION , DIMENSION (6) :: rtab
LOGICAL , DIMENSION (3)
:: ltab
COMMON rtab , ltab

Remarques :
Linclusion du contenu du fichier se fait l o est place la directive INCLUDE,
Il est possible dimbriquer plusieurs directives INCLUDE. Le nombre dimbrications possible dpend du compilateur.
La localisation du fichier inclure peut tre prcise laide de loption -I du systme
de compilation.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

199 / 266

Annexe A : entres-sorties - syntaxes

11

Annexe A : entres-sorties - syntaxes

12

Annexe B : procdures intrinsques

13

Annexe C : aspects obsoltes

14

Annexe D : systme de compilation

15

Annexe E : exercices

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

200 / 266

Annexe A : entres-sorties - syntaxes

Instruction OPEN

Note : les valeurs par dfaut sont soulignes.

OPEN ( [ UNIT =] u ,
IOSTAT = ios ,
FILE = filename ,
STATUS = st ,
ACCESS = acc ,
FORM = mode ,
RECL = reclen
POSITION = pos ,
ACTION = act ,
BLANK = blk ,
DELIM = del ,
PAD = padding )

&
&
&
&
&
&
&
&
&
&
&

!
!
!
!
!
!
!
!
!
!
!
!

entier
entier
chane
chane
chane
chane
entier
chane
chane
chane
chane
chane

de
de
de
de

caractres
caractres
caractres
caractres

de
de
de
de
de

caractres
caractres
caractres
caractres
caractres

UNIT : numro de lunit logique sur laquelle on dsire connecter le fichier,


IOSTAT : entier valoris une fois louverture effectue. Il est nul si lopration sest bien passe, non nul sinon,
FILE : nom du fichier ouvrir,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

201 / 266

Annexe A : entres-sorties - syntaxes

Instruction OPEN

STATUS : tat du fichier avant louverture,


OLD : le fichier doit exister,
NEW : le fichier ne doit pas exister, il sera cr,
UNKNOWN : tat dpendant du compilateur,
REPLACE : si le fichier nexiste pas, il est cr et hrite de ltat "OLD", sinon, il est dtruit et un nouveau
fichier est cr,
SCRATCH : un fichier temporaire anonyme est cr, il sera dtruit la fin du programme ou au moment du
CLOSE.
ACCESS : mode daccs au fichier,
DIRECT : accs direct,
SEQUENTIAL : accs squentiel.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

202 / 266

Annexe A : entres-sorties - syntaxes

Instruction OPEN

FORM : type du transfert,


FORMATTED : mode caractre (avec format),
UNFORMATTED : mode binaire (sans format).
RECL : longueur des enregistrements logiques en accs direct ou de lenregistrement maximum en accs

squentiel. Lunit de longueur est le caractre pour les fichiers textes et dpend du processeur pour les
fichiers binaires,
POSITION : positionnement dans le fichier aprs ouverture,
ASIS : positionnement inchang si le fichier est dj connect, indfini sinon,
REWIND : positionnement en tte de fichier,
APPEND : positionnement en fin de fichier pour extension,

ACTION : mode douverture.


READ : seule la lecture est possible,
WRITE : seule lcriture est possible,
READWRITE : la lecture ainsi que lcriture sont permises,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

203 / 266

Annexe A : entres-sorties - syntaxes

Instruction OPEN

BLANK : indique la faon dont les blancs sont interprts lors dune opration dentre-sortie,
NULL : ils sont ignors,
ZERO : ils sont interprts comme des zros,
DELIM : indique le caractre dlimiteur utilis pour les constantes chanes de caractres crites en format

libre ou via une NAMELIST,


APOSTROPHE : dlimiteur ",
QUOTE : dlimiteur ,
NONE : aucun dlimiteur,

PAD : permet de grer le padding lors dune lecture,


YES : la liste de variables spcifie dans linstruction de lecture peut tre plus grande que lenregistrement
logique, les variables non valorises lors de la lecture sont remplies par des zros pour les variables numriques ou
logiques, par des blancs pour les variables de type chane de caractres,
NO : aucun padding nest autoris. La taille de lenregistrement logique doit tre suffisante pour permettre la
valorisation des variables de la liste.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

204 / 266

Annexe A : entres-sorties - syntaxes

Instruction READ

READ ( [ UNIT =] u ,
[ FMT =] label | ch ,
[ NML =] nom ,
ADVANCE = ad ,
END = label ,
EOR = label ,
ERR = label ,
IOSTAT = st ,
REC =n ,
SIZE = n )

&
&
&
&
&
&
&
&
&

!
!
!
!
!
!
!
!
!
!

entier
label ou bien chane de caractres
chane de caractres
chane de caractres
label
label
label
entier
entier
entier

UNIT : numro de lunit logique sur laquelle le fichier est connect,


FMT : format de conversion pour les fichiers textes spcifi sous forme :
dune constante chane de caractres,
dune variable chane de caractres,
dune tiquette dinstruction FORMAT.
NML : nom dune namelist,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

205 / 266

Annexe A : entres-sorties - syntaxes

Instruction READ

ADVANCE : positionnement partir duquel seffectue lentre-sortie suivante :


YES enregistrement suivant,
NO suite de lenregistrement courant,
END : tiquette de linstruction excuter en cas de fin de fichier,
EOR : tiquette de linstruction excuter en cas de fin denregistrement,
ERR : tiquette de linstruction excuter en cas derreur,
IOSTAT : entier valoris une fois lentre-sortie effectue. Il est nul si lopration sest bien passe. Une

valeur positive indique une erreur. Une valeur ngative signale une fin de fichier dans le cas dun accs
squentiel et labsence denregistrement du rang spcifi si laccs est direct,
REC : numro de lenregistrement traiter pour un fichier accs direct,
SIZE : entier rcuprant le nombre de caractres traits si la fin denregistrement a t atteinte.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

206 / 266

Annexe A : entres-sorties - syntaxes

Instruction WRITE

WRITE ( [ UNIT =] u ,
[ FMT =] label | ch ,
[ NML =] nom ,
ADVANCE = ad ,
ERR = label ,
IOSTAT = st ,
REC = n )

&
&
&
&
&
&

!
!
!
!
!
!
!

entier
label ou bien chane de caractres
chane de caractres
chane de caractres
label
entier
entier

UNIT : numro de lunit logique sur laquelle le fichier est connect,


FMT : format de conversion pour les fichiers textes spcifi sous forme :
dune constante chane de caractres,
dune variable chane de caractres,
dune tiquette dinstruction FORMAT.
NML : nom dune namelist,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

207 / 266

Annexe A : entres-sorties - syntaxes

Instruction WRITE

ADVANCE : positionnement partir duquel seffectue lentre-sortie suivante :


YES enregistrement suivant,
NO suite de lenregistrement courant,

ERR : tiquette de linstruction excuter en cas derreur,


IOSTAT : entier valoris une fois lentre-sortie effectue. Il est nul si lopration sest bien passe, non nul sinon,
REC : numro de lenregistrement traiter pour un fichier accs direct.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

208 / 266

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

INQUIRE ( [ UNIT =] u ,
ACCESS = acc ,
ACTION = act ,
BLANK = bl ,
DELIM = del ,
DIRECT = dir ,
ERR = label ,
EXIST = ex ,
FILE = file ,
FORM = form ,
FORMATTED = form ,
IOSTAT = ios ,
NAME = name ,
NAMED = named ,
NEXTREC = next ,
NUMBER = num ,
OPENED = op ,
PAD = pad ,
POSITION = pos ,
READ =r ,
READWRITE = rw ,
RECL =n ,
SEQUENTIAL = seq ,
UNFORMATTED = un ,
WRITE = wr )

&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&

!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!

entier
chane de
chane de
chane de
chane de
chane de
label
logique
chane de
chane de
chane de
entier
chane de
logique
entier
entier
logique
chane de
entier
chane de
chane de
entier
chane de
chane de
chane de

caractres
caractres
caractres
caractres
caractres

caractres
caractres
caractres
caractres

caractres
caractres
caractres
caractres
caractres
caractres

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

209 / 266

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

UNIT : numro de lunit logique sur laquelle le fichier est connect,


ACCESS : mthode daccs
SEQUENTIAL si fichier connect pour un accs squentiel,
DIRECT si fichier connect pour un accs direct,
UNDEFINED si fichier non connect,

ACTION : type daccs

READ si fichier connect en lecture,


WRITE si fichier connect en criture,
READWRITE si fichier connect en lecture/criture,
UNDEFINED si fichier non connect,

BLANK :
NULL si les blancs sont ignors,
ZERO si les blancs sont interprts comme des 0,
UNDEFINED si le fichier nest pas connect en mode format ou bien nest pas connect du tout,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

210 / 266

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

DELIM : dlimiteur pour les chanes de caractres en sortie en format libre ou via namelist
APOSTROPHE dlimiteur ",
QUOTE dlimiteur ,
UNDEFINED si le fichier nest pas connect en mode format ou bien nest pas connect du tout,

DIRECT : accs direct


YES laccs direct est un mode daccs permis,
NO laccs direct nest pas un mode daccs permis,
UNKNOWN le compilateur ne sait pas si laccs direct est permis ou non,

ERR : tiquette de linstruction excuter en cas derreur,


EXIST :
.true. si le fichier ou lunit logique existe,
.false. si le fichier ou lunit logique nexiste pas,

FILE : nom du fichier pour lequel on souhaite avoir des informations,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

211 / 266

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

FORM : type daccs


FORMATTED si le fichier est connect en mode format,
UNFORMATTED si le fichier est connect en mode binaire,
UNDEFINED si le fichier nest pas connect,

FORMATTED :
YES si le traitement du fichier en mode format est valide
NO si le traitement du fichier en mode format nest pas valide,
UNKNOWN lorsque le compilateur ne sait pas si le traitement du fichier en mode format est permis ou non,

IOSTAT : valeur de retour


>0 si une erreur sest produite,
=0 si aucune erreur ne sest produite,

NAME : nom du fichier connect sil a un nom, sinon valeur indfinie,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

212 / 266

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

NAMED :
.true. si le fichier a un nom,
.false. si le fichier est anonyme,

NEXTREC :
renvoie le numro du prochain enregistrement traiter si le fichier est ouvert en accs direct (1 si aucun

enregistrement na dj t trait,
renvoie une valeur indfinie si le fichier na pas t ouvert en accs direct,

NUMBER : renvoie le numro de lunit logique sur laquelle le fichier est connect (-1 sil ne lest pas),
OPENED :
.true. si le fichier est ouvert,
.false. si le fichier nest pas ouvert,

PAD :
NO le fichier a t ouvert avec le paramtre PAD="NO",
YES le fichier a t ouvert avec le paramtre PAD="YES" ou bien le fichier nest pas connect,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

213 / 266

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

POSITION :

REWIND si fichier ouvert avec un positionnement en tte,


APPEND si fichier ouvert avec un positionnement en fin,
ASIS si fichier ouvert sans changement de la position,
UNDEFINED si fichier non connect ou bien connect en accs direct,

READ :
YES un accs en lecture est permis,
NO un accs en lecture nest pas permis,
UNKNOWN le compilateur ne sait pas si un accs en lecture est permis ou non,

READWRITE :
YES un accs en lecture/criture est permis,
NO un accs en lecture/criture nest pas permis,
UNKNOWN le compilateur ne sait pas si un accs en lecture/criture est permis ou non,

RECL : renvoie la taille de lenregistrement logique maximum ou une valeur indfinie si le fichier nexiste pas,

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

214 / 266

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

SEQUENTIAL :
YES laccs squentiel est un mode daccs permis,
NO laccs squentiel nest pas un mode daccs permis,
UNKNOWN le compilateur ne sait pas si laccs squentiel est permis ou non,

UNFORMATTED :
YES si le traitement du fichier en mode binaire est valide
NO si le traitement du fichier en mode binaire nest pas valide,
UNKNOWN lorsque le compilateur ne sait pas si le traitement du fichier en mode binaire est permis ou non,

WRITE :
YES un accs en criture est permis,
NO un accs en criture nest pas permis,
UNKNOWN le compilateur ne sait pas si un accs en criture est permis ou non.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

215 / 266

Annexe A : entres-sorties - syntaxes

Instruction CLOSE

CLOSE ( [ UNIT =] u ,
IOSTAT = ios ,
STATUS = st )

&
&

UNIT : numro de lunit logique du fichier fermer,


IOSTAT : entier valoris une fois la fermeture effectue. Il est nul si lopration sest bien passe, non nul

sinon,
STATUS : tat du fichier aprs fermeture,
DELETE : le fichier est dtruit aprs fermeture. Cest la valeur par dfaut si louverture a t faite avec le
paramtre STATUS="scratch",
KEEP : le fichier est conserv aprs fermeture. Cest la valeur par dfaut si louverture a t faite avec le
paramtre STATUS diffrent de "scratch".

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

216 / 266

Annexe A : entres-sorties - syntaxes

Exemple
integer ios
...
OPEN ( UNIT =1 ,
&
FILE = " donnees " ,
&
FORM = " unformatted " , &
ACTION = " read " ,
&
POSITION = " rewind " , &
IOSTAT = ios )
if ( ios /= 0 ) ! Problme l ouverture
...
CLOSE ( UNIT =1 )
OPEN ( UNIT =2 ,
&
FORM = " formatted " , &
ACCESS = " direct " ,
&
STATUS = " scratch " , &
ACTION = " write " ,
&
LRECL =9600 ,
&
IOSTAT = ios )
if ( ios /= 0 ) ! Problme l ouverture
...
CLOSE ( UNIT =2 )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

217 / 266

Annexe B : procdures intrinsques

11

Annexe A : entres-sorties - syntaxes

12

Annexe B : procdures intrinsques

13

Annexe C : aspects obsoltes

14

Annexe D : systme de compilation

15

Annexe E : exercices

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

218 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

ABS : retourne la valeur absolue de son argument. Pour un complexe, retourne sa norme :

x 2 + y 2.

ABS(-1) = 1; ABS(-1.5) = 1.5; ABS((3.,4.)) = 5.0

ACHAR : retourne le caractre de la table ASCII dont le rang est transmis en argument.
ACHAR(88) = X; ACHAR(42) = *

ACOS : retourne larc cosinus en radians de son argument rel.


ACOS(0.54030231) = 1.0

ADJUSTL : cadre gauche la chane passe en argument : supprime les blancs en tte ; complte droite par

des blancs.
ADJUSTL(^^Fortran) = Fortran^^

ADJUSTR : cadre droite la chane passe en argument : supprime les blancs en fin ; complte gauche par

des blancs.
ADJUSTR(Fortran^^) = ^^Fortran

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

219 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

AIMAG : retourne la partie imaginaire du complexe pass en argument.


AIMAG((2.,3.)) == 3.0

AINT : tronque le rel pass en argument.


AINT(2.783) = 2.0; AINT(-2.783) = -2.0

ANINT : retourne, sous forme dun rel, lentier le plus proche du rel transmis.
ANINT(2.783) = 3.0; ANINT(-2.783) = -3.0

ASIN : retourne larc sinus en radians de son argument rel.


ASIN(0.84147098) = 1.0

ATAN : retourne larc tangente en radians de son argument rel.


ATAN(1.5574077) = 1.0

BIT_SIZE : retourne le nombre de bits utiliss pour la reprsentation de lentier pass en argument.
BIT_SIZE(1) = 32

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

220 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

BTEST : permet de tester la valeur dun bit dun entier : lentier ainsi que la position du bit tester sont

passs en argument.
BTEST(8,3) = .true.; BTEST(10,2) = .false.

CEILING : retourne lentier immdiatement suprieur au rel transmis en argument.


CEILING(3.7) = 4, CEILING(-3.7) = -3

CMPLX : retourne un complexe dont les parties relle et imaginaire sont transmises en argument.
CMPLX(-3.) = -3.0+0.i; CMPLX(2,4.) = 2.0+4.0i

CONJG : retourne le complexe conjugu de celui pass en argument.


CONJG((-3.0,4.0)) = -3.0-4.0i

COS : retourne le cosinus de langle pass en argument (exprim en radians).


COS(1.0) = 0.54030231

COSH : retourne le cosinus hyperbolique.


COSH(1.0) = 1.5430806

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

221 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

DBLE : convertit en double prcision largument transmis.


EXP : retourne lexponentiel de largument transmis.
EXP(1.0) = 2.7182818

FLOOR : retourne lentier immdiatement infrieur au rel transmis en argument.


FLOOR(3.7) = 3, FLOOR(-3.7) = -4

IACHAR : retourne le rang dans la table ASCII du caractre transmis en argument.


IACHAR(X) = 88; IACHAR(*) = 42

IAND : retourne lentier dont la reprsentation binaire est obtenue en combinant laide dun "et logique"

les bits des deux entiers transmis en argument.


IAND(1,3) = 1; IAND(10,10) = 10

IBCLR : permet de forcer zro un bit dun entier : lentier ainsi que la position du bit forcer sont passs

en argument.
IBCLR(14,1) = 12
IBCLR((/ 1,2,3,4 /), 31) = (/ 29,27,23,15 /)

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

222 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

IBITS : permet lextraction dune squence de bits dun entier. Lentier suivi de la position ainsi que la

longueur pour effectuer lextraction sont passs en argument.


IBITS(14,1,3) = 7

IBSET : permet de forcer 1 un bit dun entier : lentier ainsi que la position du bit forcer sont passs en

argument.
IBSET(12,1) = 14
IBSET((/ 1,2,3,4 /), 0) = (/ 1,3,3,5 /)

IEOR : retourne lentier dont la reprsentation binaire est obtenue en combinant laide dun "ou exclusif"

les bits des deux entiers transmis en argument.


IEOR(1,3) = 2; IEOR(10,10) = 0

INDEX : retourne la position dune sous-chane dans une chane. La chane suivie de la sous-chane et du

sens de la recherche sont fournis en argument.


INDEX(FORTRAN,R) = 3
INDEX(FORTRAN,R,BACK=.true.) = 5

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

223 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

INT : convertit en entier largument transmis.


INT(-3.7) = -3; INT(9.1/4.0) = 2

IOR : retourne lentier dont la reprsentation binaire est obtenue en combinant laide dun "ou logique" les

bits des deux entiers transmis en argument.


IOR(1,3) = 3
IOR((/ 3,2 /),(/ 1,10 /)) = (/ 3,10 /)

ISHFT : permet deffectuer un dcalage des bits de lentier pass en premier argument. Le deuxime

argument indique le nombre de bits dcaler : son signe indique le sens du dcalage (positif = gauche,
ngatif = droite). Les bits sortants sont perdus, les positions vacantes sont mises zro.
ISHFT(3,1) = 6; ISHFT(3,-1) = 1

ISHFTC : idem ISHFT la diffrence que le dcalage est circulaire et seffectue sur les n bits de droite de

lentier , n tant fourni en troisime argument (sil est absent il est considr gal au nombre de bits de
lentier).
ISHFT(3,2,3) = 5; ISHFT(3,-2) = -1073741824

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

224 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

LEN : retourne la longueur de la chane de caractres transmise en argument.


CHARACTER(len=10) CH; LEN(CH) = 10

LEN_TRIM : retourne la longueur de la chane de caractres transmise en argument sans considrer les blancs

de fin.
LEN_TRIM(^^FORTRAN^^^) = 9; LEN_TRIM(^^^) = 0

LGE : compare les deux chanes de caractres transmises en argument : retourne .true. si la premire

chane est suprieure ou gale la deuxime, .false. sinon.


LGE(MANET,MONET) = .false.
LGE(MANET Edouard,MANET) = .true.

LGT : compare les deux chanes de caractres transmises en argument : retourne .true. si la premire

chane est suprieure strictement la deuxime, .false. sinon.


LGT(MANET,MANET) = .false.

LLE : compare les deux chanes de caractres transmises en argument : retourne .true. si la premire

chane est infrieure ou gale la deuxime, .false. sinon.


LLE(MANET,MONET) = .true.
LLE(MANET,MANET) = .true.

LLT : compare les deux chanes de caractres transmises en argument : retourne .true. si la premire

chane est infrieure strictement la deuxime, .false. sinon.


LLT(MANET,MANET) = .false.
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

225 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques


LOG : retourne le logarithme nprien de largument transmis.
LOG(2.7182818) = 1.0; LOG(10.0) = 2.3025851

LOG10 : retourne le logarithme dcimal de largument transmis.


LOG10(10.0) = 1.0; LOG10(10.E10) = 11.0

MAX : retourne le maximum des nombres passs en argument.


MAX(-9.0,7.0,2.0) = 7.0

MIN : retourne le minimum des nombres passs en argument.


MIN(-9.0,7.0,2.0) = -9.0

MOD : retourne le reste de la division effectue laide des deux arguments fournis.
MOD(3.0,2.0) = 1.0; MOD(-8,5) = -3

NOT : retourne lentier dont la reprsentation binaire est obtenue en inversant les bits de lentier transmis en

argument.
NOT(10) = -11

REAL : convertit en rel largument transmis.


REAL(3) = 3.0

REPEAT : permet de concatner n fois une chane de caractres.


REPEAT(A,10) = AAAAAAAAAA

SCAN : retourne la position du premier caractre dune chane figurant parmi un ensemble de caractres

donn. La recherche peut tre faite dans les deux sens.


SCAN(RENOIR,OI) = 4
SCAN(RENOIR,OI,BACK=.true.) = 5
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

226 / 266

Annexe B : procdures intrinsques

Principales procdures intrinsques

SIGN : retourne le nombre dont la valeur absolue est celle du premier argument et le signe celui du deuxime.
SIGN(-3.0,2.0) = 3.0

SIN : retourne le sinus de langle pass en argument (exprim en radians).


SIN(1.0) = 0.84147098

SINH : retourne le sinus hyperbolique.


SINH(1.0) = 1.1752012

SQRT : retourne la racine carr de son argument.


SQRT(5.0) = 2.236068010

TAN : retourne la tangente de langle pass en argument (exprim en radians).


TAN(1.0) = 1.5574077

TANH : retourne la tangente hyperbolique.


TANH(1.0) = 0.76159416

TRIM : retourne la chane de caractres transmise dbarrasse de ses blancs de fin.


TRIM(PICASSO^^^^^) = PICASSO

VERIFY : retourne la position du premier caractre dune chane ne figurant pas parmi un ensemble de

caractres donn. La recherche peut tre faite dans les deux sens.
VERIFY(RENOIR,OI) = 1
VERIFY(RENOIR,OI,BACK=.true.) = 6

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

227 / 266

Annexe C : aspects obsoltes

11

Annexe A : entres-sorties - syntaxes

12

Annexe B : procdures intrinsques

13

Annexe C : aspects obsoltes

14

Annexe D : systme de compilation

15

Annexe E : exercices

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

228 / 266

Annexe C : aspects obsoltes

Aspects obsoltes

IF arithmtique : IF (ITEST) 10,11,12


==> IF--THEN--ELSE IF--ELSE--ENDIF
Branchement au END IF depuis lextrieur 1
==> se brancher linstruction suivante.

Boucles DO pilotes par rels 1 : DO 10 R=1., 5.7, 1.3

Partage dune instruction de fin de boucle :


DO 1 I=1,N
DO 1 J=1,N
A(I,J)=A(I,J)+C(J,I)
1 CONTINUE
==> autant de CONTINUE que de boucles.

Fins de boucles autres que CONTINUE ou END DO

aspects obsoltes dclars hors norme par Fortran 95

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

229 / 266

Annexe C : aspects obsoltes

Aspects obsoltes

ASSIGN 1 et le GO TO assign 1 : assign 1 :


ASSIGN 10 TO intvar
....
ASSIGN 20 TO intvar
....
GO TO intvar
==> SELECT CASE ou IF/THEN/ELSE
ASSIGN 1 dune tiquette de FORMAT :
ASSIGN 2 TO NF
2 FORMAT (F9.2)
PRINT NF,TRUC

==>

CHARACTER(7),DIMENSION(4)::C
I = 2; C(2) = (F9.2)
PRINT C(I),TRUC

aspects obsoltes dclars hors norme par Fortran 95

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

230 / 266

Annexe C : aspects obsoltes

Aspects obsoltes

RETURN multiples :
CALL SP1(X,Y,*10,*20)
...
10
...
...
20
...
...
SUBROUTINE SP1(X1,Y1,*,*)
...
RETURN 1
...
RETURN 2
...

==> SELECT CASE sur la valeur dun argument retourn


2

PAUSE 1 Montez la bande 102423 SVP


==> READ qui attend les donnes
FORMAT(9H A viter) 1
==> Constante littrale : FORMAT( Recommand)
aspects obsoltes dclars hors norme par Fortran 95

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

231 / 266

Annexe C : aspects obsoltes

Aspects obsoltes Fortran 95

Le "format fixe" du source


==> "format libre".

Le GO TO calcul (GO TO (10,11,12,...), int_expr)


==> select case.

Linstruction DATA place au sein des instructions excutables


==> avant les instructions excutables.

Statement functions (sin_deg(x)=sin(x*3.14/180.))


==> procdures internes.

Le type CHARACTER*... dans les dclarations


==> CHARACTER(LEN=...)

Le type CHARACTER(LEN=*) de longueur implicite en retour dune fonction


==> CHARACTER(LEN=len(str)).

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

232 / 266

Annexe D : systme de compilation

11

Annexe A : entres-sorties - syntaxes

12

Annexe B : procdures intrinsques

13

Annexe C : aspects obsoltes

14

Annexe D : systme de compilation

15

Annexe E : exercices

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

233 / 266

Annexe D : systme de compilation

Systme de compilation

La commande f90 permet de gnrer un excutable partir de fichiers sources Fortran.


Celle-ci appelle un systme de compilation faisant successivement appel :
un prprocesseur,
un compilateur,
un loader ou diteur de liens.
La composante prprocesseur transforme le source Fortran en entre au moyen de directives.
La composante compilateur analyse le source Fortran fourni (ventuellement transform ltape prcdente) avec :
dtection des erreurs de syntaxe,
traduction du source en langage machine plus ou moins optimis,
production dun module objet.
Enfin la dernire composante fait appel au loader qui rcupre les modules objets prcdemment crs et les regroupe pour
produire un module excutable.
Les diffrentes units de programme constituant une application Fortran peuvent figurer dans un mme fichier ou bien
tre rparties dans plusieurs fichiers. Ceux-ci doivent tre suffixs par .f ou .f90 .

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

234 / 266

Annexe D : systme de compilation

Systme de compilation

Le compilateur suppose que le source est crit avec le format fixe si le fichier est suffix par .f et avec le format libre si le
fichier est suffix par .f90 . Ce format dcriture peut tre explicit au moyen dune option indpendamment du suffixe
employ.
Les fichiers correspondant aux modules objets sont suffixs par .o .
Par dfaut le module excutable est stock dans un fichier de nom a.out quil est possible de renommer laide de
loption -o nom_excutable_dsir .
Loption -c permet de conserver le ou les modules objets produits par le compilateur et dinhiber ltape du loader.
Cest la technique employe par lutilitaire make qui, automatiquement, lance les compilations des diffrents fichiers source
constituant lapplication. Les modules objets obtenus sont in fine fournis au systme de compilation pour la production du
module excutable.
Exemple
$ f90 -c source1 . f90
$ f90 -c source2 . f90
...
$ f90 -c sourcen . f90
$ f90 *. o -o a . exe

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

235 / 266

Annexe D : systme de compilation

Systme de compilation

Il est possible darchiver les fichiers *.o laide de lutilitaire ar dans le but de les regrouper dans un seul fichier dont le
nom est de la forme libxxx.a .
Cela permet la constitution de bibliothques de modules objets lesquelles sont transmises la composante loader laide
des options -L et -l permettant de spcifier lendroit o celles-ci sont stockes et leur noms.
Exemple
$ f90 -c source1 . f90
$ f90 -c source2 . f90
...
$ f90 -c sourcen . f90
$ ar - rv libexemple . a *. o
$ mv libexemple . a $HOME / lib
$ f90 - L$HOME / lib - lexemple -o a . exe

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

236 / 266

Annexe E : exercices

11

Annexe A : entres-sorties - syntaxes

12

Annexe B : procdures intrinsques

13

Annexe C : aspects obsoltes

14

Annexe D : systme de compilation

15

Annexe E : exercices

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

237 / 266

Annexe E : exercices

noncs

Exercice 1

crire un programme permettant de rsoudre le systme de 2 quations 2 inconnues :

u1 x + v1 y = w1
u2 x + v2 y = w2

On pourra imprimer les solutions laide de linstruction : PRINT *, X = , X, , Y = , Y


Exercice 2

crire un programme permettant de calculer les racines du trinme du 2nd degr : ax 2 + bx + c. On sassurera que a est non nul. Les
racines, si elles existent, pourront tre imprimes laide de linstruction :
PRINT *, X1 = , X1, , X2 = , X2
Exercice 3

crire un programme calculant le nombre dOr. Celui-ci peut tre obtenu partir de la suite de Fibonnacci un dfinie par :
u0 = 1
u1 = 1
...
un+1 = un + un1
La suite (

un+1
un

) converge vers le nombre dOr.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

238 / 266

Annexe E : exercices

noncs

Exercice 4
crire un programme permettant de dterminer les nombres premiers dans lintervalle [1,n] laide du crible dratosthne. Il consiste former une table avec tous
les entiers naturels compris entre 2 et n et rayer (mise zro), les uns aprs les autres, les entiers qui ne sont pas premiers de la manire suivante : ds que lon
trouve un entier qui na pas encore t ray, il est dclar premier, et on raye tous les multiples de celui-ci.
la fin du procd, les nombres non barrs sont des nombres premiers.
On tiendra compte du fait quun nombre donn peut dj avoir t limin
en tant que multiple de nombres prcdents dj tests.
Par ailleurs, on sait
que lon peut rduire la recherche aux nombres de 2 n (si un entier non premier est strictement suprieur n alors il a au moins un
diviseur infrieur n et aura donc dj t ray).
Exercice 5
crire un programme permettant de trier un vecteur de nombres en ordre croissant puis dcroissant. On sappuiera sur lalgorithme appel tri bulle qui consiste
comparer 2 lments conscutifs et les intervertir si ncessaire.
Si aprs avoir termin lexploration du tableau au moins une interversion a t effectue, on renouvelle lexploration, sinon le tri est termin.
Exercice 6
crire un programme permettant deffectuer le produit de 2 matrices A et B. Leurs profils seront dfinis laide de constantes symboliques. La matrice rsultat C
sera imprime lcran ligne par ligne avec linstruction PRINT puis stocke dans un fichier binaire que lon nommera exo6.matrice .
Exercice 7
Le fichier texte squentiel musiciens est constitu de plusieurs enregistrements, chacun contenant un nom de musicien suivi de ses annes de naissance et de
mort.
crire un programme dont le but est de lire le fichier musiciens et de stocker les enregistrements lus dans un fichier texte accs direct que lon nommera
musiciens.txt .

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

239 / 266

Annexe E : exercices

noncs

Exercice 8
Imprimer lenregistrement du fichier musiciens dont le rang est entr au clavier. Son extraction sera effectue partir dun fichier texte temporaire accs
direct, image du prcdent.
On permettra la saisie de plusieurs rangs.
Exercice 9
Les enregistrements des fichiers squentiels
index_naissance.dat et index_deces.dat sont constitus dune date de naissance (ou de dcs) dun musicien suivi de son rang dans le fichier
musiciens.txt cr lexercice 7.
crire un programme permettant dimprimer le ou les musiciens dont la date de naissance ou de mort est saisie au clavier. Le type de date dsire sera
pralablement dtermin.
La slection des enregistrements rpondant aux choix spcifis, seffectuera par lintermdiaire du fichier dindex correspondant au type de date.
On offrira la possibilit deffectuer plusieurs recherches.
Exercice 10
Le but de cet exercice est de transformer la matrice stocke dans le fichier binaire exo6.matrice . Cette transformation consiste modifier chaque lment
laide dune fonction paramtrable de la forme y = f (x ).
On dfinira plusieurs fonctions de ce type. La valeur dun entier lu dans une namelist indiquera la fonction transmettre en argument de la procdure charge
deffectuer la transformation.
Exercice 11
Trier les vecteurs lignes puis les vecteurs colonnes dune matrice en utilisant lalgorithme tri bulle et la matrice stocke dans le fichier binaire exo6.matrice .
On se dfinira une procdure effectuant le tri (croissant ou dcroissant) des diffrents vecteurs au moyen dune procdure interne.

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

240 / 266

Annexe E : exercices

Corrig de lexercice 1

program systeme
implicit none
real u1 , u2
real v1 , v2
real w1 , w2
real delta , delta_x , delta_y
real x , y
! Valorisation des coefficients .
u1 = 2; u2 = 4
v1 = 5; v2 = 11
w1 = 7; w2 = 6
! Calcul du dterminant principal .
delta = u1 * v2 - u2 * v1
if ( delta == 0. ) then
print * , " Le systme n a pas de solution unique . "
stop 4
end if
! Calcul du dterminant en x .
delta_x = w1 * v2 - w2 * v1
! Calcul du dterminant en y .
delta_y = u1 * w2 - u2 * w1
! calcul des solutions .
x = delta_x / delta
y = delta_y / delta
! Impression des solutions .
print * , " x = " , x , " , y = " , y
end program systeme

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

241 / 266

Annexe E : exercices

Corrig de lexercice 2

program trinome
implicit none
real a , b , c
real delta , r_delta , x1 , x2
! Valorisation des coefficients .
a = 3.; b = 7.; c = -11.
! a doit tre non nul .
if ( a == 0. ) stop " a doit tre non nul . "
! calcul du dterminant .
delta = b * b - 4* a * c
! cas du dterminant ngatif .
if ( delta < 0. ) stop " Pas de racine relle . "
! cas du dterminant nul .
if ( delta == 0. ) then
x1 = -b /(2* a ); x2 = x1
else
! cas du dterminant positif .
r_delta = sqrt ( delta )
x1 = ( - b - r_delta )/(2* a ); x2 = ( - b + r_delta )/(2* a )
end if
! Impression des racines .
print * , " x1 = " , x1 , " , x2 = " , x2
end program trinome

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

242 / 266

Annexe E : exercices

Corrig de lexercice 2 (solutions dans le corps des complexes)

program trinome
implicit none
real
a, b, c
real
delta , expr1 , expr2
complex x1 , x2
! Valorisation des coefficients .
a = 1.4; b = 2.7; c = 2.9
! a doit tre non nul .
if ( a == 0. ) stop " a doit tre non nul . "
! calcul du dterminant .
delta = b * b - 4* a * c
expr1 = -b /(2* a )
expr2 = abs ( delta )**0.5 d0 /(2* a )
if ( delta < 0. ) then ! racines complexes
x1 = cmplx ( expr1 , expr2 )
x2 = cmplx ( expr1 , - expr2 )
print * , " Les racines sont complexes = > x1 = " , x1 , " x2 = " , x2
else
! racines relles
x1 = expr1 + expr2
x2 = expr1 - expr2
print * , " Les racines sont relles = > x1 = " , real ( x1 ) , " x2 = " , real ( x2 )
end if
end program trinome

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

243 / 266

Annexe E : exercices

Corrig de lexercice 2 (solutions dans le corps des complexes)

version norme 2008


program trinome
implicit none
real
a, b, c
real
delta , expr1 , expr2
complex x1 , x2
! Valorisation des coefficients .
a = 1.4; b = 2.7; c = 2.9
! a doit tre non nul .
if ( a == 0. ) stop " a doit tre non nul . "
! calcul du dterminant .
delta = b * b - 4* a * c
expr1 = -b /(2* a )
expr2 = abs ( delta )**0.5 d0 /(2* a )
if ( delta < 0. ) then !
x1 % re = expr1 ; x1 % im
x2 % re = expr1 ; x2 % im
print * , " Les racines
else
!
x1 = expr1 + expr2
x2 = expr1 - expr2
print * , " Les racines
end if
end program trinome

racines complexes
= expr2 ! norme 2008
= - expr2 ! norme 2008
sont complexes = > x1 = " , x1 , " x2 = " , x2
racines relles

sont relles = > x1 = " , x1 % re , " x2 = " , x2 % re ! norme 2008

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

244 / 266

Annexe E : exercices

Corrig de lexercice 3

program nombre_dor
implicit none
real , parameter ::
real
::
real
::
real
::
real
::

epsilon = 1. e -5
u_prec , u_cour
v_prec , v_cour
somme
nombre_or

nombre_or = (1. + 5.**0.5)/2.


u_prec = 1.; u_cour = 1.
do
v_prec = u_cour / u_prec
somme = u_cour + u_prec
u_prec = u_cour
u_cour = somme
v_cour = u_cour / u_prec
if ( abs ( ( v_cour - v_prec )/ v_prec ) < epsilon ) exit
end do
print * , " Limite de la suite ( vn ) : " , v_cour , &
" Nombre d or : " , nombre_or
end program nombre_dor

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

245 / 266

Annexe E : exercices

Corrig de lexercice 3 (autre solution)

program nombre_dor
implicit none
double precision , parameter :: epsilon = 1. d -11
double precision
:: u_prec , u_cour
double precision
:: v_cour
double precision
:: somme
double precision
:: nombre_or
! Attention : une partie de l expression suivante est
! --------value en simple prcision . Ce qui fait
!
diverger le calcul itratif qui suit !
! nombre_or = (1. d0 + 5.**0.5)/2. d0
nombre_or = (1. d0 + 5. d0 **0.5 d0 )/2. d0
u_prec = 1. d0 ; u_cour = 1. d0
do
somme = u_cour + u_prec
u_prec = u_cour
u_cour = somme
v_cour = u_cour / u_prec
if ( abs ( ( v_cour - nombre_or ) < epsilon ) exit
end do
print * , " Limite de la suite ( vn ) : " , v_cour , &
" Nombre d or : " , nombre_or
end program nombre_dor

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

246 / 266

Annexe E : exercices

Corrig de lexercice 4

program eratosthene
implicit none
integer , parameter
:: n = 1000
integer , dimension ( n ) :: tab_nombres
integer
:: imax , i
tab_nombres (:) = (/ (i , i =1 , n ) /)
imax = int ( sqrt ( real ( n )))
do i =2 , imax
if ( tab_nombres ( i ) /= 0 ) tab_nombres (2* i : n : i ) = 0
end do
print * , " Les nombres premiers entre 1 et " , n , " sont : "
do i =2 , n
if ( tab_nombres ( i ) /= 0 ) print * , tab_nombres ( i )
end do
end program eratosthene

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

247 / 266

Annexe E : exercices

Corrig de lexercice 4 (autre solution)

program eratosthene
implicit none
integer , parameter
:: n = 1000
logical , dimension ( n ) :: tab_nombres
integer
:: imax , i
tab_nombres (:) = . true .
imax = n **0.5
do i =2 , imax
if ( tab_nombres ( i ) ) tab_nombres (2* i : n : i ) = . false .
end do
print * , " Les nombres premiers entre 1 et " , n , " sont : "
do i =2 , n
if ( tab_nombres ( i ) ) print * , i
end do
end program eratosthene

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

248 / 266

Annexe E : exercices

Corrig de lexercice 5

program triabulle
implicit none
integer , parameter :: croissant =1 , decroissant =2 , n =10
real , dimension ( n ) :: tab
real
:: temp
logical
:: tri_termine , expr1 , expr2
integer
:: sens , i
! Valorisation du vecteur
data tab /0.76 , 0.38 , 0.42 , 0.91 , 0.25 , &
0.13 , 0.52 , 0.69 , 0.76 , 0.98/
do sens = croissant , decroissant
! Sens du tri
do
! Tri
tri_termine = . true .
do i =2 , n
expr1 = sens == croissant
. and . tab (i -1) > tab ( i )
expr2 = sens == decroissant . and . tab (i -1) < tab ( i )
if ( expr1 . or . expr2 ) then
tri_termine = . false .
temp = tab (i -1); tab (i -1) = tab ( i ); tab ( i ) = temp
end if
end do
if ( tri_termine ) exit
end do
! Impression du vecteur tri
if ( sens == croissant )
print * , " Tri croissant "
if ( sens == decroissant ) print * , " Tri dcroissant "
print * , tab
end do
end program triabulle

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

249 / 266

Annexe E : exercices

Corrig de lexercice 5 (autre solution)

program triabulle
implicit none
integer , parameter :: croissant =1 , decroissant =2 , n =10
real , dimension ( n ) :: tab
real
:: temp
logical
:: expr1 , expr2
integer
:: sens , i , j
! Valorisation du vecteur .
data tab /0.76 , 0.38 , 0.42 , 0.91 , 0.25 , &
0.13 , 0.52 , 0.69 , 0.76 , 0.98/
do sens = croissant , decroissant
! sens du tri
do i =n -1 ,1 , -1
! tri
do j =1 , i
expr1 = sens == croissant
. and . tab ( j +1) > tab ( j )
expr2 = sens == decroissant . and . tab ( j +1) < tab ( j )
if ( expr1 . or . expr2 ) then
temp
= tab ( j +1)
tab ( j +1) = tab ( j )
tab ( j )
= temp
end if
end do
end do
! Impression du vecteur tri .
if ( sens == croissant )
print * , " Tri croissant "
if ( sens == decroissant ) print * , " Tri dcroissant "
print (*( f5 .2)) , tab
! format fortran 2008
end do
end program triabulle

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

250 / 266

Annexe E : exercices

Corrig de lexercice 6

program p r od u it _matrice
implicit none
integer , parameter
::
real , dimension (n , m ) ::
real , dimension (m , p ) ::
real , dimension (n , p ) ::
integer
::

data

n = 10 , m = 5 , p = 3
a
b
c
i ,j , k

! Valorisation des matrices


(( a (i , j ) , j =1 , m ) , i =1 , n )/
0.00 , 0.38 , 0.42 , 0.91 , 0.25 ,
0.13 , 0.52 , 0.69 , 0.76 , 0.98 ,
0.76 , 0.83 , 0.59 , 0.26 , 0.72 ,
0.46 , 0.03 , 0.93 , 0.05 , 0.75 ,
0.53 , 0.05 , 0.85 , 0.74 , 0.65 ,
0.22 , 0.53 , 0.53 , 0.33 , 0.07 ,
0.05 , 0.67 , 0.09 , 0.63 , 0.63 ,
0.68 , 0.01 , 0.65 , 0.76 , 0.88 ,
0.68 , 0.38 , 0.42 , 0.99 , 0.27 ,
0.93 , 0.07 , 0.70 ,0.37 , 0.44/

data (( b (i , j ) , j =1 , p ) , i =1 , m )/
0.76 , 0.16 , 0.9047 ,
0.47 , 0.48 , 0.5045 ,
0.23 , 0.89 , 0.5163 ,
0.27 , 0.90 , 0.3190 ,
0.35 , 0.06 , 0.9866/

A et B
&
&
&
&
&
&
&
&
&
&

&
&
&
&
&

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

251 / 266

Annexe E : exercices

Corrig de lexercice 6 (suite)

! Produit de matrice .
do i =1 , n
do j =1 , p
c (i , j ) = 0.
do k =1 , m
c (i , j ) = c (i , j ) + a (i , k ) * b (k , j )
end do
end do
end do
! Impression de la matrice c .
do i =1 , n
print * , c (i ,:)
end do
! criture de la matrice c dans un fichier .
open ( unit =1 ,
file = " exo6 . matrice " , &
status = " replace " , form = " unformatted " , &
action = " write " )
write ( unit =1 ) c
close ( unit =1 )
end program p ro duit_matrice

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

252 / 266

Annexe E : exercices

Corrig de lexercice 7

program e c r i t u r e _ mu s i ci e ns
integer , parameter
character ( len = taille_max )
integer
integer

::
::
::
::

taille_max =80
mus
ios_mus
numrec

! Ouverture du fichier des musiciens


! ainsi que d un fichier en criture
! accs direct dans lequel on
! va recopier le fichier prcdent .
open ( unit =1 ,
file = " musiciens " ,
&
form = " formatted " , status = " old " ,
&
action = " read " ,
position = " rewind " )
open ( unit =2 ,
file = " musiciens . txt " , &
status = " replace " ,
&
form = " formatted " , access = " direct " ,
&
action = " write " ,
recl = taille_max )
! On effectue la copie .
numrec = 0
read ( unit =1 , fmt = " ( a ) " , iostat = ios_mus ) mus
do while ( ios_mus == 0 )
numrec = numrec + 1
write ( unit =2 , fmt = " ( a ) " , rec = numrec ) mus
read ( unit =1 , fmt = " ( a ) " , iostat = ios_mus ) mus
end do
close ( unit =1 ); close ( unit =2 )
if ( ios_mus > 0 ) print * , " Erreur lecture sur l unit 1. "
end program e c ri t ur e _m u s ic i en s

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

253 / 266

Annexe E : exercices

Corrig de lexercice 8

program musiciens
implicit none
integer , parameter
character ( len = lrecl )
integer
integer

::
::
::
::

lrecl =80
mus
ios_mus , ios_stdin
numrec , rang

!
!
!
!

Ouverture du fichier des musiciens


ainsi que d un fichier temporaire
accs direct dans lequel on
va recopier le fichier prcdent .
open ( unit =1 ,
file = " musiciens " ,
form = " formatted " ,
status = " old " ,
action = " read " ,
position = " rewind " )
open ( unit =2 ,
status = " scratch " ,
form = " formatted " ,
access = " direct " ,
action = " readwrite " , recl = lrecl )
! On effectue la copie .
numrec = 0
do
read ( unit =1 , fmt = " ( a ) " , END =1 ) mus
numrec = numrec + 1
write ( unit =2 , fmt = " ( a ) " , rec = numrec ) mus
end do
1 close ( unit =1 )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

&
&
&
&

Langage Fortran(Base)

26 mai 2015

254 / 266

Annexe E : exercices

Corrig de lexercice 8 (suite)

! On demande un rang de musicien .


do
print * , " Entrez le rang d un musicien : "
read ( unit =* , fmt =* , iostat = ios_stdin ) rang
if ( ios_stdin > 0 ) then
print (a ,/) , " Erreur lors de la saisie . "
cycle
end if
if ( ios_stdin < 0 ) exit
read ( unit =2 , rec = rang , fmt = ( a ) , iostat = ios_mus ) mus
if ( ios_mus /= 0 ) then
print * , " Le musicien de rang " , rang , "n existe pas "
else
print (" musicien de rang " , i3 ," == > " , a ) , rang , trim ( mus )
end if
end do
close ( unit =2 )
end program musiciens

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

255 / 266

Annexe E : exercices

Corrig de lexercice 9

program s e q u e n t ie l_i nd exe


implicit none
character ( len =*) , dimension (2) , parameter :: f_index = &
(/ " i n dex_naissance . dat " , " index_deces . dat
" /)
integer , parameter :: long =80
character ( len = long ) :: musicien
integer
:: lrecl
! Ouverture du fichier des musiciens en accs direct
! ainsi que des fichiers d index .
open ( unit =1 ,
file = f_index (1) ,
&
status = " old " ,
form = " formatted " , action = " read " )
open ( unit =2 ,
file = trim ( f_index (2)) ,
&
status = " old " ,
form = " formatted " , action = " read " )
open ( unit =3 ,
file = " musiciens . txt " ,
&
status = " old " ,
form = " formatted " ,
&
access = " direct " , action = " read " , recl = long )
call r e c h e r c h e _m u s ic i en
close ( unit =1 )
close ( unit =2 )
close ( unit =3 )
end program s e que nt iel _i nde xe

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

256 / 266

Annexe E : exercices

Corrig de lexercice 9 (suite)

subroutine r e c he r ch e _ mu s ic i e n
implicit none
integer , parameter :: EOF = -1
character ( len =50) :: prompt_date , message
character ( len =4)
:: date_saisie , date_lue
integer
:: unite_index
do
! Type de date : naissance ou dcs
if ( choix_date () == EOF ) exit
! Lecture d une date .
if ( lecture_date () == EOF ) exit
! Recherche du ou des musiciens
if ( . not . musicien_trouve () ) &
print * , " Aucun musicien ne rpond la demande "
print *
end do
contains

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

257 / 266

Annexe E : exercices

Corrig de lexercice 9 (suite)

integer function choix_date ()


integer
ios_stdin , reponse
character tabulation
tabulation = achar (9)
do
print " (2 a ) " , tabulation , " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
print " (2 a ) " , tabulation , " Choix du critre de recherche : "
print " (2 a ) " , tabulation , " - par date de naissance (1) "
print " (2 a ) " , tabulation , " - par date de dcs
(2) "
print " (2 a ) " , tabulation , " - QUITTER
(3) "
print " (2 a ) " , tabulation , " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
read (* , * , IOSTAT = ios_stdin ) reponse
if ( ios_stdin < 0 ) then
choix_date = EOF
return
else if ( ios_stdin > 0 ) then
print " (/ ,a ,/) " , " Erreur dans la saisie "
else
if ( reponse < 1 . or . reponse > 3 ) then
print * , " Choix invalide . "
else
exit
end if
end if
end do

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

258 / 266

Annexe E : exercices

Corrig de lexercice 9 (suite)

select case ( reponse )


case (1) ! Recherche par date de naissance .
prompt_date = " Entrer une date de naissance d un musicien "
message = " Liste des musiciens ns en "
case (2) ! Recherche par date de dcs .
prompt_date = " Entrer une date de dcs d un musicien "
message = " Liste des musiciens morts en "
case (3) ! Quitter
choix_date = EOF
return
end select
unite_index = reponse
rewind ( unit = unite_index )
choix_date = 0
end function choix_date

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

259 / 266

Annexe E : exercices

Corrig de lexercice 9 (suite)

function lecture_date ()
integer lecture_date
integer ios_stdin
do
print " (/ , a ) " , trim ( prompt_date )
read (* , * , IOSTAT = ios_stdin ) date_saisie
if ( ios_stdin < 0 ) then
lecture_date = EOF
return
else if ( ios_stdin > 0 ) then
print " (/ ,a ,/) " , " Date errone ! "
else
message = trim ( message )// " " // date_saisie
exit
end if
end do
lecture_date = 0
end function lecture_date

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

260 / 266

Annexe E : exercices

Corrig de lexercice 9 (suite)

function m us icien_trouve ()
logical m u sicien_trouve
! Dclarations locales
character ( len =80) :: musicien
character ( len =11) :: fmt = " (/ ,a ,/ , a ) "
integer
:: i , taille_message , numrec
tai lle_ message = len_trim ( message )
write ( fmt(8:9) , " ( i2 ) " ) taille_message
print fmt, message , ( " -" ,i =1 , taille_message )
mus i ci e n_ t rouve = . false .
do
read ( unit = unite_index , fmt =* , END =1 ) date_lue , numrec
if ( date_lue == date_saisie ) then
! On lit l enregistrement correspondant .
m us i ci e n_trouve = . true .
read ( unit =3 , fmt = ( a ) , rec = numrec ) musicien
print " (2 a ) " ," - " , trim ( musicien )
end if
end do
1
return
end function musicien_trouve
end subroutine r ec h er c h e_ m us i c ie n

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

261 / 266

Annexe E : exercices

Corrig de lexercice 10

program mat_transf
implicit none
integer , parameter
:: n = 10 , m = 3
real , dimension (n , m ) :: mat
integer
:: choix_methode , ios , num_ligne
real , external
:: carre , identite , logarithme
real , intrinsic
:: sqrt
namelist / methode / choix_methode
! Ouverture du fichier contenant la matrice .
open ( unit =1 ,
file = " exo6 . matrice " , &
form = " unformatted " , action = " read " ,
&
status = " old " ,
position = " rewind " ,
&
iostat = ios )
if ( ios /= 0) &
stop " Erreur l ouverture du fichier exo6 . matrice "
! Lecture de la matrice .
read (1) mat
close (1)
! Ouverture du fichier contenant
! la namelist " methode ".
open ( unit =1 ,
file = " exo10 . namelist " , &
form = " formatted " , action = " read " ,
&
status = " old " ,
position = " rewind " ,
&
iostat = ios )
if ( ios /= 0) &
stop " Erreur l ouverture du fichier exo10 . namelist "
read ( unit =1 , nml = methode )
close ( unit =1 )

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

262 / 266

Annexe E : exercices

Corrig de lexercice 10 (suite)

! Tran sformation de la matrice l aide


! de la mthode choisie .
select case ( choix_methode )
case (1)
call transform ( mat , n , m , identite )
case (2)
call transform ( mat , n , m , carre )
case (3)
call transform ( mat , n , m , sqrt )
case (4)
call transform ( mat , n , m , logarithme )
end select
! Sauvegarde de la matrice transforme dans
! le fichier " e x o 6 _ m a t r i c e _ t r a n s f ".
open ( unit =1 ,
file = " e x o 6 _ m a t r i c e _ t r a n s f " , &
form = " formatted " , action = " write " ,
&
status = " replace " , iostat = ios )
if ( ios /= 0 ) &
stop " Erreur lors de l ouverture &
& du fichier " " e x o 6_ m a t r i c e _ t r a n s f " " "
do num_ligne =1 , n
write ( unit =1 , fmt = " (3 f10 .6) " ) mat ( num_ligne ,:)
end do
close ( unit =1 )
end program mat_transf

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

263 / 266

Annexe E : exercices

Corrig de lexercice 10 (suite)

! Procdure de transformation .
subroutine transform ( t , n , m , f )
implicit none
integer
:: n , m , i , j
real , dimension (n , m ) :: t
real
:: f
do i =1 , n
do j =1 , m
t (i , j ) = f ( t (i , j ))
end do
end do
end subroutine transform
! Dfinitions des fonctions de transformation .
function identite ( x )
implicit none
real x , identite
identite = x
end function identite
function carre ( x )
implicit none
real x , carre
carre = x * x
end function carre
function logarithme ( x )
implicit none
real x , logarithme
logarithme = log ( x )
end function logarithme

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

264 / 266

Annexe E : exercices

Corrig de lexercice 11

program tri_matrice
implicit none
integer , parameter
real , dimension (n , m )
integer
character ( len =8)

::
::
::
::

n =10 , m =3
mat
i, j
format = " (

F7 .3) "

write ( format (2:3) , ( i2 ) ) m


! Lecture de la matrice trier .
open ( unit =1 ,
&
file = " exo6 . matrice " , &
form = " unformatted " , &
status = " old " ,
&
action = " read " )
read ( unit =1 ) mat
close ( unit =1 )
call tri ( mat , n , m ) ! Tri de la matrice lue .
! criture de la matrice trie .
open ( unit =1 ,
file = " exo11 . matrice_triee " , &
form = " formatted " , status = " replace " ,
&
action = " write " )
write ( unit =1 , fmt = format ) (( mat (i , j ) , j =1 , m ) , i =1 , n )
close ( unit =1 )
end program tri_matrice

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

265 / 266

Annexe E : exercices

Corrig de lexercice 11 (suite)

! Procdure de tri .
subroutine tri ( mat , n , m )
implicit none
! Dclaration des arguments
integer
:: n , m
real , dimension (n , m ) :: mat
! Dclaration des variables locales
integer
:: i , j
do i =1 , n
! Tri des lignes .
call tri_vecteur ( mat (i ,:) , m )
end do
do j =1 , m
! Tri des colonnes .
call tri_vecteur ( mat (: , j ) , n )
end do
contains ! Procdure de tri d un vecteur .
subroutine tri_vecteur ( v , nb_elts )
integer
:: nb_elts
real , dimension ( nb_elts ) :: v
integer
:: i , j
do i = nb_elts -1 ,1 , -1
do j =1 , i
if ( v ( j ) > v ( j +1) ) then
! Utilisation de sections rgulires pour effectuer l interversion .
v ( j : j +1) = v ( j +1: j : -1)
end if
end do
end do
end subroutine tri_vecteur
end subroutine tri

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices

Symboles
assumed-size array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
assumed-size string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

A
accs
direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195, 196, 198
exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
squentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153, 154, 156
ANSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
ar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
argument
chane de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228
procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230, 231
argument procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
arguments dappel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223, 225, 226
arguments muets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
ASA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
DIMENSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

B
BACKSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
base
hexadcimale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
octal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
bases de numration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
bibliothque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Block data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

C
CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
caractre
reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
table ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
CHARACTER* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
STATUS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273
UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273
code source
jeu de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Common . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243253
tiquet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
attribut save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249, 250
initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247, 248
blanc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243, 244
exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
rgles et restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251253
syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
compilateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
complexe
reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
constantes
chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
entires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
littrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7579
relles double prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
relles simple prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
symboliques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
CONTAINS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

D
dclaration
attribut PARAMETER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
implicit none . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
initialisation avec = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
instruction equivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85, 86
syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
DELIM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
descripteurs de format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
Dure de vie et visibilit des identificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

E
ENDFILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
enregistrement logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
entier
reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
entre standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
equivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
exercices
noncs
exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
exercice 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
exercice 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
exercice 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
exercice 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
exercice 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
exercice 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
exercice 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
exercice 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
exercice 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
corrigs
exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
exercice 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
exercice 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299301
exercice 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
exercice 3 (autre solution) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
exercice 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
exercice 4 (autre solution) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
exercice 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
exercice 5 (autre solution) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
exercice 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
exercice 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
exercice 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
exercice 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
EXTERNAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233

F
fichier
binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154, 196
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
destruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
temporaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156, 198
FMT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
fonction
statement function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
format
Litteral string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
BOZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
descripteur A en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
descripteur A en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
descripteur EN en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
descripteur ES en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
descripteur F en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
descripteur I en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
descripteur I en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
descripteur L en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
descripteur L en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
descripteurs
en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
descripteurs / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182
descripteurs de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
descripteurs E, D en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
descripteurs F en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
descripteurs F, E, D en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162, 163
descripteurs SS,SP,S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
facteur de rptition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
gabarit indfini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187, 188
rexploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
format fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
format libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
formats ddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Fortran
documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
fortran 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
fortran 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
fortran 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
fortran 77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
fortran 95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
fortran IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
fortran V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Fortran 95
aspects obsoltes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287289
FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226, 227

G
GO TO calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

I
identificateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
identificateurs
dure de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
visibilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
initialisation
instruction DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80, 81
INQUIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
ACCESS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
ACTION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
BLANK= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
DELIM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
DIRECT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
ERR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
EXIST= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
FILE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
FORM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
FORMATTED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
NAME= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
NAMED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
NEXTREC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
NUMBER= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
OPENED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
PAD= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
POSITION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
READ= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
READWRITE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
RECL= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
SEQUENTIAL= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
UNFORMATTED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267
WRITE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
inquire
iolength= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
instruction
GO TO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
instructions
positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
INTRINSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
IOSTAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

L
LEN= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
logique
reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

M
make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
module excutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
module objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

N
NAMELIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156, 192, 193
NML= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156, 193

O
oprateurs
arithmtiques
conversion implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91104
concatnation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
daffectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109113
logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
relationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
table des priorits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114119
OPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152, 154
ACCESS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
ACTION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
BLANK= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
DELIM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
FILE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
FORM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
PAD= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
POSITION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
RECL= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
STATUS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259
syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258

P
prprocesseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
procdure
fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
intrinsque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
subroutine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
procdures intrinsques
ABS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
ACHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229, 276
ACOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
ADJUSTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
ADJUSTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276
AIMAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277
AINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
ANINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
ASIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
ATAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
BIT_SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
BTEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
CEILING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
CMPLX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
CONJG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
COS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
COSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
DBLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
EXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
FLOOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
IACHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229, 279
IAND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
IBCLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
IBITS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
IBSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
IEOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
INT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
IOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
ISHFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
ISHFTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
LEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
LEN_TRIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
LGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282
LGT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
LLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
LLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
LOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
LOG10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
MAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
MOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
REAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
REPEAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
SCAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
SIGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
SIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
SINH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
SQRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
TAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
TANH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
TRIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
VERIFY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

R
rel
prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
READ
ADVANCE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
END= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217, 218, 263
EOR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
ERR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217, 263
FMT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220, 263
NML= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
REC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
SIZE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
REC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195, 196, 198
reprsentation en mmoire
des caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
des complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
des entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
des logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
des rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225, 226
REWIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

S
scratch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
sortie standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
structures de contrle
DO
syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
DO indx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
DO WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
DO/CYCLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
DO/EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
SELECT CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
syntaxe
commentaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
format fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
format libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

T
tableau
tendue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
agencement en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
conformance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
constructeur de vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
dclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266

Annexe E : exercices
expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
initialisation
instruction DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
symbole = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
rang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
section rgulire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
tests
IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
SELECT CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Types prdfinis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

U
UNIT=* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
unit logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
units de programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

V
variable
type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

W
WRITE
ADVANCE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
ERR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
FMT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
NML= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
REC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264

Anne Fouilloux Patrick Corde ( anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr )

Langage Fortran(Base)

26 mai 2015

266 / 266