Está en la página 1de 137

Langage Fortran (F95-1)

Anne Fouilloux Patrick Corde


anne.fouilloux@ecmwf.int Patrick.Corde@idris.fr

4 mai 2012

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

1 / 262

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 Identicateurs Dirents types Syntaxe Le type CHARACTER Instruction IMPLICIT NONE Constantes littrales
Constantes entires
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 2 / 262

Table des matires II


Constantes Constantes Constantes Constantes relles simple prcision relles double prcision complexes chanes de caractres

Initialisation
Linstruction DATA Le symbole =

Constantes symboliques Instruction EQUIVALENCE


4

Oprateurs et expressions Oprateurs arithmtiques


Les oprateurs Conversion implicite

Oprateurs relationnels Oprateurs logiques


Les tables de vrit

Oprateur de concatnation Oprateur daectation


syntaxe gnrale Rgles de typage

Priorit des Oprateurs


5

Structures de contrle Les tests


Le bloc IF Le bloc SELECT-CASE
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 3 / 262

Table des matires III


Les itrations
Linstruction GOTO Les bloucles DO
6

Tableaux Dclaration Dnitions (rang, prol, tendue) 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 chier Fichier interne Instructions de positionnement


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 4 / 262

Table des matires IV


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

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 identicateurs 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 Langage Fortran(F95-1) 4 mai 2012 5 / 262

Introduction

Introduction Historique bibliographie documentation Gnralits Dclarations Oprateurs et expressions Structures de contrle Tableaux Entres-Sorties Procdures Common Include
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 6 / 262

10

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) : Ecacit du code gnr (performance) ; Langage quasi naturel pour scientiques (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 Langage Fortran(F95-1) 4 mai 2012 7 / 262

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 scientique ; 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

Langage Fortran(F95-1)

4 mai 2012

8 / 262

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 ;


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 spcicits 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 ;


Kerrigan James F., Migrating to Fortran 90, OReilly & Associates Inc.,

1994, (389 pages), ISBN 1-56592-049-X ;

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

9 / 262

Introduction

bibliographie

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 ; Olagnon Michel, Traitement de donnes numriques avec Fortran 90,

Masson, 1996, (364 pages), ISBN 2-225-85259-6 ;

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

10 / 262

Introduction

bibliographie

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

Langage Fortran(F95-1)

4 mai 2012

11 / 262

Introduction

documentation

Documentation IBM/SP6 : XL Fortran Language Reference XL Fortran USERs Guide ESSL - Engineering and Scientific Subroutine Library Guide Disponibles sur le serveur Web IDRIS ladresse :

http://www.idris.fr/su/Scalaire/vargas/doc-ibm.html Documentation IDRIS IBM/SP6 :


descriptif matriel et logiciel, supports de cours, FAQ,

Disponibles sur le serveur Web IDRIS ladresse :

http://www.idris.fr/su/Scalaire/vargas 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/choix_doc.html
Fortran Market Index :

http://www.swcp.com/~walt/
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 Langage Fortran(F95-1) 4 mai 2012 12 / 262

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

13 / 262

Gnralits

Entres-Sorties Procdures Common Include

10

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

14 / 262

Gnralits

Bases de numration

Soit un nombre n dont lcriture en base b est de la forme : (up up 1 ....u1 u0 )b avec : i {0, 1, ..., p } 0 ui < b La valeur du nombre n en base 10 est : n10 =
p 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 chires 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 dnir.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

15 / 262

Gnralits

Bases de numration

Lcriture dun nombre en octal seectuera laide des chires de 0 7. Lcriture dun nombre en hexadcimal seectuera laide des chires 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 seectuer 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

Langage Fortran(F95-1)

4 mai 2012

16 / 262

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 sut 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

Langage Fortran(F95-1)

4 mai 2012

17 / 262

Gnralits

Reprsentation des donnes

Reprsentation des rels


Un nombre rel ou ottant est caractris par :
1 2 3

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 2e 127


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 18 / 262

Gnralits

Reprsentation des donnes

Ce type de reprsentation permet de reprsenter les nombres : 1.21038 |r | 3.410+38 avec 6 chires signicatifs. 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 2e 1023 Ce type de reprsentation permet de reprsenter les nombres : 2.210308 |r | 1.810+308 avec 15 chires signicatifs.
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 19 / 262

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 nalement :


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

On en dduit alors le motif binaire suivant : 01000001001001100110011001100110 = 4126666616


exposant 130 mantisse (23bits )

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

20 / 262

Gnralits

Reprsentation des donnes

Reprsentation du rel 10,4 sur 64 bits

Pour le codage de ce rel sur 64 bits il sut 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 0 100000000100100110011001100110011001100110011001100110011001100
exposant 1026 mantisse (52bits )

4024CCCCCCCCCCCC16

Remarque :
En vrit, le motif en mmoire est 4024CCCCCCCCCCCD car lors de la troncature le 1er

bit perdu pour valeur 1.


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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

21 / 262

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 = = 3FC0000016 BFC0000016 = = +1.510 -1.510

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

22 / 262

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

Langage Fortran(F95-1)

4 mai 2012

23 / 262

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 dirents 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

Langage Fortran(F95-1)

4 mai 2012

24 / 262

Gnralits

Reprsentation des donnes

Tab. 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)
Anne Fouilloux Patrick Corde

table des codes ASCII des caractres 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 : ; < = > ? 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
4 mai 2012 25 / 262

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

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

Langage Fortran(F95-1)

Gnralits

Reprsentation des donnes

Tab. 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 [ \ ] _
Anne Fouilloux Patrick Corde

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
4 mai 2012 26 / 262

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

Langage Fortran(F95-1)

Gnralits

Jeu de caractres

Jeu de caractres

26 lettres de lalphabet ; chires 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

Langage Fortran(F95-1)

4 mai 2012

27 / 262

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 direntes units de programme sont :
1 2

le programme principal ; les sous-programmes :


de type subroutine ; de type function.

3 4

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

Langage Fortran(F95-1)

4 mai 2012

28 / 262

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

Langage Fortran(F95-1)

4 mai 2012

29 / 262

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 xe , considr maintenant comme obsolte dont la structure dune ligne est :
1 2 3

zone tiquette (colonnes 1 5) ; zone instruction (colonnes 7 72) ; colonne suite (colonne 6)

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

30 / 262

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 sut 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 xe, les lignes qui commencent par C, c, * ou ! en colonne 1 sont des commentaires.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

31 / 262

Dclarations

Introduction Gnralits Dclarations Identicateurs Dirents 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 Langage Fortran(F95-1) 4 mai 2012 32 / 262

Dclarations

Tableaux Entres-Sorties Procdures Common Include

10

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

33 / 262

Dclarations

Identicateurs

Un identicateur permet de donner un nom :


une variable ; une constante ; une procdure.

Il est dni par :


une suite de caractres alphanumriques (lettres non accentues, chires,

underscore ) ;
le premier caractre doit tre une lettre ; la longueur est limite 31 caractres ; on ne distingue pas les lettres majuscules des minuscules. Exemple

compteur Compteur fin_de_fichier montant_annee_1993

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

34 / 262

Dclarations

Dirents 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 prdnis Mot cl. INTEGER CHARACTER LOGICAL REAL DOUBLE PRECISION COMPLEX Remarque : la prcision dun rel simple est de 7 chires dcimaux signicatifs alors que celle dun double est de 15. Type : : : : : : entier caractre deux valeurs .TRUE., .FALSE. rel simple prcision rel double prcision complexe simple prcision

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

35 / 262

Dclarations

Dirents types

Attributs

Chaque type peut tre surcharg dattributs dont voici un extrait : Attributs Attribut PARAMETER DIMENSION SAVE EXTERNAL INTRINSIC : : : : : Signication constante symbolique taille dun tableau objet statique procdure externe procdure intrinsque

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

36 / 262

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

Langage Fortran(F95-1)

4 mai 2012

37 / 262

Dclarations

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

Langage Fortran(F95-1)

4 mai 2012

38 / 262

Dclarations

Instruction IMPLICIT NONE

Par dfaut, les variables dont lidenticateur 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

Langage Fortran(F95-1)

4 mai 2012

39 / 262

Dclarations

Constantes littrales

une suite de chires en base 10, une suite de chires en base 2 encadre par des quotes, le tout prcd du caractre

B,
une suite de chires en base 8 encadre par des quotes, le tout prcd du caractre

O,
une suite de chires 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 gurer que dans les instructions dinitialisation de type DATA.
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 40 / 262

Dclarations

Constantes littrales

Une constante de type REAL doit obligatoirement comporter :


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

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

41 / 262

Dclarations

Constantes littrales

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

42 / 262

Dclarations

Constantes littrales

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

Langage Fortran(F95-1)

4 mai 2012

43 / 262

Dclarations

Constantes littrales

Une constante chanes de caractres est une suite de caractres encadre par le dlimiteur ou bien " . Si parmi la suite des caractres gure 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 spcie le nom de la variable suivi entre parenthses dun couple dentiers n:m indiquant les rangs de dbut et de n dextraction.
Exemple CHARACTER ( LEN =10) :: ch ch = " Bonjour " ; ch (4:7) = " soir "

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

44 / 262

Dclarations

Initialisation

Une initialisation pourra seectuer 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

Langage Fortran(F95-1)

4 mai 2012

45 / 262

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 ./


Langage Fortran(F95-1) 4 mai 2012 46 / 262

Anne Fouilloux Patrick Corde

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 181 du support.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

47 / 262

Dclarations

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

Langage Fortran(F95-1)

4 mai 2012

48 / 262

Dclarations

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 )[,..., (vi 1 , vi ),...] o les vi sont des scalaires (variables simples ou lments de tableaux).

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

49 / 262

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

Langage Fortran(F95-1)

4 mai 2012

50 / 262

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 Langage Fortran(F95-1) 4 mai 2012 51 / 262

Oprateurs et expressions

Introduction Gnralits Dclarations Oprateurs et expressions Oprateurs arithmtiques


Les oprateurs Conversion implicite

Oprateurs relationnels Oprateurs logiques


Les tables de vrit

Oprateur de concatnation Oprateur daectation


syntaxe gnrale Rgles de typage

Priorit des Oprateurs


5

Structures de contrle Tableaux

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

52 / 262

Oprateurs et expressions

Entres-Sorties Procdures Common Include

10

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

53 / 262

Oprateurs et expressions

Oprateurs arithmtiques

Les oprateurs

Tab. 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

Langage Fortran(F95-1)

4 mai 2012

54 / 262

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

Langage Fortran(F95-1)

4 mai 2012

55 / 262

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 99/100 7/3 (100*9)/5 (9/5)*100 99./100 99./100d0 (1.,2.)+1 Valeur 0 2 180 100 0.99 0.99d0 (2.,2.) Type du rsultat INTEGER INTEGER INTEGER INTEGER REAL DOUBLE PRECISION COMPLEX

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

56 / 262

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 seectuera ensuite dans le type DOUBLE PRECISION, le rsultat tant nalement 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 gurent 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

Langage Fortran(F95-1)

4 mai 2012

57 / 262

Oprateurs et expressions

Oprateurs relationnels

Tab. 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

Langage Fortran(F95-1)

4 mai 2012

58 / 262

Oprateurs et expressions

Oprateurs logiques

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

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

l .true. .false. Tab. 7: l1 .true. .true. .false. .false. l2 .true. .false. .true. .false. l1 .AND.l2 .true. .false. .false. .false.

.NOT.l .false. .true.

Autres oprateurs

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

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

l1 .NEQV.l2 .false. .true. .true. .false.


4 mai 2012 59 / 262

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

Oprateurs et expressions

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 aecte, elle est complte laide du caractre espace ; reportez-vous la page 227 pour plus dinformations concernant la procdure TRIM utilise dans lexemple ci-dessus.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

60 / 262

Oprateurs et expressions

Oprateur daectation

variable = expression o expression est une expression arithmtique, logique ou relationnelle.


une valeur de type CHARACTER ne peut pas tre aecte une variable numrique ou

vice-versa,
une valeur de type INTEGER peut tre aecte une variable de type REAL, une valeur de type REAL peut galement tre aecte 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 x = 5 n = 0.9999 m = -1.9999 Interprtation x = 5.0 n = 0 m = -1

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

61 / 262

Oprateurs et expressions

Priorit des Oprateurs

Tab. 8:

Ordre de priorit des oprateurs

Oprateur ** * et / + et // <, <=, == /=, >, >= .NOT. .AND. .OR. .EQV. et .NEQV.

Associativit DG GD GD GD GD G G G G D D D D

En supposant dans les expressions suivantes, les variables a, b, c, d de type REEL et e, f, g de type LOGICAL : Expression 2**3**2 5.+4.*9.**2 e.OR.f.AND.g a**b+c.GT.d.AND.e
Anne Fouilloux Patrick Corde

Interprtation 2**(3**2) = 512 5.+(4.*(9.**2)) = 329. e.OR.(f.AND.g) (((a**b)+c).GT.d).AND.e


Langage Fortran(F95-1) 4 mai 2012 62 / 262

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 Langage Fortran(F95-1) 4 mai 2012 63 / 262

Structures de contrle

10

Include

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

64 / 262

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 gurer 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 simplie en : IF (exp) instruction
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 65 / 262

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 -40 . 0 )* 1 5 0 .0 * 1. 5 ELSE A = ( HRS -50 . 0 )* 1 5 0 .0 * 2. 0 END IF END PROGRAM structure_if
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 66 / 262

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

Langage Fortran(F95-1)

4 mai 2012

67 / 262

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

Langage Fortran(F95-1)

4 mai 2012

68 / 262

Structures de contrle

Les itrations

Linstruction GOTO permet deectuer un branchement un endroit particulier du code : GOTO tiquette Cette instruction est viter car elle peut gnrer des programmes illisibles et diciles 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

Langage Fortran(F95-1)

4 mai 2012

69 / 262

Structures de contrle

Les itrations

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


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

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

70 / 262

Structures de contrle

Les itrations

1re forme : DO indx

contrle_de_boucle est de la forme : variable = expr1 , expr2 [,expr3 ] avec :


variable est une variable 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

Langage Fortran(F95-1)

4 mai 2012

71 / 262

Structures de contrle

Les itrations

2re forme : DO WHILE

contrle_de_boucle est de la forme : WHILE (expression) avec expression de type scalaire logique. Le corps de la boucle est excut tant que lexpression est vraie. Remarque : pour pouvoir sortir de la boucle, il faut que expression puisse prendre la valeur .FALSE. dans le bloc.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

72 / 262

Structures de contrle

Les itrations

Sommation de la srie 1/n2 jusqu ce que le terme gnral soit infrieur n1 somme partielle courante :
Exemple PROGRAM it er ation _w hi l e INTEGER DOUBLE PRECISION DOUBLE PRECISION , PARAMETER LOGICAL

fois la

:: :: :: ::

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

Langage Fortran(F95-1)

4 mai 2012

73 / 262

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. bloc est de la forme :
bloc_1 IF ( expression ) EXIT bloc_2

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

Langage Fortran(F95-1)

4 mai 2012

74 / 262

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 DO xlast = x x = 0.5 * ( xlast + valeur / xlast ) IF ( ABS (x - xlast )/ x < tolerance ) EXIT END DO END PROGRAM iteratio n_exit ! valeur initiale ( diff . 0)

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

75 / 262

Structures de contrle

Les itrations

Instruction CYCLE

bloci peut aussi contenir une instruction CYCLE : IF (expression) CYCLE CYCLE permet dabandonner le traitement de litration courante et de passer la suivante. L aussi, linstruction IF peut tre remplace par une instruction de type SELECT CASE.
Exemple PROGRAM it er ation _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 Langage Fortran(F95-1) 4 mai 2012 76 / 262

Tableaux

Introduction Gnralits Dclarations Oprateurs et expressions Structures de contrle Tableaux Dclaration Dnitions (rang, prol, tendue) Initialisation Le symbole "="
Le constructeur de vecteurs Linstruction DATA

Manipulation de tableaux
Expressions de type tableau

Sections de tableaux
7

Entres-Sorties

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

77 / 262

Tableaux

Procdures Common Include

10

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

78 / 262

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 qui peut tre spcie laide :


dune constante entire (littrale ou symbolique) ; dans ce cas, la borne infrieure du

tableau est 1,
dune expression de la forme cste1 :cste2 avec cste1 , cste2 des constantes entires

telles que cste1 <= cste2 , liste_tab est une liste de tableaux.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

79 / 262

Tableaux

Dclaration

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

Remarque : les dimensions dun tableau peuvent aussi tre spcies 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

Langage Fortran(F95-1)

4 mai 2012

80 / 262

Tableaux

Dnitions (rang, prol, 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 prol (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 prol.
Deux tableaux sont dits conformants sils ont le mme prol.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

81 / 262

Tableaux

Dnitions (rang, prol, 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 prol 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

Langage Fortran(F95-1)

4 mai 2012

82 / 262

Tableaux

Dnitions (rang, prol, 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

Langage Fortran(F95-1)

4 mai 2012

83 / 262

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

Langage Fortran(F95-1)

4 mai 2012

84 / 262

Tableaux

Initialisation

Un constructeur de vecteur est un vecteur de scalaires dont les valeurs sont encadres par les caractres (/ et /) : tableau = (/ expr1 , expr2 , ..., exprn /)
tableau 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 une variable INTEGER correspondant lindice de cette boucle et m1 , m2 , m3 des constantes entires dlimitant la boucle (voir boucle DO). Le constructeur et le tableau tableau doivent tre conformants.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

85 / 262

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

Langage Fortran(F95-1)

4 mai 2012

86 / 262

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 spcis au moyen dune boucle DO implicite : (tab(i), i = m1 ,m2 [,m3 ]).
Exemple IMPLICIT NONE INTEGER REAL , DIMENSION (20) INTEGER , DIMENSION (10) REAL , DIMENSION (2 ,3) DATA DATA DATA DATA

:: i , j :: A , B :: ints :: MAT

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

Langage Fortran(F95-1)

4 mai 2012

87 / 262

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

Langage Fortran(F95-1)

4 mai 2012

88 / 262

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

Langage Fortran(F95-1)

4 mai 2012

89 / 262

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 Langage Fortran(F95-1) 4 mai 2012 90 / 262

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

Langage Fortran(F95-1)

4 mai 2012

91 / 262

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 chier Fichier interne


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 92 / 262

Entres-Sorties

Instructions de positionnement Instruction INQUIRE Formats BOZ Units standards Instruction FORMAT Mots cls END=, ERR=
8

Procdures Common Include

10

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

93 / 262

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 chier qui possde un nom. Lunit de transmission entre la mmoire et le priphrique sappelle le bloc. Il permet deectuer le traitement en passant par une zone intermdiaire dite zone tampon (buer ) 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

Langage Fortran(F95-1)

4 mai 2012

94 / 262

Entres-Sorties

Introduction

Lexploitation dun chier 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 chier un numro dunit logique : cest celui-ci que lon indiquera

par la suite pour toute opration de lecture-criture,


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

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

95 / 262

Entres-Sorties

Accs squentiel

Accs squentiel

On dit quun chier est squentiel lorsquil est ncessaire davoir trait les enregistrements prcdant celui auquel on dsire accder. Pour un chier en lecture le paramtre IOSTAT de linstruction READ permet notamment de grer la n de chier ; 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 n de chier ou une n denregistrement a t rencontre.

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

96 / 262

Entres-Sorties

Accs squentiel

Fichier binaire squentiel

On appelle chier binaire un chier dans lequel on stocke les informations telles quelles sont reprsentes en mmoire. Cest au moment de louverture du chier que lon indique le type de chier 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

Langage Fortran(F95-1)

4 mai 2012

97 / 262

Entres-Sorties

Accs squentiel

On demande louverture du chier dont le nom est data_bin_seq. Cest un chier binaire squentiel (unformatted, sequential) que lon dsire lire depuis le dbut (rewind). Ce chier 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 chier. En cas derreur lors de louverture dun chier, 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 chier. Ce mme mot-cl est prcis au sein de linstruction READ. Il rfrence la mme variable ios qui retera ltat de la lecture une fois celle-ci eectue. Elle est utilise pour notamment grer la n de chier.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

98 / 262

Entres-Sorties

Accs squentiel

Fichier texte squentiel

Dans un chier 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

chier. 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

Langage Fortran(F95-1)

4 mai 2012

99 / 262

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

Langage Fortran(F95-1)

4 mai 2012

100 / 262

Entres-Sorties

Accs squentiel

Exemple PROGRAM t e x te_ s e qu e n ti el 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 xte _ s eq u e n t i e l

i, r

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

101 / 262

Entres-Sorties

Accs squentiel

Dans cet exemple, on demande louverture du chier dont le nom est data_txt_seq. Cest un chier 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 spci 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 chires en partie dcimale,


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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

102 / 262

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

Langage Fortran(F95-1)

4 mai 2012

103 / 262

Entres-Sorties

Accs squentiel

Format ddition I en lecture

Dans ce qui suit le caractre ^ reprsente lespace. Les direntes entres prsentes sont supposes gurer dans un chier 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^^

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

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

104 / 262

Entres-Sorties

Accs squentiel

Formats ddition F, E et D en lecture

Ce format la forme gnrale : Fw.d , Ew.d ou bien Dw.d . Le nombre rel lire peut tre soit en notation virgule xe, soit exponentielle avec, dans ce dernier cas, lexposant prx de la lettre E ou D. Le point dcimal peut ne pas gurer :
sil est spci alors le nombre indiqu par d est ignor, cest le nombre de dcimales

gurant 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

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


4 mai 2012 105 / 262

Langage Fortran(F95-1)

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

Aectations x=2.718281 x=2.718281 x=2.718281 x=2.718281 x=2.718281 x=2.718281 x=2.718281 x=0.000271

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

106 / 262

Entres-Sorties

Accs squentiel

Format ddition L en lecture

Ce format 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^^^^^^

Aectations l1=.TRUE., l2=.FALSE. l1=.TRUE., l2=.FALSE. l1=.TRUE., l2=.FALSE.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

107 / 262

Entres-Sorties

Accs squentiel

Format ddition A en lecture

Ce format 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 spcie lors de la dclaration de la chane

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

108 / 262

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
BACH^^^^BACH^^ MOZARTHAENDEL^ MOZARTHAENDEL^

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

109 / 262

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 chires 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 chires 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

Langage Fortran(F95-1)

4 mai 2012

110 / 262

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

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

111 / 262

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

Langage Fortran(F95-1)

4 mai 2012

112 / 262

Entres-Sorties

Accs squentiel

En ce qui concerne les formats1 dcriture I, B, O, Z et F, lorsque le gabarit de la zone rceptrice est insusant 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 n de chapitre.


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 113 / 262

Entres-Sorties

Accs squentiel

Format ddition E et D en criture

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


S0.XXXXXXXESXX, S0.XXXXXXXDSXX <--d--> <--d--> <-----w------> <-----w------>

Le caractre S indique une position pour le signe. Un facteur dchelle peut prcder ce type de format. Il scrit sous la forme kP et permet dditer le nombre avec k chires avant le point dcimal (modie en consquence la valeur de lexposant). Si -d < k 0, la partie dcimale sera constitue de |k| zros suivis de d-|k| chires signicatifs. Si 0 < k < d+2, le nombre en sortie sera constitu de k chires signicatifs avant le point dcimal et de d-k+1 chires signicatifs 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 sut de prciser le facteur 0P.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

114 / 262

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

Langage Fortran(F95-1)

4 mai 2012

115 / 262

Entres-Sorties

Accs squentiel

Il existe deux variantes du format E qui correspondent aux descripteurs EN et ES. Le facteur dchelle kP 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

Langage Fortran(F95-1)

4 mai 2012

116 / 262

Entres-Sorties

Accs squentiel

Le descripteur ES permet la sortie dun rel en notation dite scientique. 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

Langage Fortran(F95-1)

4 mai 2012

117 / 262

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

Langage Fortran(F95-1)

4 mai 2012

118 / 262

Entres-Sorties

Accs squentiel

Format ddition L en criture

Ce format 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 ...

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

119 / 262

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 spcie la dclaration qui

indique la largeur du champ en sortie.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

120 / 262

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

Langage Fortran(F95-1)

4 mai 2012

121 / 262

Entres-Sorties

Accs squentiel

Format ddition : Litteral string

Si une constante littrale de type chane de caractres est spcie 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

Langage Fortran(F95-1)

4 mai 2012

122 / 262

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

Langage Fortran(F95-1)

4 mai 2012

123 / 262

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
Exemple

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

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

Entres ^8^2^4^^

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

124 / 262

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 en sortie : criture du caractre newline . Exemple


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

Aectations i=1756,j=1791

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

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


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 125 / 262

Entres-Sorties

Accs squentiel

Facteur de rptition

Lorsquune liste de descripteurs identiques gure 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

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

126 / 262

Entres-Sorties

Accs squentiel

Rexploration dun format

Lensemble des variables spcies 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

Langage Fortran(F95-1)

4 mai 2012

127 / 262

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 eectue :
"( 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

Langage Fortran(F95-1)

4 mai 2012

128 / 262

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

Langage Fortran(F95-1)

4 mai 2012

129 / 262

Entres-Sorties

Accs squentiel

Format libre

En Fortran il existe un format implicite appel format libre (list-directed formatting ). Dans linstruction READ/WRITE, on spcie 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 aectes qui dtermine la conversion eectuer. Les caractres interprts comme des sparateurs sont :
la virgule (,) ; le blanc (espace).

Une chane de caractres contenant un caractre sparateur doit tre dlimite soit par des quotes () soit par des guillemets ("). En entre, plusieurs valeurs identiques peuvent tre regroupes laide dun facteur de rptition sous la forme n*valeur.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

130 / 262

Entres-Sorties

Accs squentiel

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. Une n denregistrement (newline ) a le mme eet 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 modi.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

131 / 262

Entres-Sorties

Accs squentiel

Exemple INTEGER i /100/ , & j /200/ , & k /300/ REAL t (3) 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 Aectations i=150 j=260 t=(/ 2.718,2.718,2.718 /) c=(2.,3.) ch=Wolfgang Amadeus M

Entres 150 260,, 3*2.718 (^2. ,^3.^)^^^Wolfgang^ Amadeus Mozart

Sorties ^150^260^300^(2.000000000,3.000000000)^Wolfgang ^2.717999935^2.717999935^2.717999935


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 132 / 262

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 seectue 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.

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) respecte le format suivant : &nom_liste liste daectations /

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

133 / 262

Entres-Sorties

Accs squentiel

La liste daectations concerne les variables de la namelist qui peuvent apparatre dans nimporte quel ordre, certaines pouvant tre omises. Les direntes aectations sont spares par des caractres sparateurs (, ou blancs). Le caractre / indique la n 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 dnir. Dans linstruction READ/WRITE, la namelist est indique laide du paramtre NML= ( la place de FMT=). Lutilisation des namelist est un moyen trs commode deectuer des entres-sorties sans avoir dnir de format.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

134 / 262

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" / Aectations 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

Langage Fortran(F95-1)

4 mai 2012

135 / 262

Entres-Sorties

Accs direct

Accs direct

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

caractres pour les chiers textes, dpend du processeur pour les chiers 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 spci 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

Langage Fortran(F95-1)

4 mai 2012

136 / 262

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 Langage Fortran(F95-1) 4 mai 2012 137 / 262

Entres-Sorties

Accs direct

Le chier dont le nom est data_bin_direct est connect lunit logique numro 1. Cest un chier 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 chier 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

Langage Fortran(F95-1)

4 mai 2012

138 / 262

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 Langage Fortran(F95-1) 4 mai 2012 139 / 262

Entres-Sorties

Accs direct

On a adapt lexemple prcdent un chier 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 chier texte accs direct au moyen dun format libre, un chier 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 chier, 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

Langage Fortran(F95-1)

4 mai 2012

140 / 262

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 ag.
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

Langage Fortran(F95-1)

4 mai 2012

141 / 262

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 enr egist reme nt 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 * , " Enregistre ment " , rang , " indfini . " end if end do close (1) end program dir

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

142 / 262

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 chiers binaires en accs direct), cette nouvelle forme de linstruction INQUIRE2 , introduite par la norme Fortran 90, permet de la calculer en saranchissant de lunit ;
linstruction call random_number( matrice ) fait appel la procdure intrinsque

Fortran 90 RANDOM_NUMBER qui valorise le tableau transmis laide de nombres alatoires gnrs dans lintervalle [0., 1.].

cette instruction est dtaille plus loin.


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 143 / 262

Entres-Sorties

Fichier temporaire

Fichier temporaire

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

144 / 262

Entres-Sorties

Destruction dun chier

Destruction dun chier

Linstruction CLOSE admet le paramtre mot-cl STATUS qui par dfaut (pour un chier non temporaire) prend la valeur "KEEP" permettant ainsi de conserver le chier aprs fermeture. Si on dsire le supprimer il sura 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

Langage Fortran(F95-1)

4 mai 2012

145 / 262

Entres-Sorties

Fichier interne

Fichier interne

On appelle chier interne un chier dont les enregistrements sont en mmoire. Ce type de chier induit des changes entre zones de la mmoire et non plus entre un support externe et la mmoire. Ces chiers sont pr-connects : il ny a donc aucune ouverture ni fermeture eectuer. 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 susante. Lors dune lecture, la n de chier est atteinte lorsquon essaie daccder aux caractres situs au-del de la chane qui fait rfrence lenregistrement.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

146 / 262

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 chier interne.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

147 / 262

Entres-Sorties

Fichier interne

Voici un autre exemple dans lequel on trate une centaine de chiers 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

Langage Fortran(F95-1)

4 mai 2012

148 / 262

Entres-Sorties

Fichier interne

Exemple
PROGRAM fi chi er_in tern e 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 fichier_in te r ne

Dans cet exemple on lit un chier en ne traitant que les enregistrements constitus de rels et en ignorant tous les autres.
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 149 / 262

Entres-Sorties

Instructions de positionnement

Instructions de positionnement

Toute opration de lecture-criture dans un chier est eectue par rapport la position courante dans ce chier. louverture celle-ci peut tre prcise laide du paramtre POSITION. Dans un chier 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 modier la position :
BACKSPACE force la position au dbut de lenregistrement prcdent, REWIND force la position au dbut du chier, ENDFILE crit un enregistrement de type n de chier. Il est alors ncessaire

dexcuter ensuite lune des deux instructions prcdentes. Ces instructions admettent en paramtre le numro de lunit logique auquel le chier est connect.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

150 / 262

Entres-Sorties

Instructions de positionnement

Exemple : troncature contrle dun chier

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 chier dont le nom est data_txt_seq est ouvert avec un positionnement en n de chier (POSITION="append"). Aprs criture dun enregistrement, on se repositionne en tte (REWIND).
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 151 / 262

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 chier 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

Langage Fortran(F95-1)

4 mai 2012

152 / 262

Entres-Sorties

Instruction INQUIRE

Instruction INQUIRE

Linstruction dinterrogation INQUIRE permet de rcuprer un certain nombre dinformations concernant un chier ou un numro dunit logique. Elle permet par exemple de tester si un chier 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 chier.
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

Langage Fortran(F95-1)

4 mai 2012

153 / 262

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 chier data_txt_seq existe).

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

154 / 262

Entres-Sorties

Formats BOZ

Formats BOZ Les spcicateurs 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 Langage Fortran(F95-1) 4 mai 2012 155 / 262

Entres-Sorties

Units standards

Units standards

Les chiers 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

Langage Fortran(F95-1)

4 mai 2012

156 / 262

Entres-Sorties

Instruction FORMAT

Instruction FORMAT

Le format ddition peut tre dni en dehors des instructions dentres-sorties READ/WRITE. Dans ce cas le paramtre FMT= est positionn un numro (tiquette) renvoyant une instruction de dnition 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 chier squentiel est facultative. dfaut, louverture du chier est faite implicitement lors de lexcution de la premire instruction dentre-sortie. Le compilateur attribue au chier 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

Langage Fortran(F95-1)

4 mai 2012

157 / 262

Entres-Sorties

Mots cls END=, ERR=

Mots cls END=, ERR=

Le paramtre END de linstruction READ ore un autre moyen de tester une n de chier 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 chier 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 chier format, enregistrement inexistant pour un chier accs direct ...).
Exemple 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 . "

2 1

Remarque : au clavier, la saisie du caractre Ctrl-D aprs le caractre newline (touche Enter ) indique une n de chier.
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 158 / 262

Entres-Sorties

Mots cls END=, ERR=

Mots cls END=, ERR=

Lors dune lecture, lorsquune erreur se produit (problme de format sagissant dun chier texte, dtection dune n de chier ...) 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 n de chier 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

Langage Fortran(F95-1)

4 mai 2012

159 / 262

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

Langage Fortran(F95-1)

4 mai 2012

160 / 262

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

Langage Fortran(F95-1)

4 mai 2012

161 / 262

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 identicateurs
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 162 / 262

Procdures

Procdures intrinsques
9

Common Include

10

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

163 / 262

Procdures

Arguments

Arguments

Trs souvent, dans un programme, on a besoin deectuer un mme traitement plusieurs fois avec des valeurs direntes. La solution est de dnir ce traitement une seule fois laide dune unit de programme de type procdure (SUBROUTINE ou FUNCTION). Les units de programmes dsirant eectuer 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 seectue 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

Langage Fortran(F95-1)

4 mai 2012

164 / 262

Procdures

Arguments

Schma passage arguments

Fig. 1: Schma passage arguments

Procdure appelante
arguments dappel
1 2 3 100

Procdure appele
arguments muets

real :: tab(100)
18 32.

integer :: i real :: x

real t(100) integer m real y

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

165 / 262

Procdures

Subroutines

Subroutines

Lappel dune procdure de type SUBROUTINE seectue 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

Langage Fortran(F95-1)

4 mai 2012

166 / 262

Procdures

Fonctions

Fonctions

Un autre moyen de transmettre des valeurs une unit de programme est lutilisation dune procdure de type FUNCTION. la dirence dune SUBROUTINE, une FUNCTION retourne une valeur ; celle-ci est donc type. De plus, son appel seectue 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 eectuer ce retour avant la n de la dnition de la fonction. Dans la procdure appelante lexpression correspondant lappel de la fonction est remplace par la valeur retourne.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

167 / 262

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

Langage Fortran(F95-1)

4 mai 2012

168 / 262

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 spciant 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

Langage Fortran(F95-1)

4 mai 2012

169 / 262

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

Langage Fortran(F95-1)

4 mai 2012

170 / 262

Procdures

Arguments de type tableau

Arguments de type tableau Lorsque lon transmet un tableau en argument il est commode de transmettre galement ses dimensions an 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

Langage Fortran(F95-1)

4 mai 2012

171 / 262

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 dirents 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

Langage Fortran(F95-1)

4 mai 2012

172 / 262

Procdures

Arguments de type tableau

Arguments de type tableau

Exemple
program tai ll e_im pl ici te 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 ail l e_i mp l ic it e 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

Langage Fortran(F95-1)

4 mai 2012

173 / 262

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

Langage Fortran(F95-1)

4 mai 2012

174 / 262

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 Langage Fortran(F95-1) 4 mai 2012 175 / 262

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 dnitions 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

Langage Fortran(F95-1)

4 mai 2012

176 / 262

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

Langage Fortran(F95-1)

4 mai 2012

177 / 262

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

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

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

178 / 262

Procdures

Dure de vie et visibilit des identicateurs

Dure de vie et visibilit des identicateurs

On appelle dure de vie dun identicateur 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 dnie,


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 spcication de liste de

variables indique que toutes les variables de cette unit sont permanentes,
une compilation eectue 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

Langage Fortran(F95-1)

4 mai 2012

179 / 262

Procdures

Dure de vie et visibilit des identicateurs

Dure de vie et visibilit des identicateurs 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

Langage Fortran(F95-1)

4 mai 2012

180 / 262

Procdures

Procdures intrinsques

Procdures intrinsques

Le compilateur Fortran dispose dune bibliothque de procdures couvrant dirents domaines : mathmatique, conversion de type, manipulation de chanes de caractres, comparaison de chanes de caractres, . . . Pour une procdure donne, le nom dappel dire suivant le type des arguments transmis. Un nom gnrique permet de saranchir 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

Langage Fortran(F95-1)

4 mai 2012

181 / 262

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
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 182 / 262

Common

Rgles et restrictions
10

Include

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

183 / 262

Common

Linstruction COMMON

Linstruction COMMON

Linstruction COMMON permet le regroupement de zones mmoires pouvant tre partages par direntes 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 direntes 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

Langage Fortran(F95-1)

4 mai 2012

184 / 262

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

Langage Fortran(F95-1)

4 mai 2012

185 / 262

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

Langage Fortran(F95-1)

4 mai 2012

186 / 262

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 dni 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

Langage Fortran(F95-1)

4 mai 2012

187 / 262

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 dnir plusieurs units BLOCK DATA, chacune regroupant les COMMON qui ont un lien logique entre eux.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

188 / 262

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

Langage Fortran(F95-1)

4 mai 2012

189 / 262

Common

Common tiquet

Instruction SAVE et COMMON

Les valeurs des variables dun COMMON tiquet deviennent indnies 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 spcier lattribut SAVE si le COMMON a t dclar dans le programme

principal.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

190 / 262

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

Langage Fortran(F95-1)

4 mai 2012

191 / 262

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 dirents, 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 dirents,
au sein dune mme unit de programme, un bloc COMMON (tiquet ou non) peut

tre rfrenc plusieurs fois : les direntes listes de variables sont alors ajoutes les unes aux autres.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

192 / 262

Common

Rgles et restrictions

Rgles et restrictions

un bloc COMMON peut tre dcoup diremment dune unit de programme une

autre, cest--dire rfrenc laide de variables de types dirents 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 dirents, avoir pour eet 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

Langage Fortran(F95-1)

4 mai 2012

193 / 262

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 direntes 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 Langage Fortran(F95-1) 4 mai 2012 194 / 262

Include

Introduction Gnralits Dclarations Oprateurs et expressions Structures de contrle Tableaux Entres-Sorties Procdures Common Include La directive INCLUDE

10

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

195 / 262

Include

La directive INCLUDE

La directive INCLUDE

Elle demande au compilateur dinclure un chier 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

Langage Fortran(F95-1)

4 mai 2012

196 / 262

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 chier 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 chier 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 chier inclure peut tre prcise laide de loption -I du systme de compilation.
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 197 / 262

Annexe A : entres-sorties - syntaxes

11

Annexe A : entres-sorties - syntaxes Annexe B : procdures intrinsques Annexe C : aspects obsoltes Annexe D : systme de compilation Annexe E : exercices

12

13

14

15

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

198 / 262

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 de de de de de

caractres caractres caractres caractres caractres caractres caractres caractres caractres

UNIT : numro de lunit logique sur laquelle on dsire connecter le chier, IOSTAT : entier valoris une fois louverture eectue. Il est nul si lopration sest

bien passe, non nul sinon,


FILE : nom du chier ouvrir,
Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 199 / 262

Annexe A : entres-sorties - syntaxes

Instruction OPEN

STATUS : tat du chier avant louverture, OLD : le chier doit exister, NEW : le chier ne doit pas exister, il sera cr, UNKNOWN : tat dpendant du compilateur, REPLACE : si le chier nexiste pas, il est cr et hrite de ltat "OLD", sinon, il est dtruit et un nouveau chier est cr, SCRATCH : un chier temporaire anonyme est cr, il sera dtruit la n du programme ou au moment du CLOSE. ACCESS : mode daccs au chier, DIRECT : accs direct, SEQUENTIAL : accs squentiel.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

200 / 262

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 chiers textes et dpend du processeur pour les chiers binaires, POSITION : positionnement dans le chier aprs ouverture,
ASIS : positionnement inchang si le chier est dj connect, indni sinon, REWIND : positionnement en tte de chier, APPEND : positionnement en n de chier 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

Langage Fortran(F95-1)

4 mai 2012

201 / 262

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 spcie 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 susante pour permettre la valorisation des variables de la liste.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

202 / 262

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 chier est connect, FMT : format de conversion pour les chiers textes spci sous forme : dune constante chane de caractres, dune variable chane de caractres, dune tiquette dinstruction FORMAT. NML : nom dune namelist,

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

203 / 262

Annexe A : entres-sorties - syntaxes

Instruction READ

ADVANCE : positionnement partir duquel seectue lentre-sortie suivante : YES enregistrement suivant, NO suite de lenregistrement courant, END : tiquette de linstruction excuter en cas de n de chier, EOR : tiquette de linstruction excuter en cas de n denregistrement, ERR : tiquette de linstruction excuter en cas derreur, IOSTAT : entier valoris une fois lentre-sortie eectue. Il est nul si lopration sest

bien passe. Une valeur positive indique une erreur. Une valeur ngative signale une n de chier dans le cas dun accs squentiel et labsence denregistrement du rang spci si laccs est direct,
REC : numro de lenregistrement traiter pour un chier accs direct, SIZE : entier rcuprant le nombre de caractres traits si la n denregistrement a

t atteinte.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

204 / 262

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 chier est connect, FMT : format de conversion pour les chiers textes spci sous forme : dune constante chane de caractres, dune variable chane de caractres, dune tiquette dinstruction FORMAT. NML : nom dune namelist,

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

205 / 262

Annexe A : entres-sorties - syntaxes

Instruction WRITE

ADVANCE : positionnement partir duquel seectue 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 eectue. Il est nul si lopration sest bien passe, non nul sinon, REC : numro de lenregistrement traiter pour un chier accs direct.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

206 / 262

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

Langage Fortran(F95-1)

4 mai 2012

207 / 262

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

UNIT : numro de lunit logique sur laquelle le chier est connect, ACCESS : mthode daccs
SEQUENTIAL si chier connect pour un accs squentiel, DIRECT si chier connect pour un accs direct, UNDEFINED si chier non connect,

ACTION : type daccs


READ si chier connect en lecture, WRITE si chier connect en criture, READWRITE si chier connect en lecture/criture, UNDEFINED si chier non connect,

BLANK :
NULL si les blancs sont ignors, ZERO si les blancs sont interprts comme des 0, UNDEFINED si le chier nest pas connect en mode format ou bien nest pas connect

du tout,

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

208 / 262

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 chier 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 chier ou lunit logique existe, .false. si le chier ou lunit logique nexiste pas,

FILE : nom du chier pour lequel on souhaite avoir des informations,

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

209 / 262

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

FORM : type daccs


FORMATTED si le chier est connect en mode format, UNFORMATTED si le chier est connect en mode binaire, UNDEFINED si le chier nest pas connect,

FORMATTED :
YES si le traitement du chier en mode format est valide NO si le traitement du chier en mode format nest pas valide, UNKNOWN lorsque le compilateur ne sait pas si le traitement du chier 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 chier connect sil a un nom, sinon valeur indnie,

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

210 / 262

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

NAMED :
.true. si le chier a un nom, .false. si le chier est anonyme,

NEXTREC :
renvoie le numro du prochain enregistrement traiter si le chier est ouvert en accs

direct (1 si aucun enregistrement na dj t trait,


renvoie une valeur indnie si le chier na pas t ouvert en accs direct,

NUMBER : renvoie le numro de lunit logique sur laquelle le chier est connect (-1 sil ne lest pas), OPENED :
.true. si le chier est ouvert, .false. si le chier nest pas ouvert,

PAD :
NO le chier a t ouvert avec le paramtre PAD="NO", YES le chier a t ouvert avec le paramtre PAD="YES" ou bien le chier nest pas

connect,

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

211 / 262

Annexe A : entres-sorties - syntaxes

Instruction INQUIRE

POSITION :

REWIND si chier ouvert avec un positionnement en tte, APPEND si chier ouvert avec un positionnement en n, ASIS si chier ouvert sans changement de la position, UNDEFINED si chier 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 indnie si le chier nexiste pas,

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

212 / 262

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 chier en mode binaire est valide NO si le traitement du chier en mode binaire nest pas valide, UNKNOWN lorsque le compilateur ne sait pas si le traitement du chier 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

Langage Fortran(F95-1)

4 mai 2012

213 / 262

Annexe A : entres-sorties - syntaxes

Instruction CLOSE

CLOSE ( [ UNIT =] u , IOSTAT = ios , STATUS = st )

& &

UNIT : numro de lunit logique du chier fermer, IOSTAT : entier valoris une fois la fermeture eectue. Il est nul si lopration sest

bien passe, non nul sinon, STATUS : tat du chier aprs fermeture,
DELETE : le chier est dtruit aprs fermeture. Cest la valeur par dfaut si louverture

a t faite avec le paramtre STATUS="scratch",


KEEP : le chier est conserv aprs fermeture. Cest la valeur par dfaut si louverture a

t faite avec le paramtre STATUS dirent de "scratch".

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

214 / 262

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

Langage Fortran(F95-1)

4 mai 2012

215 / 262

Annexe B : procdures intrinsques

11

Annexe A : entres-sorties - syntaxes Annexe B : procdures intrinsques Annexe C : aspects obsoltes Annexe D : systme de compilation Annexe E : exercices

12

13

14

15

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

216 / 262

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 n ;

complte gauche par des blancs.


ADJUSTR(Fortran^^) = ^^Fortran

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

217 / 262

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

Langage Fortran(F95-1)

4 mai 2012

218 / 262

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

Langage Fortran(F95-1)

4 mai 2012

219 / 262

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

Langage Fortran(F95-1)

4 mai 2012

220 / 262

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 eectuer 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

Langage Fortran(F95-1)

4 mai 2012

221 / 262

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 deectuer 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 dirence que le dcalage est circulaire et seectue 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

Langage Fortran(F95-1)

4 mai 2012

222 / 262

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 n.


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 Langage Fortran(F95-1) 4 mai 2012 223 / 262

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 eectue 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 gurant 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 Langage Fortran(F95-1) 4 mai 2012 224 / 262

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 n.


TRIM(PICASSO^^^^^) = PICASSO

VERIFY : retourne la position du premier caractre dune chane ne gurant 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 Langage Fortran(F95-1) 4 mai 2012 225 / 262

Annexe C : aspects obsoltes

11

Annexe A : entres-sorties - syntaxes Annexe B : procdures intrinsques Annexe C : aspects obsoltes Annexe D : systme de compilation Annexe E : exercices

12

13

14

15

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

226 / 262

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 (*) ==> se brancher linstruction suivante. Boucles DO pilotes par rels : DO 10 R=1., 5.7, 1.3 (*) Partage dune instruction de n 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.

3 4

Fins de boucles autres que CONTINUE ou END DO

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

227 / 262

Annexe C : aspects obsoltes

Aspects obsoltes

II

ASSIGN et le GO TO assign : (*) ASSIGN 10 TO intvar .... ASSIGN 20 TO intvar .... GO TO intvar ==> SELECT CASE ou IF/THEN/ELSE (*) : aspects obsoltes dclars hors norme par Fortran 95 ASSIGN 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

RETURN multiples :

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

228 / 262

Annexe C : aspects obsoltes

Aspects obsoltes

III

CALL SP1(X,Y,*10,*20) ... 10 ... ... 20 ... ... SUBROUTINE SP1(X1,Y1,*,*) ... RETURN 1 ... RETURN 2 ...

==> SELECT CASE sur la valeur dun argument retourn


9

PAUSE Montez la bande 102423 SVP (*) ==> READ qui attend les donnes FORMAT(9H A viter) (*) ==> Constante littrale : FORMAT( Recommand)

10

(*) : aspects obsoltes dclars hors norme par Fortran 95


Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 229 / 262

Annexe C : aspects obsoltes

Aspects obsoltes Fortran 95

Le "format xe" 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

Langage Fortran(F95-1)

4 mai 2012

230 / 262

Annexe D : systme de compilation

11

Annexe A : entres-sorties - syntaxes Annexe B : procdures intrinsques Annexe C : aspects obsoltes Annexe D : systme de compilation Annexe E : exercices

12

13

14

15

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

231 / 262

Annexe D : systme de compilation

Systme de compilation

La commande f90 permet de gnrer un excutable partir de chiers 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. Enn la dernire composante fait appel au loader qui rcupre les modules objets prcdemment crs et les regroupe pour produire un module excutable. Les direntes units de programme constituant une application Fortran peuvent gurer dans un mme chier ou bien tre rparties dans plusieurs chiers. Ceux-ci doivent tre suxs par .f ou .f90 .

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

232 / 262

Annexe D : systme de compilation

Systme de compilation

Le compilateur suppose que le source est crit avec le format xe si le chier est sux par .f et avec le format libre si le chier est sux par .f90 . Ce format dcriture peut tre explicit au moyen dune option indpendamment du suxe employ. Les chiers correspondant aux modules objets sont suxs par .o . Par dfaut le module excutable est stock dans un chier 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 dirents chiers source constituant lapplication. Les modules objets obtenus sont in ne 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

Langage Fortran(F95-1)

4 mai 2012

233 / 262

Annexe D : systme de compilation

Systme de compilation

Il est possible darchiver les chiers *.o laide de lutilitaire ar dans le but de les regrouper dans un seul chier 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 spcier 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

Langage Fortran(F95-1)

4 mai 2012

234 / 262

Annexe E : exercices

11

Annexe A : entres-sorties - syntaxes Annexe B : procdures intrinsques Annexe C : aspects obsoltes Annexe D : systme de compilation Annexe E : exercices

12

13

14

15

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

235 / 262

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 dnie par : u0 = 1 u1 = 1 ... un+1 = un + un1 La suite (
un+1 un

) converge vers le nombre dOr.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

236 / 262

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 n 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 eectue, on renouvelle lexploration, sinon le tri est termin. Exercice 6 crire un programme permettant deectuer le produit de 2 matrices A et B. Leurs prols seront dnis laide de constantes symboliques. La matrice rsultat C sera imprime lcran ligne par ligne avec linstruction PRINT puis stocke dans un chier binaire que lon nommera exo6.matrice . Exercice 7 Le chier 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 chier musiciens et de stocker les enregistrements lus dans un chier binaire accs direct que lon nommera musiciens.bin .

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

237 / 262

Annexe E : exercices

noncs

Exercice 8 Imprimer lenregistrement du chier musiciens dont le rang est entr au clavier. Son extraction sera eectue partir dun chier temporaire accs direct, image du prcdent. On permettra la saisie de plusieurs rangs. Exercice 9 Les enregistrements des chiers 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 chier musiciens.bin 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 spcis, seectuera par lintermdiaire du chier dindex correspondant au type de date. On orira la possibilit deectuer plusieurs recherches. Exercice 10 Le but de cet exercice est de transformer la matrice stocke dans le chier binaire exo6.matrice . Cette transformation consiste modier chaque lment laide dune fonction paramtrable de la forme y = f (x ). On dnira plusieurs fonctions de ce type. La valeur dun entier lu dans une namelist indiquera la fonction transmettre en argument de la procdure charge deectuer 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 chier binaire exo6.matrice . On se dnira une procdure eectuant le tri (croissant ou dcroissant) des dirents vecteurs au moyen dune procdure interne.

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

238 / 262

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

Langage Fortran(F95-1)

4 mai 2012

239 / 262

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

Langage Fortran(F95-1)

4 mai 2012

240 / 262

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

Langage Fortran(F95-1)

4 mai 2012

241 / 262

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

Langage Fortran(F95-1)

4 mai 2012

242 / 262

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

Langage Fortran(F95-1)

4 mai 2012

243 / 262

Annexe E : exercices

Corrig de lexercice 4

program eratosthene implicit none integer , parameter :: n = 1000 integer , dimension ( n ) :: tab_nombres integer :: imax integer i , j tab_nombres (:) = (/ (i , i =1 , n ) /) imax = int ( sqrt ( real ( n ))) do i =2 , imax if ( tab_nombres ( i ) /= 0 ) then do j = i +1 , n if ( tab_nombres ( j ) /= 0 . and . & mod ( tab_nombres ( j ) , i ) == 0 ) & tab_nombres ( j ) = 0 end do end if 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

Langage Fortran(F95-1)

4 mai 2012

244 / 262

Annexe E : exercices

Corrig de lexercice 4 (autre solution)

program eratosthene implicit none integer , parameter :: n = 1000 logical , dimension ( n ) :: tab_nombres integer :: imax integer i , j tab_nombres (:) = . true . imax = n **0.5 do i =2 , imax if ( tab_nombres ( i ) ) then do j = i +1 , n if ( tab_nombres ( j ) . and . j / i * i == j ) & tab_nombres ( j ) = . false . end do end if 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

Langage Fortran(F95-1)

4 mai 2012

245 / 262

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

Langage Fortran(F95-1)

4 mai 2012

246 / 262

Annexe E : exercices

Corrig de lexercice 6

program pr odu it_ma tric e implicit none integer , parameter :: real , dimension (n , m ) :: real , dimension (m , p ) :: real , dimension (n , p ) :: integer ::

n = 10 , m = 5 , p = 3 a b c i ,j , k A et B & & & & & & & & & &

data

! 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/

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

247 / 262

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 roduit_ma tr i ce

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

248 / 262

Annexe E : exercices

Corrig de lexercice 7

program e c r i t u re _ m u s i ci e ns character ( len =80) :: mus integer :: ios_mus , lrecl integer :: 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 " ) ! Calcul de la taille des enreg ist re m en ts du fichier ! binaire en sortie . ( dpend du compilateur ). inquire ( iolength = lrecl ) mus open ( unit =2 , file = " musiciens . bin " , & status = " replace " , & form = " unformatted " , access = " direct " , & action = " write " , recl = lrecl ) ! 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 , 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 i c i en s

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

249 / 262

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 , rec = numrec , fmt = " ( a ) " ) mus end do 1 close ( unit =1 )

& & & &

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

250 / 262

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 do while ( ios_stdin == 0 ) 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 print * , " Entrez le rang d un musicien : " read ( unit =* , fmt =* , iostat = ios_stdin ) rang end do if ( ios_stdin > 0 ) then print " (a ,/) " ," Erreur lors de la saisie . " else exit end if end do close ( unit =2 ) end program musiciens

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

251 / 262

Annexe E : exercices

Corrig de lexercice 9

program se q u e nt ie l _i nd e xe implicit none character ( len =19) , dimension (2) , parameter :: f_index = & (/ " i nde x_n ais sanc e . dat " , " index_deces . dat " /) character ( len =80) :: 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 " ) ! Calcul de la taille des en reg i st rem ents du fichier ! cr l exercice 7. ( dpend du compilateur ). inquire ( iolength = lrecl ) musicien open ( unit =3 , file = " musiciens . bin " , & status = " old " , form = " unformatted " , & access = " direct " , action = " read " , recl = lrecl ) 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 qu e nt ie l _i nd e xe

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

252 / 262

Annexe E : exercices

Corrig de lexercice 9 (suite)

subroutine re c he r c h e _ m u s i c 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 . mus ici en _tr ouve () ) & print * , " Aucun musicien ne rpond la demande " print * end do contains

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

253 / 262

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

Langage Fortran(F95-1)

4 mai 2012

254 / 262

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

Langage Fortran(F95-1)

4 mai 2012

255 / 262

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

Langage Fortran(F95-1)

4 mai 2012

256 / 262

Annexe E : exercices

Corrig de lexercice 9 (suite)

function musicien_t ro u ve () logical mu si cien_tr ou ve ! 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 ) " ) tail le_messag e print fmt, message , ( " -" ,i =1 , t aille_mes sage ) musi ci en_t ro uve = . false . do read ( unit = unite_index , fmt =* , END =1 ) date_lue , numrec if ( date_lue == date_saisie ) then ! On lit l enregist rement correspondant . m us icien_t ro uve = . true . read ( unit =3 , rec = numrec ) musicien print " (2 a ) " ," - " , trim ( musicien ) end if end do 1 return end function mus icien_t ro u ve end subroutine r e c h er c h e_ m u s i c i e n

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

257 / 262

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

Langage Fortran(F95-1)

4 mai 2012

258 / 262

Annexe E : exercices

Corrig de lexercice 10 (suite)

! Transformatio n 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

Langage Fortran(F95-1)

4 mai 2012

259 / 262

Annexe E : exercices

Corrig de lexercice 10 (suite)

! Procdure de tr ansformation . 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 t ransf orma tion . 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

Langage Fortran(F95-1)

4 mai 2012

260 / 262

Annexe E : exercices

Corrig de lexercice 11

program tri_matrice implicit none integer , parameter :: n =10 , m =3 real , dimension (n , m ) :: mat integer :: ios , i , j ! Lecture de la matrice trier . open ( unit =1 , & file = " exo6 . matrice " , & form = " unformatted " , & status = " old " , & action = " read " , & position = " rewind " , & iostat = ios ) if ( ios /= 0 ) stop " Erreur l ouverture du fichier & & " " exo6 . matrice " " " 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 " , position = " rewind " , & iostat = ios ) if ( ios /= 0 ) stop " Erreur l ouverture du fichier & & " " exo11 . matrice_triee " " " do i =1 , n write ( unit =1 , fmt = " (3 F7 .3) " ) mat (i ,:) end do close ( unit =1 ) end program tri_matrice

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

261 / 262

Annexe E : exercices

Corrig de lexercice 11 (suite)

! Procdure de tri . subroutine tri ( mat , n , m ) implicit none integer :: n , m , ligne , col real , dimension (n , m ) :: mat do ligne =1 , n ! Tri des lignes . call tri_vecteur ( mat ( ligne ,:) , m ) end do do col =1 , m ! Tri des colonnes . call tri_vecteur ( mat (: , col ) , n ) end do contains ! Procdure de tri d un vecteur . subroutine tri_vecteur ( v , n ) integer :: n , i real , dimension ( n ) :: v logical :: tri_termine do tri_termine = . true . do i =2 , n if ( v ( i ) > v (i -1) ) then ! Utilisation de sections rgulires pour effectuer l interversion . tri_termine = . false .; v (i -1: i ) = v ( i :i -1: -1) end if end do if ( tri_termine ) exit end do end subroutine tri_vecteur end subroutine tri

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

262 / 262

Annexe E : exercices

Symboles
assumed-size array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 assumed-size string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

A
accs direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137, 139, 141 exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 squentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97, 99, 101 ANSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 ar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 argument chane de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 argument procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 arguments dappel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165, 167, 169 arguments muets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 ASA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229 attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 DIMENSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

B
BACKSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 base hexadcimale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 octal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 bases de numration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 bibliothque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Block data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 buer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

C
CALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 caractre Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 table ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 CHARACTER* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 STATUS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215 code source jeu de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Common . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185, 187, 189, 191, 193, 195 tiquet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 attribut save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191, 193 initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189, 191 blanc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185, 187 exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 rgles et restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193, 195 syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 compilateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 complexe reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 constantes chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 entires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 littrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41, 43, 45 relles double prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 relles simple prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 symboliques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 CONTAINS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

D
dclaration attribut PARAMETER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 implicit none . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 initialisation avec = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 instruction equivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51, 53 syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 DELIM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 descripteurs de format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Dure de vie et visibilit des identicateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181

E
ENDFILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 enregistrement logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 entier reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 entre standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157 equivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 exercices noncs exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 exercice 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 exercice 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 exercice 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 exercice 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 exercice 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 exercice 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 exercice 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 exercice 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 exercice 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 corrigs exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 exercice 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 exercice 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241, 243 exercice 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 exercice 3 (autre solution) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 exercice 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 exercice 4 (autre solution) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247 exercice 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 exercice 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 exercice 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 exercice 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 exercice 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 EXTERNAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices

F
chier binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99, 139 destruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 temporaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145 texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101, 141 FMT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 fonction statement function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 format Litteral string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 BOZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 descripteur A en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 descripteur A en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 descripteur EN en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 descripteur ES en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 descripteur F en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 descripteur I en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 descripteur I en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 descripteur L en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121 descripteur L en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 descripteurs en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 descripteurs / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 descripteurs de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 descripteurs E, D en criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 descripteurs F en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 descripteurs F, E, D en lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 descripteurs SS,SP,S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 facteur de rptition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 gabarit indni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 rexploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 format xe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 format libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 formats ddition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Fortran documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices fortran 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 fortran 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 fortran 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 fortran 77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 fortran 95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 fortran IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 fortran V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Fortran 95 aspects obsoltes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229, 231 FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

G
GO TO calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

I
identicateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 identicateurs dure de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 visibilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 initialisation instruction DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 INQUIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 ACCESS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 ACTION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 BLANK= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 DELIM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 DIRECT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 ERR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 EXIST= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 FILE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 FORM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211 FORMATTED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 NAME= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 NAMED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 NEXTREC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 NUMBER= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 OPENED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices PAD= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 POSITION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 READ= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 READWRITE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 RECL= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 SEQUENTIAL= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 UNFORMATTED= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 WRITE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 inquire iolength= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 instruction GO TO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 instructions positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 INTRINSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 IOSTAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97

L
LEN= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 logique reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

M
make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 module excutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 module objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

N
NAMELIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101, 135 NML= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101, 135

O
oprateurs Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices arithmtiques conversion implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 concatnation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 daectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 relationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 table des priorits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 OPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97, 99 ACCESS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 ACTION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203 BLANK= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 DELIM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 FILE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 FORM= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203 IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 PAD= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 POSITION= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 RECL= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 STATUS= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201

P
prprocesseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157 procdure fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 intrinsque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 subroutine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 procdures intrinsques ABS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 ACHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171, 219 ACOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 ADJUSTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 ADJUSTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 AIMAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 AINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 ANINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 ASIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices ATAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 BIT_SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 BTEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 CEILING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 CMPLX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 CONJG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 COS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 COSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 DBLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 EXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 FLOOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 IACHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171, 221 IAND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 IBCLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 IBITS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 IBSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 IEOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223 INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 INT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 IOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 ISHFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 ISHFTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 LEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 LEN_TRIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 LGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225 LGT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 LLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 LLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 LOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 LOG10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 MAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 MOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 REAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 REPEAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 SCAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 SIGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 SIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 SINH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 SQRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices TAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 TANH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 TRIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 VERIFY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

R
rel prcision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 reprsentation en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 READ ADVANCE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205 END= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159, 161, 205 EOR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 ERR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159, 205 FMT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163, 205 NML= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 REC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 SIZE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205 REC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137, 139, 141 reprsentation en mmoire des caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 des complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 des entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 des logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 des rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167, 169 REWIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

S
scratch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 sortie standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 structures de contrle DO syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 DO indx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DO WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DO/CYCLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices DO/EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 SELECT CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 syntaxe commentaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 format xe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 format libre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

T
tableau tendue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 agencement en mmoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 conformance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 constructeur de vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87 dclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81 expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 initialisation instruction DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 symbole = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 prol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 rang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 section rgulire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 tampon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 tests IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 SELECT CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Types prdnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

U
UNIT=* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 unit logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 units de programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

V
variable type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

W
WRITE Anne Fouilloux Patrick Corde Langage Fortran(F95-1) 4 mai 2012 262 / 262

Annexe E : exercices ADVANCE= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207 ERR= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 FMT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 IOSTAT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 NML= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 REC= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 UNIT= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207

Anne Fouilloux Patrick Corde

Langage Fortran(F95-1)

4 mai 2012

262 / 262

También podría gustarte