You are on page 1of 41

FAQ FORTRAN

Date de publication : Septembre 2008 Dernire mise jour : 15 avril 2009

Bienvenue sur la FAQ fortran, elle essayera de donner une rponse aux questions de base du FORTRAN. Je tiens souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont exactes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prtend pas non plus tre complte, des cours et une listes de livres sont donns dans la FAQ et sur dveloppez.com .

Ont contribu cette FAQ :

Germain Salvato-Vallverdu (Pageperso) -

FAQ FORTRAN

1. 2. 3. 4. 5. 6. 7. 8.

Information gnrale : (12) ........................................................................................................................................................4 Les variables en FORTRAN (13) ............................................................................................................................................. 9 Les boucles (9) ........................................................................................................................................................................ 15 O l'on apprend lire crire et compter ! (6) .........................................................................................................................19 Les fichiers (9) .........................................................................................................................................................................23 Les chanes de caractres (5) .................................................................................................................................................. 28 Les variables indices (listes, tableaux ...) : (10) .................................................................................................................... 31 Le programme principal et les sous programmes (6) ............................................................................................................. 35

-3Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > Information gnrale : Comment utiliser cette FAQ ?


Auteurs : Germain Salvato-Vallverdu , Cette FAQ est plutot orient sur l'utilisation de la norme 90 du FORTRAN et son utilisation en calcul numrique. Cliquez simplement sur une question pour avoir la rponse.

Comment participer cette FAQ ?


Auteurs : Germain Salvato-Vallverdu , Le plus simple est de contacter un des auteurs par message priv sur le forum de developpez.com.

D'o vient le FORTRAN ?


Auteurs : Germain Salvato-Vallverdu , Le langage FORTRAN est le premier langage de programmation........

Que signifie FORTRAN ?


Auteurs : Germain Salvato-Vallverdu , Le nom FORTRAN est une abrviation pour FORmula TRANslator.

Quel livre acheter ou lire ?


Auteurs : Germain Salvato-Vallverdu , Des cours sont disponibles dans la rubriques FORTRAN sur dveloppez.com. Une liste non exaustive de livres sur FORTRAN : Programmer en fortran 90, Claude Delannoy

-4Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Savez-vous parler Fortran ?, Maryse An

O puis-je trouver des cours tlcharger et consulter ?


Auteurs : Germain Salvato-Vallverdu , Des cours sont disponnibles dans la rubriques FORTRAN sur dveloppez.com.

Quels sont les compilateurs FORTRAN ?


Auteurs : Germain Salvato-Vallverdu , Le langage FORTRAN ncessite une compilation pour transformer le code en langage binaire comprhensible par l'ordinateur. La compilation cre un fichier binaire qui est excutable. Il existe diffrents compilateurs de code fortran dont voici une liste non exhaustive. Les compilateurs en italique sont payants. Fortran 77 g77 : disponnible dans toutes les distribution linux et dans cygwin. Fortran 90/95...2003 gfortran : disponnible dans les distributions linux ou ici g95 : disponnible ici ifort : Le compilateur de intel. Il est disponnible gratuitement pour un usage non commercial. ftn95 : Le compilateur de Silverfrost. absoft : lien. lahey : lien. xlf90 : Le compilateur pour les machines IBM : lien. pgf : Le compilateur Portland pour Fortran. pathf : Le compilateur Pathscale pour fortran.

Les outils pour crire un programme FORTRAN ?


Auteurs : Germain Salvato-Vallverdu , La premire chose est bien entendu de disposer d'un compilateur. Il faut ensuite crire le code. Le plus simple est d'utiliser un diteur de fichier texte tel que (g)vim, nedit ou encore emacs sous linux ou notepad ou le blocknote sous windows. Certains sont plus facile utiliser que d'autres et disposent de la coloration syntaxique qui permet de faciliter la lecture du code. Logiciel pour windows que je ne connais pas ....

-5Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Des stations de travail que je ne connais pas non plus : workstation ?

Qu'elle est la structure d'un programme FORTRAN ?


Auteurs : Germain Salvato-Vallverdu , Le langage FORTRAN a t initialement utilis sur des cartes perfores sur lesquelles tait inscrit le code pour tre ensuite lu et excut sur des grosses machines qui lisaient les cartes perfores. Les cartes perfores ayant une certaine largeur, il en tait de mme pour les lignes du code. Pour ces raisons historiques, jusqu'au fortran77 on utilisait le format fixe dans lequel les lignes sont limites en nombre de colonnes de la faon suivante : colonnes 1 5 : Etiquette ventuelle (label). colonne 6 : On place un chiffre ou un * dans la colonne 6 d'une ligne pour indiquer qu'elle contient la suite des instructions de la ligne prcdente. colonnes 7 72 : Ces colonnes contiennent les instructions. colonnes 73 80 : Ces colonnes taient libres pour numroter les cartes. Le format fixe
123456 PROGRAM bonjour c une ligne de commentaire commence par un c c declaration des variables c les instructions write(*,*)"bonjour" c fin du programme END PROGRAM bonjour

Depuis Fortran 90 le format libre est disponnible qui est plus souple. Cependant beaucoup de programme sont encore crit en format fixe ou dans un mlange des deux. Voici les principales caractristiques du format libre : Le code peut commencer la premire colonne. Les lignes du code ont une longueur maximale de 132 caractres. Les commentaires sont introduit par un ! (attention tout le reste de la ligne est un commentaire). Le & signifie que les instructions continuent la ligne suivante. Le ; permet de sparer deux instructions crites sur une mme ligne.

La structure gnrale du code est ensuite assez classique. Voici le fameux programme bonjour crit en format libre : Le format libre
PROGRAM bonjour ! une ligne de commentaire commence par un ! ! declaration des variables ! les instructions write(*,*)"bonjour" ! fin du programme

-6Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Le format libre
END PROGRAM bonjour

Comment insrer un commentaire ?


Auteurs : Germain Salvato-Vallverdu , Les commentaires sont trs important en programmation car ils facilitent la lecture du code. En fortran un commentaire s'insre simplement en commenant le commentaire par un !. Celui ci peut se placer sur n'importe qu'elle colonne du code dans la partie rserve au instructions. Format libre insrer un commentaire
PROGRAM bonjour ! ce programme crit bonjour ! je place un commentaire qui commence en dbut de ligne write(*,*)"bonjour" ! j'cris bonjour END PROGRAM bonjour

En format fixe on crit un commentaire en plaant un c dans la premire colonne.

Comment stopper un programme ?


Auteurs : Germain Salvato-Vallverdu , Le programme s'arrte lorsqu'il atteint la ligne comportant.
END PROGRAM nom_program

Remarque : Il suffit de END, le nom du programme est facultatif. Pour arrter un programme avant la fin du code, on utilise l'instruction stop. Celle-ci stoppera l'xcution. Il est possible de faire suivre l'instruction stop d'un message qui s'affichera lors de l'arrt du programme. Cela peut tre utile pour dbeuguer un programme, par exemple :
STOP "ligne 156"

L'instruction pause, permet de faire une pause dans l'excution du programme sans pour autant l'arrter compltement.

Comment couper une ligne trop longue ?


Auteurs : Germain Salvato-Vallverdu , En fortran77, qui utilise le format fixe, on indique au compilateur que l'instruction continue sur la ligne suivante en plaant un chiffre entre 1 et 9 ou une * en colonne 6 de la ligne suivante. Voici un exemple : En format fixe
PROGRAM ligne write(*,*)"blablablablablabla", * "et reblablabla" -7Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

En format fixe
!23456 END PROGRAM ligne

A partir du fortran90, qui utilise le format libre, il suffit de placer un & la fin de la ligne pour indiquer qu'elle continue la ligne suivante. Voici un exemple :
PROGRAM ligne write(*,*)"blablablablablabla", & "et reblablabla" END PROGRAM ligne

-8Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > Les variables en FORTRAN Quels sont les caractres utilisables pour les variables en FORTRAN ?
Auteurs : Germain Salvato-Vallverdu , En fortran, les variables ainsi que les noms de programmes, de sous programmes, de fonctions ou de modules sont limits 31 caractres et doivent obligatoirement commencer par une lettre. En fortran, sont considrs comme des lettres les 26 lettres de l'alphabet latin plus le caractre underscore _ . On peut ensuite utiliser les 26 lettres de l'alphabet latin le caractre underscore ou un chiffre. Exemples de noms de variables
! variables correctes _top top top122 _abcdefghijklmnopqrstuvwxyz1234 ! 31 characteres max ! variables incorectes 2var ! les variables doivent commencer par une lettres var-top ! pas de tiret var*top ! pas d'toile var+top ! pas de plus tat ! pas de lettre accentue 12345678910abcdefghijklmnopqrstuvwxyz_ ! trop de caractres

ATTENTION : Fortran ne prend pas en compte la casse des caractres. Ainsi Vect VECT et vect sont les mmes variables.

Quels sont les type de variables les plus usuels en fortran ?


Auteurs : Germain Salvato-Vallverdu , Comment dans la pluspart des langages les variables peuvent tre : des nombres entiers, integer, des chanes de caractres, character, des nombres rels, real ou double precision ou des lments logique (true, false), logical Chacun de ces types de variables peut tre un scalaire (un seul nombre), ou une liste de nombres. On parle alors de variables indices. Celles-ci peuvent avoir un seul indice (liste, vecteurs ...) ou plusieurs indices (matrices, tenseur ect ...). Ils existent d'autres type de variables moins utiliss

Comment dclarer un nombre entier ?


Auteurs : Germain Salvato-Vallverdu , Les variables contenant des nombre entier sont de type integer Dclaration d'un entier
! i est un entier

-9Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Dclaration d'un entier


integer::i

Comment dclarer un nombre rel en simple prcision ?


Auteurs : Germain Salvato-Vallverdu , Les variables contenant des nombres rels simples prcisions sont de type real, elles sont enregistres sur 4 octets soit 32 bits. Les nombres rels stocks sur 4 octets sont gnralement limits entre 10-38 et 10+38. Leur prcision est d'environ 10-7. Un nombre rel simple prcision a donc en gnral 7 chiffres significatifs. Dclaration d'un rel simple prcision
! r est un nombre rel simple prcision real::r ! en fortran77 on prcise le nombre d'octet real*4 r

Qu'est ce qu'un nombre rel double prcision ?


Auteurs : Germain Salvato-Vallverdu , Les variables contenant des nombres rels doubles prcisions sont de type double precision. Contrairement aux rels simples prcisions, les rels doubles prcisions sont stocks sur 8 octets, soit 64 bits. De cette manire la gamme des nombres pouvant tre enregistrs dans un rel double prcision est plus tandue que celle pouvant tre enregistre dans un rel simple prcision. Elle s'tend environ de 10-308 10+308 et donne des chiffres avec une prcision d'environ 10-15 soit 15 chiffres significatifs. Dclaration d'un rel double prcision
! d est un nombre rel double prcision double precision::d ! en fortran 77 on prcise le nombre d'octets real*8 d

Comment dclarer une variable chane de caractres ?


Auteurs : Germain Salvato-Vallverdu , En fortran, lorsqu'on dclare une chaine de caractre on spcifie sa longueur avec len. Une chaine de caractre peut contenir des lettres, des chiffres, des symboles ou des espaces vides, elle est de type character. Dclaration d'une chaine de caractre
! mot est une chaine de caratre de 100 lettres. character(len=100)::mot ! en fortran77 la syntaxe se rapproche de celle de la dclaration des rels

- 10 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Dclaration d'une chaine de caractre


character*100 mot

Comment dclarer une variable logique ?


Auteurs : Germain Salvato-Vallverdu , Une variable logique est de type logical. Elle prend deux valeurs possibles : .TRUE. ou .FALSE. Dclaration d'une variable logique
! test est une variable logique logical::test

Comment utiliser des parametres ?


Auteurs : Germain Salvato-Vallverdu , Une variable peut tre dclare comme paramtre. On doit alors assigner sa valeurs ds sa dclaration et elle n'est pas modifiable dans le reste du programme. On peut se servir de cette variable pour protger les valeurs des constantes ou encore pour dfinir les dimensions des variables indices. On peut se servir d'une variable paramtre pour dclarer la dimension d'une variable indice. Dclaration d'un paramtre
! on dclare que p est un paramtre entier integer,parameter::p=10 ! puis on se sert de p pour donner la dimension d'une variable indice double precision,dimension(1:p)::liste ! T est la temprature ambiante 300K double precision,parameter::T=300.d0 ! le nombre pi double precision,parameter::pi=acos(-1.d0) ! remarque : l'utilisation d'une fonction ici n'est pas accepte par tous les compilateurs

Comment calculer la partie entire d'un nombre rel ?


Auteurs : Germain Salvato-Vallverdu , La partie entire d'un rel est donne par la fonction int(). Calcul de la partie entire d'un rel
! n est la partie entire de x n = int( x )

Comment arrondir un rel son entier le plus proche ?


Auteurs : Germain Salvato-Vallverdu , L'entier le plus proche d'un rel x est donne par la fonction nint().

- 11 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Calcul de l'entier le plus proche d'un rel


! n est l'entier le plus proche de x n = nint( x )

Comment transformer un entier en rel ?


Auteurs : Germain Salvato-Vallverdu , Les fonctions real() et dble() permettent respectivement de transformer un entier en un rel simple prcision et un rel double prcision. Transformer un entier en rel
PROGRAM convert implicit none integer::n real::r double precision::d ! r est un rel simple prcision r = real(n) ! d est un rel double prcision d = dble(d) write(*,*)n,r,d END PROGRAM convert

Qu'est ce qu'un dpassement de capacit mmoire ?


Auteurs : Germain Salvato-Vallverdu , Chaque variable est enregistre dans un espace donn de la mmoire et sur un certain nombre d'octets. Il s'en suit qu'il existe un nombre maximal et minimal au del desquels il est impossible d'enregistrer la valeur dans une variable. Ainsi au cours de l'excution d'un programme, il faut qu'aucune des valeurs enregistres dans une variable soit supprieures ces limites. Pour calculer ces valeurs il faut savoir comment sont enregistrs les nombres dans la mmoire de l'ordinateur. Les nombres entier sont gnralement enregistrs sur 32 bits. Les nombres sont enregistrs en base 2 et chaque bit peut prendre la valeur 1 ou 0. Le premier bit est un bit de signe donc on utilise 31 bits pour enregistrer la valeur absolue du nombre. Le dernier bit correspond 20, l'avant dernier 21 ect ... L'entier le plus grand que l'on peut enregistrer en base 2 correspond au nombre pour lequel on a plac un 1 dans les 31 bits rservs. Donc Nmax = 1x230+1x229+1x228+...+1x21+1x20 Donc Nmax = 2147483646 Les nombres rels sont enregistrs sous forme scientifques 1.2345 E +123, en base 2. Les rels simples prcisions sont enregistrs sur 32 bits et les rels doubles prcisions sur 64 bits. Comme pour les entiers le dernier bit est pour le signe. Puis, suivant que l'on est en double ou simple prcision, on a 52bits ou 23 bits pour enregistrer la mantisse qui est la partie devant l'exposant et 11bits ou 8bits pour enregistrer l'exposant. Dans l'exposant il y a galement un bit pour le signe de l'exposant ce qui ramne le nombre 10bits pour les rels doubles prcisions et 7bits pour les simples prcisions.

- 12 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Avec 10bits l'exposant maximum pour un double prcision est de 1023. Comme le nombre est stock en base 2, la mantisse est multiplie au maximum par 21023 (et pas 101023). La gamme de nombres pouvant tre enregistre en rel double prcision est donc entre 10-308 et 10+308. Avec 7bits l'exposant maximum pour un simple prcision est de 127. La gamme de nombres pouvant tre enregistre en rel simple prcision est donc entre 10-38 et 10+38. La fonction huge() permet d'afficher la valeur des nombres maximum utilisables. Utilisation de la fonction huge
write(*,*)"Le plus grand entier ", huge (0) write(*,*)"Le plus grand rel ", huge (0.0) write(*,*)"Le plus grand rel en double prcision ",huge (0.0d0)

Dclaration implicit ou explicite ?


Auteurs : Germain Salvato-Vallverdu , En FORTRAN, on a le choix d'utiliser un mode de dclaration des variables explcite dans lequel on dclare toutes les variables ou un mode de dclaration implicite dans lequel on dfinit un type par dfaut pour certaines variable. L'instruction suivante impose que l'on dclare toutes les variables : Dclaration de toute les variables
PROGRAM bonjour implicit none ! toutes les variables doivent tre dclare integer::i,j double precision::d ! suite du programme utilisant i j et d END PROGRAM bonjour

L'instruction suivante dfinit que toutes les variables qui commencent par une lettre entre i et n inclu soient de type integer et que les autres soient de type real (on remarquera que i et n sont les deux premires lettres de integer). On peut dfinir un type implicite pour les double prcision en remplaant real par double precision dans l'instruction suivante. Dclaration implicite des
PROGRAM bonjour implicit real (a-h,o-z) ! il est inutiles de dclarer les variables i,j et d de l'exemple prcdent ! suite du programme utilisant i j et d END PROGRAM bonjour

La commande implicit none est une nouveaut du FORTRAN90 et divise la communaut des utilisateurs de FORTRAN. Certains considrent que la dclaration implicite des variables simplifie et limite grandement la dclaration des variables. D'autres trouvent que la dclaration implicite est dangereuse et rend plus difficle la lecture d'un programme. Nous ne trancherons pas sur cette question ici, chacun de faire son choix.

- 13 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Avantages de la dclaration implicite des variables Simplification et allgement de la dclaration des variables Avantages de la dclaration explicite de toutes les variables Evite les erreurs duent aux fautes de frappes des variables Facilite la lecture d'un programme inconnue

- 14 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > Les boucles Comment dire Si ... et Sinon ... (Boucle IF THEN ELSE) ?
Auteurs : Germain Salvato-Vallverdu , La structure If...Then...(ElseIf)...Else...EndIf permet d'introduire des conditions et d'excuter certaines lignes de code si ces conditions sont vrais. Syntaxe gnrale d'une boucle IF
If ( condition1 ) Then ! instructions raliser ElseIf (condition2 ) Then ! instructions raliser ElseIf (condition3 ) Then ! instructions raliser Else ! instructions raliser Endif si condition1 est vrai si condition2 est vrai si condition3 est vrai si aucun des trois conditions n'est vrai

Si on a une seule condition et une seule instruction, on peut galement utiliser le If logique dont la syntaxe est : Syntaxe du If logique
If ( condition ) instruction raliser si condition est vrai

Comment crire une condition d'galit ?


Auteurs : Germain Salvato-Vallverdu , En programmation le signe = est rserv l'assignation d'une valeur une variable. Pour tester l'galit de deux variables on utilise le signe == (.eq. en FORTRAN77).
! crire i et j s'ils sont gaux If (i == j ) write(*,*)"i et j sont gaux"

Il est dangereux d'crire une condition d'galit entre des rels. En effet, les nombres rels sont soumis un arrondi du leur enregistrement sur un nombre limit de bits. Il s'en suit que la manipulation des rels peut conduire l'introduction d'erreur numrique. Celle-ci sont gnralement suffisament faible pour ne pas perturber les rsultats mais aboutissent au fait que 2 rels ne sont, en pratique, jamais gaux car ils n'ont pas t arrondis de la mme manire.

Quelle est la diffrence entre = et == ?


Auteurs : Germain Salvato-Vallverdu , En fortran comme dans la plupart des langage de programmation le signe = se lit "reoit" et sert assigner une valeur une variable. Le signe == sert lui tester l'galit entre deux variables.
! on affecte 1 la variable i i = 1 ! on teste si i et j sont gaux

- 15 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

If (i == j ) write(*,*)"i et j sont gaux"

Comment crire suprieur, infrieur, suprieur ou gal et infrieur ou gal ?


Auteurs : Germain Salvato-Vallverdu , Le tableau suivant rcapitule les diffrents comparateurs : Comparateur suprieur suprieur ou gal Infrieur Infrieur Diffrent Symbole en FORTRAN90 i>j i >= j i<j i <= j i /= j Symbole en FORTRAN77 i .gt. j i .ge. j i .lt. j i .le. j i .ne. j

Quels sont les oprateures logiques ?


Auteurs : Germain Salvato-Vallverdu , Le tableau suivant regroupe les diffrents oprateurs logiques. Oprateur condition1 .AND. condition2 condition1 .OR. condition2 .NOT. condition1 Exemple d'utilisation d'oprateur logique
If ( i ! i ElseIf ! i ElseIf ! i Endif > 10 .AND. i < 20 ) Then est entre 10 et 20 ( i == 10 .OR. i == 20 ) Then gale 10 ou 20 ( .NOT. i == 1 ) Then n'est pas gal 1

Effet condition1 ET condition2 condition1 OU condition2 L'inverse de condition1

Comment faire rpter une srie d'instructions (boucle DO) ?


Auteurs : Germain Salvato-Vallverdu , Il est quelque fois intressant de rpter un grand nombre de fois une mme instructions sur une srie de variables. La boucle DO...ENDDO est faite pour a. Dans l'exemple suivant on va rpter les instructions pour des valeurs d'un entier i allant de l'entier debut l'entier fin par incrment de pas. Syntaxe gnrale d'une boucle DO
! i est un entier qui sert de compteur integer::i,debut,fin,pas Do i=debut,fin,pas ! instructions Enddo

Voici par exemple comment calculer la somme des 20 premiers entiers :

- 16 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Somme des 20 premiers entiers


PROGRAM somme implicit none integer::i,som Do i=1,20,1 som = som + 1 Enddo write(*,*)"somme :",som END PROGRAM somme

Les lments dfinissant le debut, la fin et le pas de la boucle peuvent tre des expressions arithmtiques entires. Il est possible de ne pas dfinir de compteur et de faire une boucle infinie. Il faut alors ajouter une instruction de sortie l'intrieur de la boucle en utilisant la commande exit

Comment sortir prmaturment d'une boucle DO ?


Auteurs : Germain Salvato-Vallverdu , Il est parfois intressant de pouvoir sortir d'une boucle d'o avant la fin du compteur. Ou encore de ne pas mettre de compteur et de sortir de la boucle lorsqu'une condition est ralise. Pour cela on se sert de la commande exit
Do i=1,10,1 ! instructions If( condition ) exit ! si condition est vrai on sort de la boucle Enddo

Comment passer une itration d'une boucle DO ?


Auteurs : Germain Salvato-Vallverdu , Supposons que le compteur d'une boucle DO...ENDDO aille de 1 10 mais que l'on ne veux pas passer par la valeur 6. Dans ce cas on utlise la commande cycle pour passer la valeur 6 du compteur et recommencer l'itration 7. Exemple
Do i=1,10,1 If( condition ) cycle ! si condition est vrai on passe l'itration suivante ! instructions Enddo

Comment construire une liste de choix (SELECT CASE) ?


Auteurs : Germain Salvato-Vallverdu , Soit choix un entier. La boucle Select Case permet en fonction de la valeur de choix d'excuter une srie d'instructions. Il s'agit en fait d'une boucle du mme genre qu'une srie d'instruction If ElseIf EndIf. Boucle select case
Select case(choix) case(1) ! si choix gal 1 excuter les instructions suivantes case(2,3)

- 17 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Boucle select case


! si choix gal 2 ou 3 excuter les instructions suivantes case(4:10) ! si choix est compris entre 4 et 10 inclus excuter les instructions suivantes case(11:) ! si choix est supprieur ou gal 11 excuter les instructions suivantes case default ! sinon excuter les instructions suivantes End Select

- 18 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > O l'on apprend lire crire et compter ! Comment faire crire quelque chose ?
Auteurs : Germain Salvato-Vallverdu , On utilise tout simplement la traduction litrale de l'anglais, la commande write dont voici la syntaxe gnrale : Syntaxe gnrale de la commande write
write( "o" , "comment") ! o = o est ce que je dois crire. ! comment = comment est ce que je dois crire, le format.

On spcifie o est ce qu'on doit crire en donnant le numro logique de la sortie utiliser. Par exemple, 6 dsigne l'cran. On spcifie comment est ce qu'on doit crire en donnant le format faire un lien vers format. Un exemple d'utilisation de la commande write
! exemples pour crire bonjour ! sur la sortie standard au format standard write(*,*)"bonjour" ! sur la sortie 18 au format a qui est celui des chaine de caractres write( 18 , "(a)" )"bonjour"

Les toiles dsignes les valeurs par dfaut. La sortie standard de la commande write est l'cran, Le format toile est un format standard qui dpend des compilateurs. En gnral, les numros logiques de 1 10 sont rservs et dsignent divers prifriques de l'ordinateur (par exemple 6 est l'cran). Les nombres suivants peuvent tre attribu des fichiers ou d'autres prifriques. Si l'on souhaite crire plusieurs variables ou chanes de caractres, on les spare par une virgule. Exemple avec plusieurs variables
real::a,b,c a = 2.0 b = 4.0 c = 6.0 write(*,*)"a = ",a," b = ",b," c = ",c

Comment lire quelque chose ?


Auteurs : Germain Salvato-Vallverdu , On utilise tout simplement la traduction litrale de l'anglais, la commande read dont voici la syntaxe gnrale : Syntaxe gnrale de la commande read
read( "o" , "comment" ) ! o = o est ce que je dois lire ! comment = comment est ce que je dois lire

On spcifie o est ce qu'on doit lire en donnant le numro logique de l'entre utiliser. Par exemple, 5 dsigne le clavier. On spcifie comment est ce qu'on doit lire en donnant le format dans lequel est crit ce que l'on souhaite lire. faire un lien vers format.

- 19 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Exemples de lectures avec la commande read


! on demande l'utilisateur de saisir un entier write(*,*)"crire un entier positif" ! on lit l'entier sur * = le clavier au format * et on l'enregistre dans entier read(*,*)entier ! on affiche l'cran l'entier que l'on vient de lire write(*,*)"vous avez cris ",entier

La structure prcdente contenant un write-read-write est vivement recommande car elle permet de vrifier ce que l'on a lu. Pour lire plusieurs variables en mme temps, on les spare par une virgule. Dans l'exemple suivant, l'utilisateur devra saisir son nom puis tapper "Entre", puis saisir son prnom et tapper "Entre". Exemples de lectures avec la commande read
write(*,*)"Quel est votre nom et votre prenom ?" read(*,*)nom,prenom write(*,*)" nom = ",nom," prenom = ",prenom

Comment imprimer quelque chose l'cran ?


Auteurs : Germain Salvato-Vallverdu , Pour crire quelque chose l'cran, on va utiliser la commande write, en spcifiant le numro logique de l'cran, 6, ou en utilisant la sortie standard, *, qui correspond l'cran. Exemple d'impression l'cran
write(6,*)"coucou" write(*,*)"coucou"

Comment lire une entre au clavier ?


Auteurs : Germain Salvato-Vallverdu , Pour lire quelque chose partir du clavier, on va utiliser la commande read, en spcifiant le numro logique du clavier, 5, ou en utilisant l'entre standard, *, qui correspond au clavier. Exemple de lecture au clavier
! lecture d'un entier au clavier read(5,*)entier read(*,*)entier

Comment reprer une erreur de lecture ?


Auteurs : Germain Salvato-Vallverdu , Avec err On peut utiliser l'option err dans l'instruction read pour renvoy l'excution du programme une certaine ligne du code repre par une tiquette s'il y a une erreur de lecture. Dans ce cas il est ncessaire d'utiliser le format fixe.

- 20 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Exemple d'utilisation de err


PROGRAM erreur implicit none integer::entier write(*,*)"entrer un entier" read(*,"(i5)",err=100)entier write(*,"(i5)")entier ! suite des instructions STOP "fin normale du programme" STOP "erreur de lecture" END PROGRAM erreur

! lecture avec un format i5 ! criture avec un format i5

100

Avec iostat On peut utiliser l'option iostat dans l'instruction read qui permet d'enregistrer dans un entier un nombre qui permet d'indentifier s'il y a une erreur et de quel type. La valeur de l'entier dpend du compilateur mais son signe est normalis. Si l'entier est nul, il n'y a pas d'erreur. Dans le cas de la lecture d'un fichier, une valeur ngative signifie que l'on a atteint la fin du fichier. Une valeur positive signifie toujours une erreur. Exemple d'utilisation de iostat
PROGRAM erreur implicit none integer::entier,io write(*,*)"entrer un entier" read(*,"(i5)",iostat=io)entier If( io /= 0 ) Then write(*,"(i5)")entier Else STOP "erreur de lecture" Endif ! suite des instructions ... END PROGRAM erreur

! lecture avec un format i5 ! criture avec un format i5

Comment faire une opration mathmatique ?


Auteurs : Germain Salvato-Vallverdu , On utilise les symboles habituels des oprations d'additions (+), de soustractions (-), de multiplications (*) et de la division (/). La puissance se fait par une double toile. Oprateurs mathmatiques
PROGRAM calcul implicit none integer::i,j,som,sous,prod,div,pui i = 2 j = 3 ! addition de i et j som = i + j ! soustraction de i et j sous = i - j

- 21 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Oprateurs mathmatiques
! multiplication de i et j prod = i * j ! division de i et j div = i / j ! i puissance j pui = i ** j END PROGRAM calcul

- 22 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > Les fichiers Comment est crit le contenu d'un fichier ?
Auteurs : Germain Salvato-Vallverdu , Il existe deux types de fichiers : les fichiers ASCII et les fichiers binaires. Les fichiers ASCII sont des fichiers dans lesquels ce qui est crit est format et lisible par quelqu'un, par exemple un fichier texte. Comme leur nom l'indique les fichiers binaires sont crits en langage binaire et ne sont pas directement lisible par quelqu'un. Il doit se servir d'un programme pour les lires et formater ce qu'ils contiennent. En FORTRAN, on peut crer soit des fichiers formats (ASCII) soit des fichiers binaires et lire ou crire sur ces deux types de fichiers. Pour cela on spcifie lors de l'ouverture du fichier de quel type il est avec l'option form. Choix du type de contenu d'un fichier
! ouverture d'un fichier binaire open(11, file="fichier_binaire", form="unformatted") ! ouverture d'un fichier ASCII open(11, file="fichier_ASCII", form="formatted")

Par dfaut, si l'on ne prcise pas l'option form dans l'instruction open les fichiers sont formats (ASCII).

Comment lire ou crire dans un fichier ?


Auteurs : Germain Salvato-Vallverdu , On utilise les instructions read et write en spcifiant le numro logique attribu au fichier sur lequel on veut crire. La syntaxe de lecture va dpendre de l'accs (direct ou squentiel) et du type de contenu des fichiers (ASCII ou binaire) : Exemple lecture criture dans un fichier
! pour lire sur un fichier squentiel format write( "o", "comment") ! pour crire sur un fichier squentiel format read( "o", "comment") ! on associe le fichier toto au numro logique 11 open(11,file="toto",form="formatted",access="sequential") ! on lit un entier sur toto read(11,*)entier ! on crit un entier sur toto write(11,*)999,entier ! pour lire/crire sur un fichier binaire on ne prcise pas le format open(11,file="fichier_binaire",form="unformatted") write(11)entier read(11)entier ! pour lire/crire sur un fichier accs direct on prcise l'enregistrement lire opent(11,file="fichier_direct",form="unformatted",access="direct") write(11,rec=3)entier

- 23 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Exemple lecture criture dans un fichier


read(11,rec=10)entier

Comment FORTRAN accde-t-il au contenu d'un fichier ?


Auteurs : Germain Salvato-Vallverdu , Chaque ligne d'un fichier s'appelle un enregistrement. En fortran il existe deux moyens d'accder au contenu d'un enregistrement : un accs direct ou un accs squentiel. Dans un accs direct, on lit ou crit directement l'emplacement que l'on veut. Dans un accs squentiel, il est ncessaire de lire tous les emplacements qui prcdent celui que l'on souhaite lire. De faon image, on peut assimiler une lecture accs squentiel la lecture d'une cassette vido (il faut lire le dbut de la cassette avant de lire la partie qui nous intresse) ; on peut assimiler une lecture accs direct la lecture d'un CD ou DVD sur lequel on lit directement la musique ou le chapitre que l'on souhaite. Les enregistrement des fichiers accs direct ont une taille fixe qui est dtermine l'ouverture du fichier. Celle des fichiers accs squentiel peut varier d'un enregistrement l'autre. Si la taille des enregistrement varie beaucoup d'une ligne l'autre, il s'ensuit qu'un fichier squentiel est gnralement plus lger qu'un fichier direct. On prcise le type d'accs aux enregistrements du fichier par l'option acces de l'instruction open. Dans le cas d'un accs direct il faut galement prciser la longueur des enregistrements par l'option recl qui est un entier correspondant au nombre de caractres pour les fichiers ASCII. Choix du type d'accs aux enregistrement d'un fichier
! ouverture d'un fichier accs direct avec 100 caractres par enregistrement (=lignes) open(11, file="fichier_direct", acces="direct", recl=100) ! ouverture d'un fichier accs squentiel open(11, file="fichier_sequentiel", acces="sequential")

Comment ouvrir un fichier ?


Auteurs : Germain Salvato-Vallverdu , Pour agir sur un fichier depuis un proramme fortran on lui attribue un numro logique. Pour cela, on utilise l'instruction open. Le numro logique dfinit le chemin qui permettra d'accder au fichier pour le lire ou crire dedans. Les numros logiques infrieurs 10 sont rservs, on ne les utilise pas. Synataxe gnrale de open
! syntaxe minimale open( numero , file="nom du fichier") ! exemples open( 11, file="monfichier") open( 23, file=fichier) ! o fichier est une variable chaine de caractre open( i, file="monfichier) ! o i est un entier ou une exepression arithmtique

Par dfaut les fichiers sont des fichiers ASCII (formats) et accs squentiel. Voici une syntaxe plus complte de l'instruction open. Pour connatre l'ensemble des options consulter l'un des cours disponibles.

- 24 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Syntaxe plus complte de open


! syntaxe complte open( numero , file="mon_fichier", acces="sequential"/"direct", & form="formatted"/"unformatted", & action="read"/"write"/"readwrite", & position="asis"/"rewind"/"append" )

Comment fermer un fichier ?


Auteurs : Germain Salvato-Vallverdu , Les fichiers sont automatiquement ferms si l'excution rencontre une instruction stop ou end. On peut fermer un fichier avant la fin de l'excution du programme avec l'instruction close. syntaxe de l'instruction close
! fermeture du fichier close( numero logique du fichier) ! exemples close(11) close(i) close(2*i + 1)

Comment protger un fichier en criture ?


Auteurs : Germain Salvato-Vallverdu , S'il vous arrive d'craser un de vos fichiers au cours de l'excution de vos programmes cette option de l'instruction open est faites pour vous. Elle permet l'ouverture du fichier de dfinir ses permissions de lecture et d'criture. Choix des permissions l'ouverture d'un fichier
! ouverture en lecture seule open(numero, file="mon_fichier", action="read") ! ouverture en criture seule open(numero, file="mon_fichier", action="write") ! ouverture en lecture et criture (dfaut) open(numero, file="mon_fichier", action="readwrite")

Comment tester l'existance d'un fichier ?


Auteurs : Germain Salvato-Vallverdu , Il peut tre utile l'intrieur d'un programme fortran, de dtecter l'existence d'un fichier avant de lire ou crire dedans. Pour cela on utilise l'instruction inquire. Elle ne se limite pas cela mais voici un exemple d'utilisation pour tester l'existence d'un fichier.
! on utilise une variable logique logical::exite ! on teste l'existence de mon_fichier inquire( file="mon_fichier", exist=existe) ! la rponse est dans la variable existe If ( existe ) Then

- 25 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

! existe = .true. write(*,*)"le fichier existe" ElseIf( .NOT. existe) Then ! existe = .false. write(*,*)"le fichier n'existe pas" STOP Endif

Comment crire directement la fin d'un fichier ?


Auteurs : Germain Salvato-Vallverdu , Par dfaut, l'ouverture d'un fichier, on crit ou on lit sur la premire ligne du fichier. Dans l'instruction open l'option position permet de choisir la ligne sur laquelle on se positionne lors de l'ouverture du fichier. Ecrire la fin du fichier
! on ouvre le fichier avec position = "append" open( 10, file="mon_fichier", position="append") ! on va crire la suite du fichier write(10,*)"j'cris sur la dernire ligne"

Comment reprer la fin d'un fichier ?


Auteurs : Germain Salvato-Vallverdu , Lors de la lecture d'un fichier, on peut rajouter dans l'instruction read l'option end=etiquette qui permet de renvoyer l'excution du programme la ligne marque par l'tiquette lorsque l'on atteind la fin du fichier. Dans ce cas il faut utiliser les tiquettes et le format fixe. Dtection de la fin du fichier avec end
! on va lire un fichier dont on ne connait pas le nombre de ligne open(10, file="fichier") i=0 Do read(10,*,end=1000)var1,var2 i = i + 1 Enddo write(*,*)"la lecture a atteind la fin du fichier" write(*,*)"le nombre de ligne est : ",i

1000

Lors de la lecture d'un fichier, on peut rajouter dans l'instruction read l'option iostat=entier. Si la fin du fichier est atteinte, entier prendra une valeur ngative. La valeur dpend du compilateur on testera donc simplement le signe. Dtection de la fin du fichier avec iostat
! on va lire un fichier dont on ne connait pas le nombre de ligne open(10, file="fichier") i=0 Do read(10,*,iostat=io)var1,var2 If( io < 0 ) exit i = i + 1 Enddo write(*,*)"la lecture a atteind la fin du fichier"

- 26 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Dtection de la fin du fichier avec iostat


write(*,*)"le nombre de ligne est : ",i

- 27 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > Les chanes de caractres Comment affecter une valeur une chane de caractres ?
Auteurs : Germain Salvato-Vallverdu , Une chane de caractres se note entre guillemets simples ou doubles. On affecte une valeur une chane de caractres avec le signe = comme pour les autres types de variable. Exemple de chane de caractres
character(len=20)::chaine chaine = "une chaine de caractre"

Une chane de caractres a une certaine longueur, donne lors de sa dclaration (le paramtre len). Elle ne peut pas contenir plus de caractres que le nombre indiqu lors de sa dclaration. Si la chane de caracres que l'on veut enregistrer dans une variable est plus longue que la longueur de la variable, seuls les premiers caractres sont enregistrs. Si la chane de caractres que l'on veut enregistrer dans une variable est plus courte que la longueur de la variable les caractres manquants sont complts par des espaces (peut dpendre du compilateur). Exemples
character(len=4)::courte character(len=20)::longue courte = "bonjour" ! la variable courte ne contient que "bonj" longue = "bonjour" ! la variable longue contient "bonjour

"

Comment trouver la longueur d'une chaine de caractre ?


Auteurs : Germain Salvato-Vallverdu , On utilise la fonction len qui renvoie un entier dont la valeur est la longueur de la chaine. Utilisation de len
character(len=100)::mot integer::long ! longueur de mot long = len(mot) mot = "bonjour" ! dans mot on a mis la chaine de caractres "bonjour" pour connaitre la longueur ! de cette chaine on doit en premier supprimer les blancs en bout de chaine ! on utilise trim long = len( trim( mot ) ) ! dans ce cas long = 7 qui est la taille de bonjour

Comment reprer une sous-chaine dans une chaine ?


Auteurs : Germain Salvato-Vallverdu , La fonction index(chaine1,chaine2) renvoit un entier dont la valeur est gale la position du premier caractre de chaine2 dans chaine1. Si chaine2 n'est pas prsente dans chaine1 elle renvoit 0.

- 28 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Cette fonction peut tre trs utile par exemple pour reprer une ligne dans un fichier o est inscrit un repre. Exemple d'utilisation de index
... character(len=100)::ligne integer::k ! ouverture du fichier open(10,file="resultats",action="read") ! recherche du repre Do ligne = "" read(10,"(a)")ligne k = index( ligne , "repere" ) ! si k n'est pas 0 c'est que ligne contient "repere" If( k /= 0 ) exit Enddo ! lecture des informations souhaites sur ligne ou sur la suite du fichier ...

Comment lire et crire dans une chaine ?


Auteurs : Germain Salvato-Vallverdu , Les commandes read et write permettent de lire ou crire dans une chane de caractre. Il suffit d'inscrire le nom de la chane de caractre dans source de lecture ou la destination d'criture. Exemple de lecture ou criture dans une chane de caractre
! criture dans num integer::k character(len=4)::num k=1234 write(num,"(i4)")k ! * * * * * * * * * ! lecture dans ligne character(len=100)::ligne character(len=4)::var ! ligne contient " x = 3 " read(ligne,*)var,entier

L'criture dans une variable chane de caractre par rapport une simple affectation prsente l'intrt que l'on peut choisir le format dans lequel on crit.

Comment supprimer les espaces la fin d'une chane de caractres ?


Auteurs : Germain Salvato-Vallverdu , On utilise la fonction trim qui renvoie une chane de caractres dans laquelle les espaces la fin de la chane ont t supprims. Exemple d'utilisation de la fonction trim
character(len=10)::chaine

- 29 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Exemple d'utilisation de la fonction trim


chaine = "bonjour" write(*,*)chaine,"XX" ! rsultats :bonjour

XX

write(*,*)trim(chaine),"XX" ! rsultats :bonjourXX

Attention, fortran complte les automatiquement les chanes de caractres par des espaces, donc si on remplace le contenu d'une variable chane de caractre par son contenu en ayant supprim les espaces ils sont rajouts automatiquement pour complter la longueur de la variable chane de caractres. Attention la longueur des chanes
! on reprend l'exemple prcdent character(len=10)::chaine character(len=7)::courte chaine = "bonjour" ! chaine contient "bonjour

"

chaine = trim(chaine) ! comme les caractres manquants sont complts par des espaces ! chaine contient toujours "bonjour " courte = trim(chaine) ! courte contient "bonjour"

La fonction trim est trs utile pour crire des noms de fichier dans une variable chane de caractres car elle permet d'avoir des noms de fichier sans espaces.

- 30 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > Les variables indices (listes, tableaux ...) : Qu'est ce qu'une variable indice ?
Auteurs : Germain Salvato-Vallverdu , Une variable simple correspond une zone mmoire et contient une valeur. Il est possible de regrouper sous un mme nom de variable un ensemble de zone mmoire et donc un ensemble de valeurs. Chaque valeur (ou zone mmoire) de la mme variable est alors reprs par un indice. C'est variables sont, par exemple, des listes (variables un indices) ou des tableaux (variables 2 indices) ect ... Elles sont trs largement utilise dans les programmes.

Comment dclarer une variable indice ?


Auteurs : Germain Salvato-Vallverdu , Pour dclarer une variable indice, il faut prciser son type (entier, rel, chane de caractres ...) et sa dimension, c'est dire le nombre d'lments qu'elle contient. Pour ce qui est de la dimension, depuis Fortran90 on a deux possibilits : une dclaration statique ou dynamique. Dans une dclaration statique, la dimension de la variable est donne au dpart et est fixe pour le reste du programme. A l'excution du programme une zone mmoire dont la taille dpend de la dimension est rserve pour toute la dure de l'excution. Dclaration statique
! une liste d'entier integer,dimension(1:10)::liste ! un tableau de rel double prcision double precision,dimension(1:10,-5:5)::tableau ! un autre tableau de rel double prcision double precision,dimension(10,10)::tableau ! cette dclaration est quivalente double precision,dimension(1:10,1:10)::tableau

On remarque que lorsqu'on donne la dimension d'une liste ou d'un tableaun, on peut prciser les valeurs min et max des indices. Ceux-ci ne commencent pas forcment 1 ou 0. Dans le troisime exemple on ne donne que la dimension, 10, l'indice commence alors 1. Dans une dclaration dynamique, on ne prcise que le nombre d'indices souhaits. Puis, pendant l'excution, on alloue, avec la commande allocate, la mmoire ncessaire au moment ou on a besoin de la variable. On peut ensuite librer la zone mmoire lorsqu'on n'en a plus besoin, avec la commande deallocate. Dclaration dynamique
! une liste d'entier integer,dimension(:),allocatable::liste allocate( liste( ndim ) ) .... deallocate( liste(:) ) ! un tableau de rel double prcision double precision,dimension(:,:),allocatable::tableau allocate( tableau( 1:ndim ,-ndim:ndim ) ) ....

- 31 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Dclaration dynamique
deallocate( tableau(:,:) )

L'intrt d'allouer les variables indices de faon dynamique est de n'utiliser que la mmoire ncessaire au moment o on en a besoin. De plus, on peut calculer la dimension d'une variable indice dans le programme et avoir une variable indice de la dimension souhaite. Remarque : Dans les sous programmes la dclaration dynamique est impossible, sauf dans le cas des modules. Dans le cas de la dclaration statique, l'utilisation des paramtres pour dclarer les dimensions des variables est utile.

Comment affecter une valeur une variable indice ?


Auteurs : Germain Salvato-Vallverdu , On utilise la mme syntaxe que pour une variable normale, sauf qu'il faut prciser le ou les indices. Affecter une valeur
! liste des premiers entiers impairs liste(1) = 1 liste(2) = 3 liste(3) = 5 liste(4) = 7 ! la matrice unit en dimension 2 M(1,1) = 1.d0 ; M(1,2) = 0.d0 M(1,1) = 0.d0 ; M(1,2) = 1.d0

Comment agir sur tout ou une partie d'une variable indice ? (Fortran90)
Auteurs : Germain Salvato-Vallverdu , En fortran77, pour agir sur plusieurs lments d'une variable indice, il faut crire une instruction pour chaque lment ou crire une boucle. Le fortran90 permet d'agir sur plusieurs lments en une seule instructions. affectation multiple
integer,parameter::ndim=10 integer,dimension(1:ndim)::liste double precision,dimension(ndim,ndim)::matrice ! liste(:) se rfre l'ensemble des lments de liste ! matrice(:,:) se rfre l'ensemble des lments de matrice ! j'affecte 0 tous les lments de liste liste(:) = 0 ! j'affecte 0.d0 tous les lments de matrice matrice(:,:) = 0.d0 ! on met un 1.d0 dans la premire ligne de matrice matrice(1,:) = 1.d0 ! on met un 2 dans les lments de ndim/2 ndim de liste liste( ndim/2 : ndim ) = 2

- 32 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Remarque : Il n'est pas ncessaire de prciser les : entre parenthses, le nom de la variable est suffisant. Cependant par un souci de clart et de lisibilit du programme il est prfrable de l'crire.

Comment faire des oprations sur des variables indices ? (Fortran90)


Auteurs : Germain Salvato-Vallverdu , Le fortran 90 permet d'additionner et soustraire des variables indices de mme dimension sans utiliser de boucles. On utilise simplement les oprations standards comme pour une variable normale. Exemple d'oprations
double precision,dimension(3)::u,v,w,x ! somme de deux vecteurs w(:) = u(:) + v(:) ! diffrence de deux vecteurs w(:) = u(:) - v(:) ! ou encore w(:) = 3.d0*u(:) - 0.5d0*v(:) + 2.d0*x(:)

La multiplication ou division de variables indices ayant un sens particulier (produit scalaire, produit de matrice), des fonctions spciales sont disponibles. Remarque : Il n'est pas ncessaire de prciser les : entre parenthses, le nom de la variable est suffisant. Cependant par un souci de clart et de lisibilit du programme il est prfrable de l'crire.

Comment additionner tous les lments d'une variables indices ? (Fortran90)


Auteurs : Germain Salvato-Vallverdu , On utilise la fonction sum(arg). Exemple de somme
integer,parameter::ndim=10 double precision,dimension(ndim)::liste double precision,dimension(ndim,ndim)::matrice double precision::somme somme = sum( liste(:) ) ! normalisation de liste liste(:) = liste(:) / sqrt( sum( ( liste(:) )**2 ) ) somme = sum( matrice(:,:) )

Comment multiplier tous les lments d'une variable indice ? (Fortran90)


Auteurs : Germain Salvato-Vallverdu , On utilise la fonction product(arg). Exemple de produit
integer,parameter::ndim=10 - 33 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Exemple de produit
double precision,dimension(ndim)::liste double precision,dimension(ndim,ndim)::matrice double precision::produit produit = product( liste(:) ) produit = product( matrice(:,:) )

Comment transposer une matrice ? (Fortran90)


Auteurs : Germain Salvato-Vallverdu , On utilise la fonction transpose(arg). Exemple de produit
integer,parameter::ndim=3 double precision,dimension(ndim,ndim)::A,tA tA(:,:) = transpose( A(:,:) )

Comment multiplier deux matrices ? (Fortran90)


Auteurs : Germain Salvato-Vallverdu , On utilise la fonction matmult(arg1,arg2) qui permet de faire un produit de matrice. Il est cependant ncessaire que le premier indice soit celui de la ligne et le second celui de la colonne. Produit de matrices
integer,parameter::ndim=3 double precision,dimension(ndim,ndim)::A,B,P double precision,dimension(ndim)::X,Y ! Le produit de matrice A*B P(:,:) = matmult( A(:,:) , B(:,:) ) ! Matrice vecteur Y(:) = matmult( A(:,:) , X(:) )

ATTENTION : Comme dans un produit de matrice, le nombre de colonnes du premier argument de matmult doit tre gal au nombre de lignes du second argument.

Comment calculer un produit scalaire ? (Fortran90)


Auteurs : Germain Salvato-Vallverdu , On utilise la fonction dot_product(arg1,arg2), qui calcule le produit scalaire des vecteurs donns en arguments 1 et 2. Exemple de produit scalaire
integer,parameter::ndim=10 double precision,dimension(ndim)::X,Y double precision::scalaire scalaire = dot_product( X(:) , Y(:) )

- 34 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Sommaire > Le programme principal et les sous programmes Quelle est la diffrence entre une FUNCTION et une SUBROUTINE ?
Auteurs : Germain Salvato-Vallverdu , Les function et les subroutine sont littralement traduits de l'anglais par fonction et sous-programme. Ce sont les deux types de sous programmes disponnibles en Fortran. Les diffrences majeures entre une fonction et une subroutine sont : Une function est galement une variable qui contient le rsultat de la fonction alors que le ou les rsultats d'une subroutine sont en paramtres. Il s'ensuit qu'une fonction doit tre dclare. Pour appeler une subroutine on utilise la commande call alors qu'une function n'en a pas besoin. Une function doit forcment renvoyer un rsultat stock dans une variable (qui peut tre un tableau). Une subroutine peut ne renvoyer aucun rsultat et juste raliser une action (crire dans un fichier, nettoyer l'cran ...). Les fonctions Voyons un exemple simple d'une fonction et de son appel. Une fonction est, par exemple, de la forme f(x) = a*x + b. Voici un programme qui utilise cette fonction : Un exemple de fonction
PROGRAM test_function ! programme principal implicit none integer::i real::f,a,b,x,y a = 1.d0 b = 2.d0 x=0.d0 Do i=1,100 x = x + 0.1d0 write(*,*)x,f(a,b,x) Enddo ! autre exemple x=0.d0 Do i=1,100 x = x + 0.1d0 y = f(a,b,x) write(*,*)x,y Enddo END PROGRAM test_function ! * * * * * * * * * * * * FUNCTION f(a,b,x) implicit none real,intent(in)::a,b,x real::f ! dans une fonction son nom est dclar f = a*x + b ! quelque part dans une fonction on doit assigner une valeur f END FUNCTION f

! appel de la fonction

! appel de la fonction

Les subroutines

- 35 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Pour continuer l'exemple prcdent, on peut programmer une subroutine qui va lire les paramtres a et b de la fonction f(a,b,x). Un Exemple de subroutine
PROGRAM test_function ! programme principal ! la subroutine n'est pas dclare implicit none integer::i real::a,b,f,x call lec(a,b) ! on utilise call pour appeler une subroutine

x = 0.d0 Do i=1,100 x = x + 0.1d0 write(*,*)x,f(a,b,x) Enddo END PROGRAM test_function ! * * * * * * * * * * * * * * SUBROUTINE lec(a,b) implicit none real,intent(out)::a,b

! on prcise que a et b sont des argument de sortie

write(*,*)"entrer a et b" read(*,*)a,b write(*,*)"a = ",a write(*,*)"b = ",b END SUBROUTINE lec ! * * * * * * * * * * * * * * FUNCTION f(a,b,x) implicit none real,intent(in)::a,b,x real::f ! dans une fonction son nom est dclar f = a*x + b ! quelque part dans une fonction on doit assigner une valeur f END FUNCTION f

Les argument d'une subroutine peuvent tre de plusieurs types argument sortant : integer,intent(out)::p1 argument entrant : integer,intent(in)::p2 argument entrant/sortant : integer,intent(inout)::p3 Les arguments entrants ne peuvent pas tre modifis dans la subroutine. Une subroutine doit assigner une valeur un argument sortant.

Comment rcuprer un paramtre/argument en ligne de commande ?


Auteurs : Germain Salvato-Vallverdu , Quand on travaille dans un terminal il arrive souvant qu'on rajoute la suite d'un programme des paramtres. par exemple : mon_programme.x p1 p2 p3. Pour rcuprer p1, p2 et p3 on utilise la subroutine getarg.

- 36 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Utilisation de la subroutine getarg


call getarg( entier , chane de caractre)

L'entier correspond la place de l'argument. Par exemple, dans notre cas, 1 correspond p1, 2 p2 et 3 p3. La valeur 0 permet de rcuprer le nom du programme. Ceci peut tre mis profit pour si l'excutable est enregistr sous des noms diffrents afin d'avoir une excution diffrente selon le nom du programme. Les paramtres p1, p2 ou p3 sont enregistrs dans une variable de type chane de caractres. Voici un exemple d'utilisation : Exemple d'utilisation de getarg
PROGRAM test_getarg implicit none integer::i,p1,p2,p3 integer,dimension(3)::p character(len=10)::parm,nom ! on rcupre le nom du programme call getarg(0,nom) ! on rcupre les valeurs des paramtres call getarg(1,parm) read(parm,*)p1 call getarg(2,parm) read(parm,*)p2 call getarg(3,parm) read(parm,*)p3 ! on peut faire une boucle Do i=1,3 call getarg(i,parm) read(parm,*)p(i) Enddo END PROGRAM test_getarg

Qu'est ce qu'une variable locale/globale ?


Auteurs : Germain Salvato-Vallverdu , Une variable est une zone mmoire laquelle on associe un nom pour pouvoir cire ou lire ce qu'elle contient. Lorsqu'on utilise des sous programmes il faut savoir si les variables qu'on utilise sont accessibles par tous les sous programmes (variables globales) ou juste dans le programme ou sous programme dans lequel elles sont dclares. En fortran toutes les variables dclares au dbut d'un programme principal, d'une fonction ou d'une subroutine sont des variables locales. Ainsi si l'on dclare un entier i dans 3 sous programme, ces 3 variables i seront associes 3 zones mmoires diffrentes et indpendantes. Pour utiliser des variables globales, communes plusieurs sous programmes, on utilise les common (fortran77) ou des module (fortran90).

Comment passer des variables en arguments vers/depuis une subroutine ?


Auteurs : Germain Salvato-Vallverdu , La mthode la plus simple pour qu'une subroutine et son programme appelant se passent des variables est de les mettre comme arguments de la subroutine. Il faut ensuite prciser s'ils sont entrant (ils viennent du programme appelant et
- 37 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

ne doivent pas tre modifi), sortant (ils viennent de la subroutine vers le programme appelant et doivent tre assigns) ou les deux. Exemple d'arguments
PROGRAM test_arg implicit none integer::a,b,c a = 2 c = 1 call sub(a,b,c) END PROGRAM test_arg ! * * * * * * * SUBROUTINE sub(a,b,c) ! il n'est pas ncessaire que ! mais a facilite la lecture implicit none integer,intent(in)::a ! integer,intent(out)::b ! integer,intent(inout)::c ! b = a + c c = c + 1 END SUBROUTINE sub

les arguments aient le mme nom, seule la position est importante du programme a n'est pas modifiable b doit tre assign c peut tre modifi

Il n'est pas obligatoire de prciser l'intent, cela peut cependant viter certaines erreurs et facilite la lecture du programme.

Comment utiliser un common pour partager des variables entre sous programmes (F77) ?
Auteurs : Germain Salvato-Vallverdu , Le common permet de dclarer un zone mmoire commune dans laquelle seront enregistres des variables. Elles seront accessibles par tous les sous programmes dans lesquels le common est dclar. Reprenons l'exemple utilis par les arguments pour comparer. Utilisation d'un common pour transferer des variables
! * * * * ! syntaxe d'un common common /nom de la zone commune/ liste des variables ! * * * * PROGRAM test_arg implicit none integer::a,b,c common /arg/ a,b,c a = 2 c = 1 call sub END PROGRAM test_arg ! * * * * * * *

! je dclare le common

- 38 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Utilisation d'un common pour transferer des variables


SUBROUTINE sub implicit none integer::a,b,c common /arg/ a,b,c ! j'utilise le common b = a + c c = c + 1 END SUBROUTINE sub

Il n'est plus ncessaire de donner les variables a,b et c en argument de la subroutine sub car elles sont accessibles par l'intermdiaire du common. Dans ce cas les variables de la zone commune sont toutes modifiables par la subroutine, pour prciser un intent il faut utiliser les paramtres. Pour ne pas avoir recrire dans chaque sous programme le common, il tait courant d'inclure un fichier qui contenait les variables du common. Ceci avait galement l'avantage de ne pas avoir modifier tous les common dans tous les sous programmes chaque modification. Voici un exemple : Utilisation de include
PROGRAM test_arg implicit none include "arg" a = 2 c = 1 call sub END PROGRAM test_arg ! * * * * * * * SUBROUTINE sub implicit none include "arg" b = a + c c = c + 1 END SUBROUTINE sub ! * * * * * * * * * * * * * * * !contenu du fichier arg integer::a,b,c common /arg/ a,b,c

Comment utiliser un module pour partager des variables entre sous programmes (F90) ?
Auteurs : Germain Salvato-Vallverdu , Les modules sont la grande nouveaut du fortran 90 et apporte au fortran un soupon de programmation oriente objet. L'utilisation des modules pour partager des variables entre des sous programmes n'est qu'une infime partie de ce qu'ils apportent. Dans ce cas, leur utilisation est similaire celle du common. On va crer un module, dans lequel seront dclares des variables qui seront disponnibles dans tous les sous programmes qui utilisent le module.

- 39 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Utilisation d'un common pour transferer des variables


MODULE arg implicit none integer::a,b,c END MODULE arg ! * * * * * * * PROGRAM test_arg USE arg implicit none a = 2 c = 1 call sub END PROGRAM test_arg ! * * * * * * * SUBROUTINE sub USE arg implicit none b = a + c c = c + 1 END SUBROUTINE sub

L'utilisation d'un module apporte cependant une contrainte. Ils doivent tre compils avant le programme principal. Plusieurs solutions sont possibles : Lors de la compilation placer le nom du module en premier, par exemple : ifort module.f90 program.f90 Si le programme est court et que tous les sous programmes et modules sont dans un mme fichier, placer les modules en premier, en tte du fichier dans l'ordre qu'ils apparaissent. Puis compiler simplement le fichier comme un programme normal. Compilez l'avance vos modules (s'arrter la compilation, cration de l'objet). Puis lors de la compilation du programme ajouter les .o des modules.

Pour les compilateurs ifort, g95 ou gfortran, la compilation (cration de l'objet) se fait en ajoutant l'option -c. Il est possible de n'utiliser qu'une partie d'un module avec l'instruction only. On va ainsi slectionner les variables qui seront accessibles et celles qui ne le seront pas. Voici un exemple : Utilisation de only
MODULE arg implicit none integer::a,b,c double precision::x END MODULE arg ! * * * * * * * PROGRAM test_arg USE arg, only : a,c implicit none a = 2 c = 1

! seuls a et c sont utiles

- 40 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

FAQ FORTRAN

Utilisation de only
call sub END PROGRAM test_arg ! * * * * * * * SUBROUTINE sub USE arg, only : a,b,c implicit none b = a + c c = c + 1 END SUBROUTINE sub

! seuls a b et c sont utiles

- 41 Copyright 2008 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://fortran.developpez.com/faq/

You might also like