Introduction à Fortran 90



Documents pareils
Plan du cours Cours théoriques. 29 septembre 2014

Cours Informatique Master STEP

1. Structure d'un programme FORTRAN 95

Langage Fortran (Base)

Langage Fortran. Support de cours

Cours de Fortran 90 / 95

Algorithmique et Programmation, IMA

Bases de programmation. Cours 5. Structurer les données

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Introduction à MATLAB R

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr


Les commandes de base de LINUX

Cours d Algorithmique et de Langage C v 3.0

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Corrigé des TD 1 à 5

Le langage C. Introduction, guide de reference

Gestion mémoire et Représentation intermédiaire

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

IDRIS 1. Cours Fortran 95

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Analyse de sécurité de logiciels système par typage statique

Introduction à NetCDF

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

UE C avancé cours 1: introduction et révisions

Chapitre 1 : La gestion dynamique de la mémoire

Propagation sur réseau statique et dynamique

STAGE IREM 0- Premiers pas en Python

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Conventions d écriture et outils de mise au point

Cours d initiation à la programmation en C++ Johann Cuenin

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Bases de données avancées

Génie Logiciel avec Ada. 4 février 2013

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Compléments de documentation Scilab : affichage de texte et formatage de nombres

UE Programmation Impérative Licence 2ème Année

Le prototype de la fonction main()

Compilation (INF 564)

Utilisation d objets : String et ArrayList

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Calcul Formel et Numérique, Partie I

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Initiation à la programmation en Python

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Bernard HAMM, Évelyne LAVOISIER

Cours de Système : Gestion de Fichiers

Claude Delannoy. 3 e édition C++

1 Lecture de fichiers

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Java Licence Professionnelle CISII,

Architecture des ordinateurs

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction au langage C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Organigramme / Algorigramme Dossier élève 1 SI

1 Recherche en table par balayage

as Architecture des Systèmes d Information

SUPPORT DE COURS. Langage C

Présentation du PL/SQL

Oracle Le langage procédural PL/SQL

Algorithmique et programmation : les bases (VBA) Corrigé

Cours Bases de données 2ème année IUT

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

OCL - Object Constraint Language

PVM 1 PVM. Parallel Virtual Machine

Représentation d un entier en base b

Cours d algorithmique pour la classe de 2nde

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

INITIATION A LA PROGRAMMATION

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Programmer en JAVA. par Tama

Langage Éric Guérin 5 octobre 2010

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

PETITE INTRODUCTION AU LANGAGE FORTRAN

Le langage C. Séance n 4

Algorithmique, Structures de données et langage C

Initiation à LabView : Les exemples d applications :

Perl Orienté Objet BioPerl There is more than one way to do it

TP 1. Prise en main du langage Python

SYSTÈME DE GESTION DE FICHIERS

Les structures de données. Rajae El Ouazzani

Principes des langages de programmation INF 321. Eric Goubault

Programmation en langage C

ACTIVITÉ DE PROGRAMMATION

Présentation du langage et premières fonctions

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet


PROGRAMMATION EVENEMENTIELLE sur EXCEL

Transcription:

Introduction à Fortran 90 Nicolas Kielbasiewicz 19 mars 2008 Fortran pour FORmula TRANslator est comme son nom l indique dédié au calcul scientifique car très performant de ce point de vue. Fortran 77 est encore à l heure actuelle l un (pour ne pas dire le) des langages les plus présents parmi la communauté scientifique. Il présente néanmoins quelques inconvénients et contraintes majeurs (à l époque, les ordinateurs fonctionnaient avec des cartes perforées) et c est la raison pour laquelle Fortran 90 est apparu. L objet de ce document n est pas de faire un cours de Fortran, mais de rassembler sous forme d un aide-mémoire les commandes essentielles. Table des matières 1 Types de données et attributs 2 1.1 Les types de données 2 1.1.1 Les types INTEGER, REAL et COMPLEX. 2 1.1.2 Le type LOGICAL 2 1.1.3 Le type CHARACTER 2 1.1.4 Le type TYPE.. 3 1.2 Les attributs. 3 1.2.1 L attribut PARAMETER.. 3 1.2.2 L attribut DIMENSION 3 1.2.3 Les attributs POINTER et TARGET. 3 2 Structures de contrôle et expressions logiques 4 2.1 IF. 4 2.2 SELECT CASE 4 2.3 DO et DO WHILE. 4 2.4 Les instructions GOTO et STOP.. 4 3 Structure d un programme 5 3.1 Programmes, procédures et fonctions 5 3.1.1 Le programme.. 5 3.1.2 Les procédures ou subroutines.. 5 3.1.3 Les fonctions 5 3.1.4 Les fonctions récursives 6 3.2 Modules, interfaces et généricité 6 3.2.1 Les interfaces 6 3.2.2 Les modules. 7 Unité de Mathématiques Appliquées, École Nationale Supérieure de Techniques Avancées 1

4 Compléments sur les tableaux 8 4.1 Manipuler des tableaux. 8 4.1.1 Sections de tableaux.. 8 4.1.2 initialisation / affectation.. 8 4.1.3 Opérateurs élémentaires 8 4.1.4 L instruction WHERE. 8 4.2 Passage en arguments - profils implicites et automatiques 9 4.3 Tableaux dynamiques - attribut ALLOCATABLE ou POINTER.. 9 5 Les formats 10 5.1 Les différents formats.. 10 5.2 Formats et entrées / sorties standard 10 6 La gestion des entrées / sorties 10 6.1 Entrées / sorties séquentielles. 10 6.1.1 OPEN et CLOSE. 11 6.1.2 READ et WRITE 11 6.2 Entrées / sorties à accès direct 11 6.3 Entrées / sorties internes 12 1 Types de données et attributs 1.1 Les types de données 1.1.1 Les types INTEGER, REAL et COMPLEX Ce sont les types qui permettent de représenter des entiers relatifs, des nombres flottants et des nombres complexes. Il convient d introduire ici la notion de précision. Fortran propose en effet la simple précision et la double précision. INTEGER REAL COMPLEX simple précision 2 octets 4 octets 4 octets double précision 4 octets 8 octets 8 octets Tab. 1 Espace mémoire réservé suivant la précision Comment manipuler la précision? Par défaut, les types sont en simple précision. Si toutefois, on veut la double précision, on va alors utiliser la syntaxe suivante : real ( kind=8) : : x, y integer ( kind=4) : : i, j complex( kind=8) : : c 1.1.2 Le type LOGICAL C est le type qui permet de gérer les booléens en Fortran. Les deux valeurs possibles sont.true. et.false. 1.1.3 Le type CHARACTER C est le type qui permet de gérer les chaînes de caractères. Les chaînes de caractères sont écrites indifféremment entre guillemets ou entre apostrophes. 2

character (LEN: 2 0 ) : : s, t s = toto t= Ce t e x t e e s t& & é c r i t sur& & p l u s i e u r s l i g n e s s ( 2 : 2 ) = a s ( 3 : 4 ) = ut 1.1.4 Le type TYPE C est l équivalent des structures en C. Il permet de définir son propre type de données. type v o i t u r e character ( len =20) : : marque character ( len =20) : : modele integer : : annee end type v o i t u r e type ( v o i t u r e ) : : lamienne lamienne%marque = Peugeot lamienne%modele = 308 lamienne%annee = 2008 1.2 Les attributs 1.2.1 L attribut PARAMETER Cet attribut permet de spécifier que la variable ainsi définie est une constante dont la valeur ne pourra être modifiée au cours du programme. 1.2.2 L attribut DIMENSION C est l attribut qui permet de définir des tableaux, et plus précisément sa taille. Si on précise un entier, il s agira de la taille du tableau et les indices commenceront à 1. Si on précise une plage de valeurs, il s agira des valeurs des indices. Si on précise plusieurs éléments, il s agira d un tableau à plusieurs dimensions. real, dimension (11) : : a integer, dimension ( 10:5) : : b character ( len = 10), dimension (5, 4:12) : : c 1.2.3 Les attributs POINTER et TARGET En Fortran, on distingue les pointeurs et les cibles, les premiers poitant sur les derniers. integer, pointer : : ptr integer, target : : n n = 10 ptr => n Modifier la valeur d un pointeur modifie en réalité la valeur de la cible qui lui est associée. Fortran nous permet ainsi d utiliser les pointeurs de la même manière que des variables standard (initialisation, affectation, ). Nous verrons plus loin que l on peut se passer de la cible et manipuler des pointeurs de la même manière qu en C. 3

2 Structures de contrôle et expressions logiques 2.1 IF i f ( x < 3) then x=x+3 else i f ( x > 0 ) then x=0 else x=x 3 end i f 2.2 SELECT CASE select ( y ) case ( 0 ) y=y+2 case ( 1, 3 ) y=0 case ( 4 : 7 ) y=y+3 case default y=1 end select 2.3 DO et DO WHILE L instruction DO remplit le double rôle d une boucle pour et d une boucle tant que. do i = 1, 10 x=x+2 end do integer : : s s=0 do i f ( s >=10) exit s=s+1 end do Dans ce dernier exemple, on utilise en réalité une syntaxe de boucle infinie dans laquelle on va nécessairement inclure une condition d arrêt? C est ce que l on appelle une boucle jusqu à. On peut également définir un boucle tant que. integer : : s s=0 do while ( s <10) s=s+1 end do 2.4 Les instructions GOTO et STOP L instruction GOTO est un reliquat de Fortran 77. Elle permet d aller directement à la ligne de code correspondant à l étiquette donnée en argument. 4

i f ( x >0.0) then y=l o g ( x ) else goto 99 endif print, log ( x ) =, x 99 print, x e s t n e g a t i f Nous avons vu précédemment l instruction EXIT qui permet de sortir d une boucle tant que. L instruction STOP permet d arrêter totalement l exécution du programme. On l utilise donc essentiellement dans la gestions des erreurs. 3 Structure d un programme 3.1 Programmes, procédures et fonctions 3.1.1 Le programme Toute programme commence et se termine par : program nom programme end program nom programme 3.1.2 Les procédures ou subroutines Les procédures sont des sous-programmes qui prennent des arguments d entrée et et des arguments de sortie : program toto c a l l tata ( a, b, c ) end program toto subroutine tata ( a, b, c ) real, intent ( in ) : : a! argument d e n t r e e a ne pas m o d i f i e r dans l a r o u t i n e real, intent ( inout ) : : b! argument d e n t r e e e t de s o r t i e real, intent ( out ) : : c! argument en s o r t i e a l u i a f f e c t e r o b l i g a t o i r e m e n t une v a l e u r end subroutine tata On peut les définir à l intérieur d un programme, après le mot clé dédié CONTAINS. On parlera dans ce cas de procédures internes. 3.1.3 Les fonctions A la différences des procédures, les fonctions ne retournent qu un seul argument qui porte le nom de la fonction. L appel se fait aussi de manière différente : program toto real : : y 5

y= tata ( a, b, c ) end program toto function tata ( a, b, c ) real, intent ( in ) : : a, b, c real : : tata tata=a+b c end function tata Tout comme les procédures, les fonctions peuvent être définies de manière interne. 3.1.4 Les fonctions récursives Ce sont des fonctions qui s appellent elle-mêmes. Leur syntaxe est un peu particulière, comme on peut le voir avec la définition de la fonction factorielle : recursive function f a c t ( n ) result ( r e s ) integer, intent ( in ) : : n real : : r e s i f ( n <=1) then r e s=1 else endif end function r e s=f a c t (n 1) n f a c t 3.2 Modules, interfaces et généricité 3.2.1 Les interfaces Les interfaces jouent un rôle très important et quasi systématique en Fortran 90. Elles permettent de définir les prototypes des fonctions et subroutines définies de manière externe. Dans ce rôle, elles sont les analogues des inclusions de fichiers de header en C. function toto ( a, b ) real, intent ( in ) : : a, b real : : toto end function toto program t e s t interface function toto ( a, b ) real, intent ( in ) : : a, b real : : toto end function toto end interface end program t e s t Les interfaces permettent également de surcharger des méthodes pour plusieurs types d arguments. Le bloc interface associé sera de la forme : 6

interface toto subroutine t o t o i n t ( n ) integer, intent ( in ) : : n end subroutine t o t o i n t subroutine t o t o r e a l ( r ) i r e a l, intent ( in ) : : r end subroutine t o t o r e a l end interface 3.2.2 Les modules Il s agit d un autre point fort de Fortran 90, à savoir la possibilité de programmer des modules, c est-à-dire des librairies particulières dont on peut choisir d utiliser tout ou partie. module mon module type toto end type toto interface operator (. t i t i. )! surcharge d operateur module procedure tata end interface contains subroutine tata ( a, b ) end subroutine tata function tutu ( a, b ) end function tutu end module mon module program t e s t use mon module, only : tutu! chargement de l a f o n c t i o n t u t u du module end program Quelques remarques : Dans cet exemple, on montre l utilisation de ONLY. Si l on veut charger tout un module, on écrira USE mon module. Le chargement d un ou plusieurs modules se fait en tout début de programme, avant la commande IMPLICIT NONE et les déclarations et initialisations de variables. Cet exemple montre également la notion de surcharge (ou surdéfinition) d opérateur. Possibilité est donnée non seulement de surcharger les opérateurs existants (+, -, *, /,.and., <, ) à condition que ce soit pour des types différents que ceux pour lesquels ces opérateurs sont déjà définis, mais aussi de définir de nouveaux opérateurs dont le nom sera de la forme.nom.. 7

4 Compléments sur les tableaux 4.1 Manipuler des tableaux 4.1.1 Sections de tableaux Encore un point fort de Fortran, la possibilité de manipuler des sections de tableaux avec des syntaxes de la forme a(debut:fin :pas). Si le pas est omis, il a la valeur 1 par défaut. 4.1.2 initialisation / affectation L exemple ci-dessous montre les deux manières standard d initialiser un tableau, la manière globale et la manière élémentaire : real, dimension ( 5 ) : : a, b a=(/ 2., 3. 2, 1.0, 5. 9, 4. 5 /) # i n i t i a l i s a t i o n g l o b a l e b=(/ (2 i +1, i =1,5) /) # i n i t i a l i s a t i o n g l o b a l e a ( 2 ) = 1.5 # i n i t i a l i s a t i o n d un element La manière globale ne fonctionne que pour des tableaux de rang 1. Pour des tableaux multidimensionnels, on est donc amené à utiliser la manière élémentaire ou d utiliser un tableau temporaire de rang 1 que l on redimensionnera à l aide de la fonction reshape : program i n i t t a b real, dimension ( 6 ) : : t1 real, dimension ( 2, 3 ) : : t2 t1 = (/ 2., 1.5, 3. 7, 0., 2.9, 1. /) t2=reshape ( t1, (/ 2, 3 /) ) end program i n i t t a b t1 = 2.0-1.5 3.7 0.0 t2 = 2.0-1.5 3.7 0.0 4.1.3 Opérateurs élémentaires Tout opérateur défini sur des types donnés fonctionnent avec des tableaux de mêmes types. Ces opérateurs fonctionneront alors élément à élément, à la condition que les tableaux impliqués soient de même profils pour les opérateurs binaires (+, -, *, /, ). Une conséquence pratique est la possibilité d affecter une valeur à chacun des éléments d un tableau avec l instruction a=0.. Il existe par ailleurs un certain nombre de fonctions élémentaires : sum(t1), product(t1)! calcule la somme (le produit) de tous les éléments de t1 size(t1,i)! donne l étendue du tableau t2 selon la dimension i maxval(t1), minval(t1)! fournit la plus grande (petite) valeur de t1 dot product(t1,t2)! calcule le produit scalaire de deux tableaux de rang 1 et de même taille t1 et t2, qui peuvent être des tableaux de réels, d entiers, de complexes et même de booléens. matmul(a,b)! calcule le produit A*B de deux tableaux de rang 2 et dont les dimensions sont compatibles. 4.1.4 L instruction WHERE C est la généralisation du IF pour des tableaux, dans le sens où on va effectuer une opération logique sur un tableau et suivant le résultat élément par élément, effectuer une affectation spécifique. L exemple suivant montre comment récupérer la partie positive d un tableau, c est-à-dire effectuer l opération b=max(a,0) : 8

where( a >0.) b=a else where b=0. end where On pourrait dans l exemple précédent écrire : b=0. where( a >0.) b=a end where ou b=0. where( a >0.) b=a 4.2 Passage en arguments - profils implicites et automatiques J ai inclus ici les chaînes de caractères qui se comportent quelque peu comme des tableaux de caractères. Lorsqu on déclare un argument d entrée d une fonction ou d une procédure, on peut souhaiter ne pas définir explicitement le profil d un tableau. Fortran 90 autorise la définition implicite. Pour les tableaux en argument de sortie, on parlera de profil automatique. function f c t ( a, b ) real, dimension ( :, : ), intent ( in ) : : a character ( len= ), intent ( in ) : : b real, dimension ( size ( a, 1 ), size ( a, 2 ) ) : : f c t end function f c t 4.3 Tableaux dynamiques - attribut ALLOCATABLE ou POINTER Une autre possibilité est de déclarer un tableau et d allouer dynamiquement la mémmoire au moment où on en a besoin. Dans ce cas, on déclare un tableau de profil implicite avec l attribut ALLOCATABLE. program toto real, dimension ( :, : ), allocatable : : tab allocate ( tab ( 1 0, 2 0 ) ) deallocate ( tab ) end program toto Une remarque importante, la désallocation d un tableau dynamique doit se faire dans le même bloc programme (un programme, une fonction, ou une procédure) que la déclaration et l allocation. Cela a pour conséquence fondamentale que l on ne peut déclarer un tableau dynamique comme argument de sortie d une fonction ou d une procédure, du moins de manière rigoureuse, car certains compilateurs l autorisent. La solution à adopter est d utiliser un pointeur de tableau. Comme annoncé plus haut dans le paragraphe concernant les pointeurs, on peut se passer d une cible et d allouer la mémoire avec la fonction ALLOCATE, comme on le ferait en C avec la fonction malloc. 9

program toto real, dimension ( :, : ), pointer : : tab allocate ( tab ( 1 0, 2 0 ) ) deallocate ( tab ) end program toto Dans ce cas, on peut passer un tableau dynamique en argument de sortie. 5 Les formats 5.1 Les différents formats An représente n caractères. In représente un entier sur n caractères. Fn.p représente un réel en notation flottante avec n caractères dont p décimales. La virgule compte pour un caractère. En.p représente un réel en notation exponentielle avec n caractères au total dont p décimales dans la mantisse. nx représente n espaces. Ln représente un booléen sur n caractères. Tn représente un positionnement au n-ième caractère. / représente un passage à la ligne. * représente un format libre. 5.2 Formats et entrées / sorties standard L exemple suivant montre la syntaxe des entrées / sorties standard, avec différents formats, y compris par le biais d étiquette et de la fonction format : program i o s t d integer : : n=5 real : : x=0.5 character ( len=6) : : s= t e s t : print, s, n, x print (1 x, a6, i4, 1 x, f 8. 3 ), s, n, x print 199, n, x 199 format (1 x, t e s t :, i4, 1 x, f 8. 3 ) end program i o s t d 6 La gestion des entrées / sorties 6.1 Entrées / sorties séquentielles Les entrées / sorties séquentielles représentent l utilisation des fichiers la plus courante et la plus élémentaire, à savoir le parcours d un fichier ligne après ligne. 10

program i o s e q f i l e integer : : a real : : r open( unit =12, form= formatted, f i l e = toto. txt ) read ( 1 2, ) a close (12) open( unit =25, form= unformatted, f i l e = tata. txt, & status= new ) write (25) r close (25) end program i o s e q f i l e 6.1.1 OPEN et CLOSE Les arguments les plus courants des commandes OPEN et CLOSE sont : unit= (obligatoire en premier argument) la valeur 5 est réservée pour l entrée standard, la valeur 6 est réservée pour la sortie standard. De manière générale, 1 < unit < 99. status= permet de spécifier s il s agit d un fichier existant ( old ), à créer ( new ), à remplacer ( replace ), temporaire ( scratch ) ou de statut quelconque ( unknown ) form= (open uniquement) permet de spécifier si le fichier ouvert est binaire ( unformatted ) ou ASCII ( formatted ), c est à dire lisible par tout éditeur de texte. iostat=val la variable entière val sera initialisée à une valeur strictement positive en cas d erreur d entrée / sortie, ou nulle sinon. err=etiq permet de se positionner à l étiquette etiq en cas d erreur de lecture / écriture. position= (open uniquement) permet de se positionner dans le fichier ouvert, au début ( rewind ), à la fin ( append ), ou à la dernière position en date si fichier déjà ouvert ( asis ). 6.1.2 READ et WRITE Les arguments les plus courants des commandes READ et WRITE sont : unit (obligatoire en 1er argument) pour spécifier sur quel fichier on lit / écrit. fmt (fichier formaté uniquement) (obligatoire en 2ème argument) pour spécifier le formatage. iostat=val la variable entière val sera initialisée à une valeur strictement positive en cas d erreur d entrée / sortie, ou nulle sinon. err=etiq permet de se positionner à l étiquette etiq en cas d erreur de lecture / écriture. end=etiq (read uniquement) permet de se positionner à l étiquette etiq en cas de fin de fichier atteint prématurément. eor=etiq (read uniquement) permet de se positionner à l étiquette etiq en cas de fin d enregistrement (ligne) atteint prématurément. 6.2 Entrées / sorties à accès direct A la différence des entrées / sorties séquentielles, Fortran permet de gérer des fichiers à accès direct, c est-à-dire des fichiers où l on peut accéder à une ligne en particulier sans avoir parcouru les précédentes. Une des conséquence est que l on peut lire et écrire en même temps dans un fichier à accès direct, ce qui ne peut être le cas des entrées / sorties séquentielles. 11

program a c c e s d i r e c t character ( len =12) : : prenom= n i c o l a s, pre character ( len =20) : : nom= k i e l b a s i e w i c z, n integer : : annee =2008, a open( unit =15, f i l e = t a b l e. txt, access= direct, & recl =44, form= unformatted, status= new ) write ( 1 5, rec =2) nom, prenom, annee read (15, rec=1) n, pre, a close (15) end program a c c e s d i r e c t Les arguments spécifiques sont : access= direct pour spécifier que le fichier est en accès direct recl=44 pour spécifier la taille en octet (ou caractère) d un enregistrement rec=2 pour spécifier le numéro d enregistrement. 6.3 Entrées / sorties internes Cela correspond à la manipulation de chaînes de caractères comme de simples fichiers program i o s t r character ( len =10) : : a = 0123456789 integer : : n, p=0 real : : x read ( a, ( i3, f 6. 2 ) ) n, x print, n, x print ( i3, 1 x, f 7. 2 ), n, x write ( a ( 2 : 3 ), ( i 2 ) ) p print, a end program i o s t r 12