Professional Documents
Culture Documents
4 mai 2012
Langage Fortran(F95-1)
4 mai 2012
1 / 262
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
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
Initialisation
Linstruction DATA Le symbole =
Manipulation de tableaux
Expressions de type tableau
Sections de tableaux
7
Accs direct
Fichier binaire accs direct Fichier texte accs direct
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
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).
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).
Langage Fortran(F95-1)
4 mai 2012
8 / 262
Introduction
bibliographie
ISBN 0-13-397332-8 ;
Delannoy Claude, Programmer en Fortran 90 Guide complet, Eyrolles, 1997,
Langage Fortran(F95-1)
4 mai 2012
9 / 262
Introduction
bibliographie
Lignelet P., Fortran 90 : approche par la pratique, ditions Studio Image (srie
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
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,
Langage Fortran(F95-1)
4 mai 2012
10 / 262
Introduction
bibliographie
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/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
Langage Fortran(F95-1)
4 mai 2012
13 / 262
Gnralits
10
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.
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
Langage Fortran(F95-1)
4 mai 2012
16 / 262
Gnralits
= = = =
Langage Fortran(F95-1)
4 mai 2012
17 / 262
Gnralits
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.
Gnralits
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
52 5
1101002 1012
Voici ce que donne la division binaire : 110100 00110 00001000 000000110 000000001 101 1010,0110011001100110011...
Langage Fortran(F95-1)
4 mai 2012
20 / 262
Gnralits
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
4024CCCCCCCCCCCC16
Remarque :
En vrit, le motif en mmoire est 4024CCCCCCCCCCCD car lors de la troncature le 1er
Langage Fortran(F95-1)
4 mai 2012
21 / 262
Gnralits
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
Langage Fortran(F95-1)
4 mai 2012
22 / 262
Gnralits
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.
Langage Fortran(F95-1)
4 mai 2012
23 / 262
Gnralits
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.
Langage Fortran(F95-1)
4 mai 2012
24 / 262
Gnralits
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
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
! ( % ?
le caractre espace ; le caractre _ (underscore ).
* = /
+ > .
" ) : &
< ; , $
Langage Fortran(F95-1)
4 mai 2012
27 / 262
Gnralits
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
3 4
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.
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 & &
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)
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.
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 =
Dclarations
10
Langage Fortran(F95-1)
4 mai 2012
33 / 262
Dclarations
Identicateurs
underscore ) ;
le premier caractre doit tre une lettre ; la longueur est limite 31 caractres ; on ne distingue pas les lettres majuscules des minuscules. Exemple
Langage Fortran(F95-1)
4 mai 2012
34 / 262
Dclarations
Dirents types
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
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
Langage Fortran(F95-1)
4 mai 2012
36 / 262
Dclarations
Syntaxe
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
Langage Fortran(F95-1)
4 mai 2012
38 / 262
Dclarations
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.
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
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
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.
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
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)
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 "
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.
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
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.
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
Langage Fortran(F95-1)
4 mai 2012
48 / 262
Dclarations
Instruction EQUIVALENCE
Syntaxe gnrale : EQUIVALENCE(v1 , v2 )[,..., (vi 1 , vi ),...] o les vi sont des scalaires (variables simples ou lments de tableaux).
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
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 |
Oprateurs et expressions
Langage Fortran(F95-1)
4 mai 2012
52 / 262
Oprateurs et expressions
10
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
Langage Fortran(F95-1)
4 mai 2012
54 / 262
Oprateurs et expressions
Oprateurs arithmtiques
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
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
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.
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.
Autres oprateurs
Langage Fortran(F95-1)
Oprateurs et expressions
Oprateur de concatnation
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.
Langage Fortran(F95-1)
4 mai 2012
60 / 262
Oprateurs et expressions
Oprateur daectation
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
Langage Fortran(F95-1)
4 mai 2012
61 / 262
Oprateurs et expressions
Tab. 8:
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
Structures de contrle
Les itrations
Linstruction GOTO Les bloucles DO
6
Structures de contrle
10
Include
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.
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
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.
Langage Fortran(F95-1)
4 mai 2012
69 / 262
Structures de contrle
Les itrations
nom_bloc est une tiquette, contrle_de_boucle dnit les conditions dexcution et darrt de la boucle, bloc est une suite dinstructions Fortran.
Langage Fortran(F95-1)
4 mai 2012
70 / 262
Structures de contrle
Les itrations
Langage Fortran(F95-1)
4 mai 2012
71 / 262
Structures de contrle
Les itrations
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.
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
:: :: :: ::
! 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
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.
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)
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
Langage Fortran(F95-1)
4 mai 2012
77 / 262
Tableaux
10
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
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.
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)
Langage Fortran(F95-1)
4 mai 2012
80 / 262
Tableaux
Le rang (rank ) dun tableau est son nombre de dimensions. Le nombre dlments dans une dimension sappelle ltendue (extent ) du tableau
son prol.
Deux tableaux sont dits conformants sils ont le mme prol.
Langage Fortran(F95-1)
4 mai 2012
81 / 262
Tableaux
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.
Langage Fortran(F95-1)
4 mai 2012
82 / 262
Tableaux
C(1,1)
C(1,3)
C(5,1)
C(5,3)
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.
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.
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 /)
&
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./
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 )
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
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
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.
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
Entres-Sorties
Instructions de positionnement Instruction INQUIRE Formats BOZ Units standards Instruction FORMAT Mots cls END=, ERR=
8
10
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.
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
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.
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.
Langage Fortran(F95-1)
4 mai 2012
96 / 262
Entres-Sorties
Accs 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 )
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.
Langage Fortran(F95-1)
4 mai 2012
98 / 262
Entres-Sorties
Accs 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
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.
Langage Fortran(F95-1)
4 mai 2012
100 / 262
Entres-Sorties
Accs squentiel
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
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
Langage Fortran(F95-1)
4 mai 2012
102 / 262
Entres-Sorties
Accs squentiel
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
Langage Fortran(F95-1)
4 mai 2012
103 / 262
Entres-Sorties
Accs squentiel
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 ...
Langage Fortran(F95-1)
4 mai 2012
104 / 262
Entres-Sorties
Accs squentiel
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
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 ...
Langage Fortran(F95-1)
4 mai 2012
106 / 262
Entres-Sorties
Accs squentiel
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 ...
Langage Fortran(F95-1)
4 mai 2012
107 / 262
Entres-Sorties
Accs squentiel
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
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.
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^"
Langage Fortran(F95-1)
4 mai 2012
109 / 262
Entres-Sorties
Accs squentiel
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
Langage Fortran(F95-1)
4 mai 2012
110 / 262
Entres-Sorties
Accs squentiel
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
Langage Fortran(F95-1)
4 mai 2012
111 / 262
Entres-Sorties
Accs squentiel
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
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
Entres-Sorties
Accs squentiel
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.
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
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
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
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
Langage Fortran(F95-1)
4 mai 2012
118 / 262
Entres-Sorties
Accs squentiel
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
Langage Fortran(F95-1)
4 mai 2012
119 / 262
Entres-Sorties
Accs squentiel
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
crits,
si la valeur w est absente, cest la longueur de la chane spcie la dclaration qui
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
Langage Fortran(F95-1)
4 mai 2012
121 / 262
Entres-Sorties
Accs squentiel
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
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.
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
Entres ^8^2^4^^
Aectations i=8,j=20,k=4
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
Aectations i=1756,j=1791
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
Langage Fortran(F95-1)
4 mai 2012
126 / 262
Entres-Sorties
Accs squentiel
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
Langage Fortran(F95-1)
4 mai 2012
127 / 262
Entres-Sorties
Accs squentiel
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)) )" |
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)
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.
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.
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-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 /
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.
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 ) ...
^/
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.
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.
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.
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
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
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
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.].
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 ) & & & & &
Langage Fortran(F95-1)
4 mai 2012
144 / 262
Entres-Sorties
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
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.
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.
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
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.
Langage Fortran(F95-1)
4 mai 2012
150 / 262
Entres-Sorties
Instructions de positionnement
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).
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 )
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).
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
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 , ...
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.
Langage Fortran(F95-1)
4 mai 2012
157 / 262
Entres-Sorties
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
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
Langage Fortran(F95-1)
4 mai 2012
159 / 262
Entres-Sorties
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
Langage Fortran(F95-1)
4 mai 2012
160 / 262
Entres-Sorties
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
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
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.
Langage Fortran(F95-1)
4 mai 2012
164 / 262
Procdures
Arguments
Procdure appelante
arguments dappel
1 2 3 100
Procdure appele
arguments muets
real :: tab(100)
18 32.
integer :: i real :: x
Stack
Adresse du tableau tab Adresse de lentier i Adresse du rel x
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
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.
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
Langage Fortran(F95-1)
4 mai 2012
168 / 262
Procdures
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 ).
Langage Fortran(F95-1)
4 mai 2012
169 / 262
Procdures
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
Langage Fortran(F95-1)
4 mai 2012
170 / 262
Procdures
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
Langage Fortran(F95-1)
4 mai 2012
171 / 262
Procdures
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.
Langage Fortran(F95-1)
4 mai 2012
172 / 262
Procdures
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
Langage Fortran(F95-1)
4 mai 2012
173 / 262
Procdures
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
Langage Fortran(F95-1)
4 mai 2012
174 / 262
Procdures
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
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
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
Langage Fortran(F95-1)
4 mai 2012
178 / 262
Procdures
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
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 = ).
Langage Fortran(F95-1)
4 mai 2012
179 / 262
Procdures
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.
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
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.
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
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.
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
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
Langage Fortran(F95-1)
4 mai 2012
187 / 262
Common
Common tiquet
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.
Langage Fortran(F95-1)
4 mai 2012
188 / 262
Common
Common tiquet
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
Langage Fortran(F95-1)
4 mai 2012
189 / 262
Common
Common tiquet
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.
Langage Fortran(F95-1)
4 mai 2012
190 / 262
Common
Common tiquet
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
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
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.
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
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
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
Langage Fortran(F95-1)
4 mai 2012
196 / 262
Include
La directive INCLUDE
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
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
Langage Fortran(F95-1)
4 mai 2012
198 / 262
Instruction OPEN
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
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
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.
Langage Fortran(F95-1)
4 mai 2012
200 / 262
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,
Langage Fortran(F95-1)
4 mai 2012
201 / 262
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,
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.
Langage Fortran(F95-1)
4 mai 2012
202 / 262
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,
Langage Fortran(F95-1)
4 mai 2012
203 / 262
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.
Langage Fortran(F95-1)
4 mai 2012
204 / 262
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,
Langage Fortran(F95-1)
4 mai 2012
205 / 262
Instruction WRITE
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.
Langage Fortran(F95-1)
4 mai 2012
206 / 262
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
Langage Fortran(F95-1)
4 mai 2012
207 / 262
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,
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,
Langage Fortran(F95-1)
4 mai 2012
208 / 262
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
Langage Fortran(F95-1)
4 mai 2012
209 / 262
Instruction INQUIRE
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
Langage Fortran(F95-1)
4 mai 2012
210 / 262
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
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,
Langage Fortran(F95-1)
4 mai 2012
211 / 262
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,
Langage Fortran(F95-1)
4 mai 2012
212 / 262
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
Langage Fortran(F95-1)
4 mai 2012
213 / 262
Instruction CLOSE
& &
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
Langage Fortran(F95-1)
4 mai 2012
214 / 262
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 )
Langage Fortran(F95-1)
4 mai 2012
215 / 262
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
Langage Fortran(F95-1)
4 mai 2012
216 / 262
norme :
x 2 + y 2.
ACHAR : retourne le caractre de la table ASCII dont le rang est transmis en argument.
ACHAR(88) = X; ACHAR(42) = *
Langage Fortran(F95-1)
4 mai 2012
217 / 262
ANINT : retourne, sous forme dun rel, lentier le plus proche du rel transmis.
ANINT(2.783) = 3.0; ANINT(-2.783) = -3.0
en argument.
BIT_SIZE(1) = 32
Langage Fortran(F95-1)
4 mai 2012
218 / 262
BTEST : permet de tester la valeur dun bit dun entier : lentier ainsi que la position
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
Langage Fortran(F95-1)
4 mai 2012
219 / 262
DBLE : convertit en double prcision largument transmis. EXP : retourne lexponentiel de largument transmis.
EXP(1.0) = 2.7182818
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
Langage Fortran(F95-1)
4 mai 2012
220 / 262
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
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
Langage Fortran(F95-1)
4 mai 2012
221 / 262
laide dun "ou logique" les bits des deux entiers transmis en argument.
IOR(1,3) = 3 IOR((/ 3,2 /),(/ 1,10 /)) = (/ 3,10 /)
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
Langage Fortran(F95-1)
4 mai 2012
222 / 262
Principales procdures intrinsques LEN : retourne la longueur de la chane de caractres transmise en argument.
CHARACTER(len=10) CH; LEN(CH) = 10
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
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
Principales procdures intrinsques SIGN : retourne le nombre dont la valeur absolue est celle du premier argument et le
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
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
Langage Fortran(F95-1)
4 mai 2012
226 / 262
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
Langage Fortran(F95-1)
4 mai 2012
227 / 262
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 :
Langage Fortran(F95-1)
4 mai 2012
228 / 262
Aspects obsoltes
III
CALL SP1(X,Y,*10,*20) ... 10 ... ... 20 ... ... SUBROUTINE SP1(X1,Y1,*,*) ... RETURN 1 ... RETURN 2 ...
PAUSE Montez la bande 102423 SVP (*) ==> READ qui attend les donnes FORMAT(9H A viter) (*) ==> Constante littrale : FORMAT( Recommand)
10
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)).
Langage Fortran(F95-1)
4 mai 2012
230 / 262
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
Langage Fortran(F95-1)
4 mai 2012
231 / 262
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 .
Langage Fortran(F95-1)
4 mai 2012
232 / 262
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
Langage Fortran(F95-1)
4 mai 2012
233 / 262
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
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
Langage Fortran(F95-1)
4 mai 2012
235 / 262
Annexe E : exercices
noncs
Exercice 1
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
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 .
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.
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
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
Langage Fortran(F95-1)
4 mai 2012
240 / 262
Annexe E : exercices
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
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 ::
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
Langage Fortran(F95-1)
4 mai 2012
242 / 262
Annexe E : exercices
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
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
Langage Fortran(F95-1)
4 mai 2012
244 / 262
Annexe E : exercices
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
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
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/
Langage Fortran(F95-1)
4 mai 2012
247 / 262
Annexe E : exercices
! 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
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
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 ! ! ! !
:: :: :: ::
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 )
Langage Fortran(F95-1)
4 mai 2012
250 / 262
Annexe E : exercices
! 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
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
Langage Fortran(F95-1)
4 mai 2012
252 / 262
Annexe E : exercices
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
Langage Fortran(F95-1)
4 mai 2012
253 / 262
Annexe E : exercices
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
Langage Fortran(F95-1)
4 mai 2012
254 / 262
Annexe E : exercices
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
Langage Fortran(F95-1)
4 mai 2012
255 / 262
Annexe E : exercices
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
Langage Fortran(F95-1)
4 mai 2012
256 / 262
Annexe E : exercices
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
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 )
Langage Fortran(F95-1)
4 mai 2012
258 / 262
Annexe E : exercices
! 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
Langage Fortran(F95-1)
4 mai 2012
259 / 262
Annexe E : exercices
! 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
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
Langage Fortran(F95-1)
4 mai 2012
261 / 262
Annexe E : exercices
! 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
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
Langage Fortran(F95-1)
4 mai 2012
262 / 262