Você está na página 1de 88

Le Langage

FORTRAN
Version 2 Alpha 2
Fortran 77, 90, 95
J.J. HUNSINGER

Le langage FORTRAN - page 2

Cet abrg de FORTRAN est un des supports de cours de l'Unit de Valeur AG43 (Bases de l'informatique l'usage de l'ingnieur) UTBM. Il peut tre diffus librement en l'tat. Il s'agit actuellement de la Version 2 Alpha, en cours d'laboration, dont le contenu n'est pas encore fig, et les fautes pas encore corriges. La date de dernire mise jour est : 13/09/2011 13:24

JJH, 2005,2011

Le langage FORTRAN - page 3

INTRODUCTION
1.1 Historique En Novembre 1954, L'informatique commence prendre de l'ampleur. Jusqu'alors, les langages de programmation sont rests proches du langage machine. La compagnie International Business Machines (Les initiales sont bien connues), publie la description d'un langage de programmation volu appel alors systme de FORmula TRANslator (traducteur d'quations. Ce nouveau langage, plus condens, avait pour vocation d'ouvrir l'utilisation des ordinateurs aux scientifiques. C'est en 1956 qu'est apparu le premier manuel de rfrence de chez IBM. Ce manuel dcrivait le FORTRAN I. Evidemment, ce langage tait appel voluer. C'est ainsi que, successivement, sont apparus:

1957: FORTRAN II 1958: FORTRAN III (Rest plus ou moins confidentiel) 1962: FORTRAN IV (Il aura rgn 16 ans) 1978: FORTRAN V (Normalisation ANSI et AFNOR)

Durant toute cette volution FORTRAN a respect toutes les anciennes normes de manire assurer une transplantation rapide des anciens programmes sur les nouveaux compilateurs. Le prsent abrg portera sur le FORTRAN 77, ainsi que le FORTRAN 90. Le premier est proche du FORTRAN V mais comporte en plus des instructions de structuration, le second se rapproche d'avantage des langages modernes et est orient vers la parralllisation des calculs. On trouve le langage FORTRAN sous diffrents systmes d'exploitation comme l'ancien MSDOS (ordinateurs compatibles IBM PC), UNIX / LINUX, WINDOWS 9x, Me, NT et XP. En fait, Chaque dcennie a vu la naissance dune nouvelle version de Fortran. Les dernires versions sont Fortran 90, Fortran 95 et Fortran 2003. On peut se demander sil reste opportun de continuer utiliser le Fortran, ou se tourner vers un autre langage pour le calcul scientifique. La rponse est claire si lon utilise dj le Fortran : On conserve ce langage, et on volue avec lui. Pour quelquun qui cherche utiliser ponctuellement un langage pour rsoudre un petit problme ou pour faire une srie de calculs, le BASIC semble bien indiqu, puisquon le trouve mme intgr des tableurs (par exemple VBA avec Excel). Mais la richesse des bibliothques de calculs que lon peut trouver et lvolution du langage maintiennent le Fortran comme loutil de calcul scientifique et technique par excellence.

1.2 Elaboration d'un programme Un programme Fortran ncessite trois types de fichiers pour son laboration :

Les fichiers source (extension .FOR, .F90 sous WINDOWS, .f sous UNIX1)

1MS-DOS

et UNIX sont ce qu'on appelle des systmes d'exploitation. Ils permettent aux diteurs de logiciels d'adapter plus facilement les langages aux diffrents types de machines. Ainsi, par exemple, pour crer, copier,

JJH, 2005,2011

Le langage FORTRAN - page 4

Les fichiers objet (extension .OBJ sous MS-DOS, .o sous UNIX) Le fichier excutable (extension .EXE sous MS-DOS ou WINDOWS, dfinie par l'utilisateur sous UNIX).

Le programmeur crit le fichier source l'aide d'un diteur de texte de son choix. Il s'agit d'un texte clair, contenant toutes les instructions du programme. Ce fichier peut tre envoy sur une imprimante ou affich sur l'cran. C'est ce que fait l'diteur de texte. Le programme source peut tre crit de deux faon : Sous la forme formatte, avec des colonnes dusage ddi, hritage de lpoque des cartes perfores, Sous la forme libre, conforme la plupart des autres langages. lextension du fichier doit alors tre f90. Les contraintes de la forme formatte seront expliques dans le paragraphe 2.6.1. Le fichier source doit ensuite tre compil, c'est dire traduit en langage machine. C'est le rle du compilateur. Chaque langage possde d'ailleurs un compilateur propre. Le fichier obtenu aprs compilation est un fichier objet, pas encore excutable. Le fichier objet possde la particularit de pouvoir tre reli d'autres fichiers du mme genre si l'utilisateur le dsire. Ainsi, comme nous le verrons, les sous-programmes utiles et universels comme par exemple un sous-programme de rsolution de zro de fonction, pourra tre appel partir d'un programme principal sans pour autant figurer dans le mme fichier que ce dernier. L'diteur de liens (LINK ou ld comme "loader") se chargeant de les lier et de les rendre excutables. Toute modification, correction d'un programme passe tout d'abord par la modification du fichier source. Ce fichier doit tre ensuite recompil, ce qui permet d'obtenir un fichier objet mis jour. Attention, tout fichier excutable comportant le module objet modifi n'est plus jour. Il faut dans ce cas procder une nouvelle dition des liens. Dans un cas simple, sur un compatible PC, on crit le programme que nous appellerons par exemple PROG.FOR l'aide d'un diteur de texte au choix. Attention de ne pas prendre un traitement de texte. On sauvegarde le fichier source sur le disque dur en lui donnant un nom respectant les conditions du systme d'exploitation utilis (DOS, UNIX2 en gnral). L'extension utilise est gnralement .FOR sous MS-DOS, et .f sous UNIX. Actuellement, sur des ordinateurs fonctionnant sous WINDOWS, lextension .f90 est actuellement utilise avec le compilateur Fortran fourni par COMPAQ, qui nest autre que lancien Fortran Microsoft revendu, car pas assez rentable du point de vue commercial. Le compilateur traduit les instructions qui ont t tapes par le programmeur et produit, si aucune erreur n'a t faite, en langage machine. La traduction est place dans un fichier objet dont le nom est identique celui du fichier source, mais dont l'extension est cette fois .OBJ sous DOS, et .o sous UNIX. Attention, dans certaines configurations, l'diteur de liens est automatiquement appel et rend le programme excutable.
modifier, enregistrer des fichiers, il n'est pas indispensable de connatre le type exact du support sur lequel on effectue les stockages. MS-DOS a totalement disparu actuellement. 2Se rfrer au manuel correspondant au systme d'exploitation

JJH, 2005,2011

Le langage FORTRAN - page 5

Deux cas sont possibles : Votre fichier programme contient tout ce qui est ncessaire, programme et sous-programmes. Dans ce cas, le fichier objet est pratiquement complet. Il ne lui manque que l'entte de dmarrage, la mise en place des zones mmoire pour les variables, les fonctions intrinsques (par ex. sin()), et les adresses relatives des diffrentes sections appeles. L'diteur de liens se charge de rsoudre ces problmes qui sont en fait indpendants (plus ou moins) du type de langage utilis. On peut, en prenant toutefois certaines prcautions dcrites dans les manuels, lier des modules objet crs partir du FORTRAN d'autres crs partir du PASCAL et du C. L'diteur de liens travaille indpendamment du langage utilis, puisque toute notion de langage ( part le langage machine, videmment) disparat aprs l'opration de compilation. L'diteur de liens charge partir d'un fichier appel librairie3 ces modules ncessaires, met bout bout tous ces modules, y compris les modules objet produits par le programmeur, calcule les adresses relatives et met jour toutes les instructions provoquant un branchement une autre adresse. Le fortran Microsoft Version 5.1 qui implmente dj certaines spcificits du FORTRAN 90, est livr avec un environnement de dveloppement incorpor. Les oprations d'dition, de compilation et d'dition des liens sont lances depuis l'environnement de dveloppement que l'on lance au dbut d'une session de travail. En 2004, Lensemble de dveloppement Fortran est distribu par COMPAQ sous lappellation COMPAQ Visual Fortran 6. On trouve actuellement, gratuit, mais dusage moins convivial, le Fortran 77 GNU, appel g77. Il fonctionne sous Windows en mode console. Pour lobtenir, faire une recherche sur internet avec les mots-cl FORTRAN et GNU. La version g95 est en cours de mise au point. Les principales avances du FORTRAN 90 concernent les manipulations de tableaux, une augmentation substantielle des procdures intrinsques4, la possibilit de dfinition de nouveaux types de variables (STRUCTURES), les boucles DO WHILE, les constructions Cas o (CASE)... L'instruction GOTO, toujours disponible, est proscrire. Un programme est souvent compos de plusieurs modules (sous-programmes), chacun pouvant se trouver dans des fichiers spars. L'application complte comportera tous les modules lis. Tout d'abord, il conviendra de compiler sparment sans dition des liens chaque module. A l'issue de cette opration, on obtiendra des modules objets, c'est dire en langage machine, mais sans adresse d'implantation en mmoire. On les reliera tout en fixant les adresses l'aide de l'diteur de liens LINK.EXE. Le fichier obtenu sera le programme excutable. Ces oprations mettant en jeu de multiples fichiers sont grandement facilites par l'emploi de fichier projet. Les environnements de dveloppement permettent la gestion de projets.

3Une

librairie est un assemblage de modules objet indpendants, ce qui vite l'obligation de manipuler une quantit impressionnante de fichiers. 4Fonctions math ou autres disponibles avec la librairie standard du FORTRAN

JJH, 2005,2011

Le langage FORTRAN - page 6

Un fichier projet est un fichier comportant toutes les informations ncessaires pour reconstituer un programme excutable, ou une librairie. La constitution d'un fichier projet est extrmement simple. Cette action est dcrite dans le manuel d'utilisation de l'environnement de dveloppement.

Fichiers
Source 1 Objet 1 Fichier Source 2 Objet 2 Programme Excutable Source 3 Objet 3

Source 4 Compilation

Objet 4 Edition des liens (Linker)

JJH, 2005,2011

Le langage FORTRAN - page 7

2. Structure des instructions


2.1 Structure d'un programme Un programme comporte gnralement plusieurs modules. Ces modules peuvent figurer dans un mme fichier ou dans des fichiers diffrents. Lorsque les modules figurent dans des fichiers individuels, il est possible, et c'est mme fortement conseill, de les rutiliser dans d'autres programmes. L'inconvnient (mineur) est la ncessit d'emploi d'un fichier projet, charg de communiquer l'diteur de liens les noms des diffrents modules lier. Un ensemble de modules doit, pour pouvoir tre excut, comporter un programme principal. Le programme principal peut faire appel des procdures et des fonctions qui peuvent faire de mme. Un module comporte diffrentes parties :

L'entte ou le nom du module. En FORTRAN on peut trouver: PROGRAM nom du programme pour le programme principal SUBROUTINE(Liste des argumentss) pour un sous-programme FUNCTION(Liste des arguments) pour une fonction Les dclarations des arguments, s'il y a lieu Les dclarations des variables Les initialisations et dclarations particulires. Cette section est un peu particulire et sera traite en fin de manuel. Les instructions excutables. C'est la traduction en langage (FORTRAN) de l'algorithme. l'instruction FIN de module. En FORTRAN, il s'agit de END.

Attention, dans un fichier comportant plusieurs modules, il y aura autant d'instructions FIN que de modules. Pratiquement chaque module possde ses variables. Vous pouvez choisir leur nom sans tenir compte de ceux que vous avez dj utiliss dans d'autres modules. En effet, la seule possibilit de communication de variables entre diffrents modules se fait par les arguments d'appel et par les blocs COMMON (mmoire commune). 2.2 Dmarrage rapide - Deux instructions utiles : READ et WRITE Pour raliser son premier programme, il suffit de connatre trs peu d'instructions. Avec quatre instructions, on peut s'essayer aux joies de la compilation : PROGRAM, READ, WRITE, END. 2.2.1 Utilisation de READ et WRITE Ce sont, on l'aura devinn, des instructions le lecture et d'criture. Elles sont plus amplement dcrites dans le 6.1. Dans un premier temps, on se contentera des instructions de lecture/criture sur la console (cran clavier), sans mise en forme (format libre). Si A et B sont des variables, l'entre de leur valeur respective partir du clavier s'crira : READ(*,*) A,B

JJH, 2005,2011

Le langage FORTRAN - page 8

La liste (*,*) est passe-partout, et sera employe pour des saisies rapides et des affichages rapides pour vrification et mise au point. Les valeurs de A et B seront entres au clavier, sur la mme ligne, spares par un espace, une virgule, ou une tabulation. L'appui sur la touche ENTER (retour chariot ou entre) valide la saisie. L'affichage sur l'cran du contenu des variables A et B sera crit : WRITE(*,*) A,B Le format d'affichage est libre, et il s'adapte en fonction des variables. 2.2.2 Le premier programme Le premier programme sera videmment simple et parfaitement inutile. Il sera crit en format libre (l'extension du fichier source sera ".f90", la plupart des compilateurs comprenant alors qu'il n'y a pas de format standard respect, comme dcrit paragraphe 2.6). PROGRAM exemple1 READ(*,*) A,B C=A*A+B*B WRITE(*,*)C END PROGRAM exemple1 En excutant le programme, on tombe sur une fentre vide, dans laquelle rien ne semble se passer. En ralit, le programme attend les valeurs pour A et B. on les donne en tapant au clavier les valeurs 4 et 5, spares par un espace, et valides par un appui sur la touche entre. Voici ce que l'on obtient : 4 5 41.00000 Press any key to continue On entre ces valeurs et on valide C'est la rponse de l'ordinateur Vous devez appuye une touche pour fermer

On peut faire quelques remarques : A, B et C sont des variables. Le compilateur a estim que ces variables taient des nombres rels. En fait, il a procd une dclaration implicite (voir 3.3.2). Au moment de l'xcution, l'apparition d'un cran vide peut surprendre, et il serait plus judicieux d'afficher un texte. L'instruction PROGRAM n'est pas obligatoire, mais on prend l'habitude de l'utiliser. Dans l'exemple qui suit, les deux valeurs entres sont spares par une virgule. La virgule ne spare pas les dcimales de la partie entire d'un nombre, mais sert de sparateur de valeurs. L'instruction PROGRAM a galement t volontairement omise. L'instruction END reste obligatoire. WRITE(*,*) 'Donner A et B :' READ(*,*) A,B C=A*A+B*B WRITE(*,*)C END Donner A et B : 2,4 20.00000 Press any key to continue

JJH, 2005,2011

Le langage FORTRAN - page 9

Le premier WRITE affiche un texte qui est une constante alphanumrique (chane de caractres). la constante chane est encadre par deux apostrophes. Attention ne pas introduire des apostrophes supplmentaires par inadvertance (voir 3.1.6). 2.3 Elments de base du langage Lorsque l'on crit un programme, on utilise les lettres de l'alphabet, les chiffres et quelques signes. Les caractres reconnus par le compilateur sont :

Les 36 caractres alphanumriques: les 10 chiffres dcimaux les 26 lettres de l'alphabet Les caractres spciaux: = + * / ( ) , . ' : espace typographique signe egal plus moins etoile barre de fraction parenthses virgule point apostrophe double point

Chaque instruction, sauf l'instruction d'affectation (ex. : VALEUR = 10 ), commence par un mot-cl du FORTRAN. 2.4 Les mots-cl du langage Gnralits Leur nombre est limit. Ils constituent le vocabulaire reconnu par le compilateur. Toute autre chane de caractres est considre comme nom de procdure, de constante, de variable ou bien comme commentaire. L'annexe A comporte la liste alphabtique des mots-cl, ainsi qu'une description succincte. Exemple de mots-cl: DATA, READ, PRINT, CONTINUE, COMMON. Instructions dinterface Elles sont essentielles, car elles permettent de communiquer avec lutilisateur. Pour linstant, le seul moyen pratique et simple de communication se passe au travers de la console (cranclavier). 2.5 Les sparateurs

Les parenthses ( )

JJH, 2005,2011

Le langage FORTRAN - page 10

Elles encadrent une liste ou un indice associ un mot-cl ou un nom de variable (dans le cas de tableaux).

Le signe = Il constitue le symbole d'affectation Il prcde la valeur dans la dclaration d'une constante Il introduit les paramtres dans une boucle DO Les barres de fraction / /

1. 2. 3.

Elles encadrent une liste associe certains mots-cl comme par exemple DATA, COMMON,

L'astrisque *

Elle dsigne la transmission hors format de donnes ou l'utilisation d'un priphrique standard d'entre-sortie (cran-clavier). Elle dsigne aussi l'oprateur arithmtique de multiplication et d'lvation une puissance.

Les apostrophes ' '

Elles encadrent les constantes de type alphanumrique

Le point-virgule ;

Le point-virgule spare plusieurs instructions situes sur la mme ligne (F90). Cas particulier: le caractre espace. Le compilateur l'ignore, sauf s'il se situe dans une constante ou variable alphanumrique. Dans l'exemple ci-dessous, les trois lignes sont rigoureusement identiques, et l'absence ou la prsence d'espace laisse le compilateur totalement indiffrent. Seul le lecteur peut tre gn lors de la lecture de la dernire ligne. TOTAL = PUHT * NBRE * TVA TOTAL=PUHT*NBRE*TVA T O TAL= PU HT*NBRE * T V A Il est donc possible, en FORTRAN 90, de placer plusieurs instructions par ligne, condition de les sparer par des points-virgule, mais rservez cette possibilit uniquement aux affectations d'initialisation. Exemple : A=1; B=-4.0; EPSILON=.0001 2.6 Mise en place des instructions 2.6.1 Structure d'une ligne FORTRAN de type classique (formate)

JJH, 2005,2011

Le langage FORTRAN - page 11

De nos jours, les programmes sont tous crits sur la console, l'aide d'un diteur de texte. Pour les versions de FORTRAN antrieures 90, une ligne se dcompose en quatre groupes de colonnes (total de colonnes: 80): Colonnes 1 a 5 Colonne 6 Colonnes 7 a 72 Colonnes 73 a 80 Rserves aux tiquettes Rserve au caractre de continuation de ligne Instruction du programme Ignores par le compilateur

Attention : Le non respect de l'usage de ces quatre groupes de colonnes est une cause frquente d'erreurs que commet un dbutant.

2.6.2 Description des zones Les tiquettes servent rfrencer les lignes pour par exemple un saut (GOTO) ou un format d'entre/sortie (FORMAT). Il n'est absolument pas ncessaire de respecter un ordre croissant de ces tiquettes. Elles se placent toujours partir de la premire colonne. Les lignes de continuation sont utilises lorsque l'on risque de dpasser la colonne 72 lors de l'criture d'une dclaration de liste de variables ou lors d'une instruction trop longue (cas de formules complexes). Le nombre de lignes de continuation ne peut en aucun cas excder 19. Pour mettre en place une ligne de continuation, il suffit de faire figurer dans la colonne 6 un chiffre quelconque ou tout simplement un point. Une autre possibilit est de placer au bout de l'instruction que l'on dsire continuer sur la ligne suivante un caractre '&'. Exemple : WRITE(*,*) & 'Cette ligne ne rentre pas sur 80 colonnes, on coupe.' Les colonnes 73 80 taient utilises lorsque les programmes taient crits sur cartes perfores pour reprer les cartes les unes par rapport aux autres. Imaginez un lcher inopportun d'un paquet de 500 cartes sur le plancher... Aucun signe particulier marque la fin d'une instruction. Il ne peut y avoir qu'une seule instruction par ligne. On veillera ne pas couper un nom de variable ou un mot rserv en passant une ligne de continuation. Attention : Une erreur frquente est le dpassement de la colonne 72. Le compilateur ne le signale pas directement. Il se contente de remarquer soit une instruction incomprhensible, soit une nouvelle variable (en tronquant automatiquement la fin du mot). Le rflexe du programmeur devra tre de vrifier en premier lieu la position des fins d'instruction ds qu'une erreur signale par le compilateur parat incomprhensible. Les compilateurs FORTRAN 90 (par exemple le compilateur Microsoft) admettent le format libre de ligne. Aucune colonne nest rserve, un commentaire commence par un point

JJH, 2005,2011

Le langage FORTRAN - page 12

dexclamation, la colonne 72 nest plus une limite. Avec la plupart des compilateurs Fortran, le fait de prciser .f90 pour lextension dun fichier source au lieu de .for, implique lutilisation du format libre. Il est de mme possible de placer plusieurs instructions sur la mme ligne, en prenant soin de les sparer par un point-virgule (;). 2.7 Commentaires Lorsque le caractre C ou * figure dans la premire colonne, la ligne entire est suppose tre un commentaire, et le compilateur l'ignore. Une ligne vide est galement considre comme commentaire par le compilateur. Il est conseill de faire usage autant que possible des commentaires, afin de rendre le programme plus lisible. La notice d'utilisation du module figurera sous forme de commentaire en en-tte, et de ce fait ne quittera pas le programme. Le FORTRAN 90 admet galement des commentaires en fin de ligne d'instruction. Dans ce cas, ils commencent par un point d'exclamation. 2.8 Un exemple en FORTRAN 77
C C Voici un exemple de programme FORTRAN respectant les regles :

PROGRAM BIDON ! L'instruction PROGRAM n'est pas obligatoire C C Normalement, il faudrait declarer ici variables et parametres, C mais comme il n'y en a pas... C WRITE(*,*) 'Voici un message qui va etre affiche sur l ecran' C C Notez que l'on a volontairement oublie l'apostrophe, car elle C delimite les constantes alphanumeriques, ce qui, dans le cas C present, aurait provoque une erreur signalee par le compilateur C WRITE(*,*) 1 'Ceci est en fait une seule ligne (ligne de continuation)' C END C Faut pas l'oublier...

2.9 Les identificateurs Un identificateur est un nom que le programmeur attribue une variable, un sous-programme, une fonction, ou un bloc. En principe, il ne peut comporter plus de 6 caractres, mais certains compilateurs en admettent d'avantage. Si l'on utilise un identificateur faisant plus de 6 caractres, les derniers sont au pire ignors par le compilateur, et il peut confondre deux variables distinctes. Il ne faut pas choisir pour nom de variable un mot rserv . Les mots rservs sont les instructions de structuration et des noms de fonctions standard. Ils utilisent toutes les lettres de l'alphabet, ainsi que les 10 chiffres, mais ils ne commenceront jamais par un chiffre. On peut utiliser indiffremment majuscules et minuscules.

JJH, 2005,2011

Le langage FORTRAN - page 13

Les variables sont places dans des zones mmoire repres par leur adresse. Pour le programmeur, le fait d'ignorer l'adresse physique en mmoire d'une variable n'es pas du tout un handicap, d'autant plus qu'il n'en dsire connatre que le nom. Le compilateur se charge de faire correspondre un identificateur une adresse mmoire. Un identificateur peut-tre un nom de fonction, de variable, ou de procdure. Un conseil : Pour crer un identificateur, n'utilisez que les 26 lettres de l'alphabet, les chiffres et si vous dsirez inclure un espace, prenez le caractre soulign '_'. Les majuscules et minuscules sont confondues par le langage. On peut donc styliser les noms de variables par un usage combin de majuscules et de minuscules. Les rgles lmentaires suivre pour la constitution de noms de variables seront dcrites en annexe. Exemples : TOTAL RACINE I1 Les noms suivants ne sont pas valables (Fortran 77): SOUSTOTAL 3I9 A.B PAUSE (Admissible, mais comporte plus de 6 car.) (Commence par un chiffre) (Comporte un point) (Mot reserve du langage)

Pour le Fortran 90, A.B est admis dans le cas des variables structures (STRUCTURE), voir dans le paragraphe 8.4.

JJH, 2005,2011

Le langage FORTRAN - page 14

3. Constantes et Variables
3.1 Constantes 3.1.1 Gnralits Les constantes apparaissent dans un programme sous la forme d'une valeur numrique ou alphanumrique. On ne peut pas leur attribuer un nom. Elles sont utilises dans les intructions DATA et dans les initialisations. 3.1.2 Constantes entires Dfinition : C'est une suite de chiffres prcde ou non d'un signe, ne pouvant comporter aucun autre caractre. Exemples : 123 -18 +4 Contre-exemples : 3 14 3.14 2,71828 Prsence dun espace (sparateur) Prsence dun point dcimal Prsence dune virgule (sparateur)

3.1.3 Constantes relles On peut les trouver sous la forme simple prcision ou double prcision. On peut les prsenter de deux manires :

constante relle de base : mantisse

C'est une chane de chiffres comportant obligatoirement un seul point dcimal, pouvant tre prcde d'un signe. Exemples : 3.14 -6.28 .7 0.

Constante relle de base suivie d'un exposant.

JJH, 2005,2011

Le langage FORTRAN - page 15

La prsentation reste identique la prcdente, mais on rajoute en fin de chane un exposant comportant pour la simple prcision la lettre E suivie d'une constante entire signe de deux chiffres. La mantisse peut comporter 7 chiffres significatifs. En ce qui concerne la double prcision, la mantisse comportera 15 16 chiffres significatifs, l'exposant commencera par la lettre D et pourra comporter 3 chiffres. Les limites sont indiques dans le chapitre de prsentation des variables. Exemples : 128.34E+02 -.432E-06 1.23267453274D+03 Contre-exemples : 1,5E+01 -.23E

3.1.4 Constantes complexes Une constante complexe se prsente sous la forme d'un doublet de deux rels plac entre parenthses. Les deux rels sont spars par une virgule, le premier reprsentant la partie relle, le second la partie imaginaire. Exemples : (20.0, -3.14) (0.,0.) (1.E01,1.23E-02) Les rels formant le complexe doivent tre de mme nature, soit en simple ou en double prcision. 3.1.5 Constantes logiques Un constante logique n'a que deux valeurs possibles : .TRUE. .FALSE. 3.1.6 Constantes chanes de caractres C'est une suite de caractres quelconques encadre par l'apostrophe '. On utilise ces constantes pour composer des messages ou initialiser des chanes. Attention : Le franais fait un usage courant de l'apostrophe, ceci peut poser un problme lors de l'affichage de certains messages. Exemples :

JJH, 2005,2011

Le langage FORTRAN - page 16

WRITE(*,*)'LUNDI 1 JANVIER 1990' Contre-exemple : WRITE(*,*)'L'affichage d'apostrophes va poser des problemes!' Ce problme peut tre rgl par le double apostrophage : WRITE(*,*)'L''affichage d''apostrophes ne pose plus de probleme!'

3.1.7 Dclaration des constantes En FORTRAN, les constantes n'ont pas de nom. Les dclarations de constantes n'existent donc pas. Cependant, il peut-tre utile de nommer des constantes, ce qui permet de les dcrire en dbut de programme, et de les localiser tout de suite pour une modification. On utilise pour cel la dclaration PARAMETER. Exemple : PARAMETER (PI=3.14159,FLAG=.TRUE.,NOMFICHIER='resultats.txt') Une constante relle se distingue d'une constante entire par le point dcimal. Remarque : 4. sera interprt comme une constante relle, alors que 4 sera considr comme constante entire. Cette particularit peut conduire des erreurs (voir 3.3.2 ) 3.2 Les variables 3.2.1 Variables simples On reprsente les variables simples l'aide de leur identificateur. Le compilateur fait correspondre chaque identificateur une zone mmoire dpendant du type de la variable qu'il reprsente. 3.2.2 Les tableaux (Variables indices) On reprsente une variable indice ou un tableau par un identificateur, suivi d'indices placs entre parenthses et spars par des virgules : Identificateur(I1, I2, ...) Exemples : TABLE(I,J) PNT(2,K,L) A(I)

JJH, 2005,2011

Le langage FORTRAN - page 17

L'indice peut tre une variable ou une expression mathmatique de type rel ou entier. Sil est de type rel, il sera converti en entier. On vitera d'utiliser un indice rel, pour des raisons de compatibilit avec d'autres langages ainsi que pour des erreurs dues aux arrondis dans les calculs. Exemples : ALPHA(5) ELEM(3,J+3) MAT(I*2, I+IMAT(J,I)) 3.3 Dclaration des variables 3.3.1 Les types de variables FORTRAN est un langage permettant l'utilisation de 5 types de variables intrinsques: REAL INTEGER LOGICAL COMPLEX CHARACTER et dans une certaine mesure : EXTERNAL identificateurs de sous-programmes reels entiers logiques complexes chaines de caracteres

3.3.2 Dclaration implicite des variables Deux types de variables sont privilgis en FORTRAN (dclaration implicite) :

Les variables entires Les variables relles IMPORTANT : Le compilateur dtermine le type des variables non dclares partir de leur lettre initiale. Toute variable dont le nom commence par la lettre I, J, K, L, M, N est considre comme entire et les autres comme tant relles. Ceci reste galement valable pour les tableaux. Il s'agit l de la dclaration implicite des types.

Exemple : PROGRAM exemple2 IA=3 IB=2 IC=IA/IB WRITE(*,*) 'Division de ',IA, ' par',IB,' donne :',IC END PROGRAM exemple2

JJH, 2005,2011

Le langage FORTRAN - page 18

Aucune variable est dclare. Les noms des variables commencent par la lettre I, le compilateur les considre alors comme entires. IC sera une valeur entire, et le rsultat affich sera entier : Division de 3 par Press any key to continue 2 donne : 1

On remarquera, au passage, que la mise en forme n'est pas bonne. L'utilisation d'une instruction FORMAT ( 6.1.5) amliorerait la prsentation. En modifiant les noms des variables : PROGRAM exemple2 AA=3 AB=2 AC=AA/AB WRITE(*,*) 'Division de ',AA, ' par',AB,' donne :',AC END PROGRAM exemple2 On obtient un rsultat plus conforme : Division de 3.000000 1.500000 Press any key to continue par 2.000000 donne :

Dans le paragraphe 3.1.7, il a t voqu la possibilit d'erreurs lors d'une mauvaise representation des constants. Voici un exemple simple : PROGRAM exemple2 AA=3/2 IA=3/2 WRITE(*,*) AA,IA AA=3./2 IA=3./2 WRITE(*,*) AA,IA END PROGRAM exemple2 En sortie, on aura : 1.000000 1 1.500000 1 Press any key to continue AA est considre comme relle, et IA comme entire. 3/2 est considr comme le quotient de deux entiers, ce qui doit donner un rsultat entier, c'est ce qui est imprim par le premier WRITE. On remarque bien que AA est interprt comme rel et IA comme entier par le format automatique de sortie de l'instruction WRITE. L'opration 3./2 est le quotient d'un rel par un entier, ce qui donne un rsultat rel. Le second WRITE montre que AA est correct, et que IA n'a pris en compte que la partie entire du rsultat. En conclusion : Une mauvaise reprsentation des valeurs constantes, l'utilisation des dclarations implicites (mme involontairement) peut conduire des erreurs parfois difficiles reprer. Vrifier que toute constante relle possde bien un point dcimal.

JJH, 2005,2011

Le langage FORTRAN - page 19

On peut toutefois modifier cette coutume en utilisant la dclaration IMPLICIT : IMPLICIT attribut (lettre), attribut (lettre),... attribut peut tre INTEGER, REAL, CHARACTER, COMPLEX, ... La lettre qui suit l'attribut dsignera alors le type de variable dont elle est initiale. Exemple: IMPLICIT LOGICAL(K) Dans ce cas, les variables KIND, K2, KM sont de type logique, c'est dire qu'elles ne peuvent avoir que deux valeurs, .FALSE. ou .TRUE. (remarquer la prsence de 2 points encadrant ces valeurs). Les dclarations de type se placent en tte de programme, avant toute instruction excutable: INTEGER A,B,C,D REAL MAT,MU DOUBLE PRECISION DMAT,DMU Il est normalement inutile de dclarer par exemple la variable INDEX entire, tant donn qu'elle commence par la lettre I. Par contre toutes les variables double prcision, logiques ou complexes doivent tre dclares. Afin de prendre de bonnes habitudes, des langages comme PASCAL et C ncessitant la dclaration pralable de toute variable, on fera de mme en FORTRAN, mme si cela est parfois inutile. En fortran 90, il est possible dimposer lobligation de dclaration de toutes les variables utilises laide de linstruction IMPLICIT NONE. CONSEIL : Imposez-vous la dclaration initiale des variables en mentionnant en dbut de programme la dclaration : IMPLICIT NONE. Toute variable non dclare, donc par exemple susceptible d'tre une variable dclare, mais comportant une faute de frappe, sera signale lors de la compilation. Cette prcaution vous vitera quelques heures de ttonnements pour retrouver des erreurs. 3.3.3 Dclaration explicite des variables simples Les dclarations des variables se placent toujours au dbut du module, avant toute instruction excutable. 3.3.3.1 Variables entires INTEGER, INTEGER*1, INTEGER*2, et INTEGER*4

JJH, 2005,2011

Le langage FORTRAN - page 20

Leur domaine d'utilisation est :


-128 127 (1 octet) pour INTEGER*1 -32 768 32 767 (2 octets) pour INTEGER*2 -2 147 483 648 2 147 483 647 (4 octets) pour INTEGER*4

Au niveau des entres, ces constantes seront interprtes en base 10. Si l'on veut prciser la base, on peut les crire sous la forme : [signe][[base]#]valeur 3.3.3.2 Variables relles REAL ou REAL*4, DOUBLE PRECISION ou REAL*8 Domaine d'utilisation : -3.4028235E+38 -1.1754944E-38, 0, 1.1754944E-38 3.4028235E+38 pour un rel simple prcision

-1.797693134862316D+308 -2.225073858507201D-308, 0, 2.225073858507201D308 1.797693134862316D+308 pour un rel double prcision.

La forme d'une valeur relle est : [signe][entier][.[fraction]][Eexposant] pour le type REAL*4 [signe][entier][.[fraction]][Dexposant] pour le type REAL*8 Les rels double prcision, la place mmoire ncessaire est plus importante, les temps de calcul plus longs, mais cette forme est souvent utilise pour des problmes demandant un grand nombre d'oprations successives, tendant faire perdre de la prcision. La dclaration REAL*4 signifie une demande de codage d'un rel sur 4 octets; REAL*8 appelle au codage d'un rel sur 8 octets (double prcision).

La dclaration est faite de la manire suivante : REAL liste de variables exemple : REAL SIGMAXX, SIGMAYY, SIGMAZZ IMPLICIT REAL*8 (D) Aprs la dclaration IMPLICIT, toutes les variables dont le nom commence par D sont en double prcision.

JJH, 2005,2011

Le langage FORTRAN - page 21

3.3.3.3 Variables logiques LOGICAL ou LOGICAL*1, LOGICAL*2, LOGICAL*4

3.3.3.4 Variables complexes COMPLEX ou COMPLEX*8, DOUBLE COMPLEX ou COMPLEX*16 Les complexes sont des doublets de rels. On les utilise sous la forme suivante : [signe](partie relle, partie imaginaire) Un nombre complexe est reprsent par sa partie relle et sa partie imaginaire: COMPLEX CX CX=(5.0,1.0)

3.3.3.5 Variables de caractres CHARACTER[*n] o 1 <= n <= 32767 Si l'on ignore la longueur de la chane, on pourra crire la dclaration sous la forme : CHARACTER*(*) chaine On pourra dclarer alphanumriques toutes les variables dont le nom commencera par la lettre C en mentionnant en dbut de programme la dclaration suivante: IMPLICIT CHARACTER (C) Dans cette dclaration les chanes sont dclares de longueur 1. Or dans la plupart des cas, notamment dans les programmes orients gestion, il est intressant de pouvoir manipuler des mots. On peut dclarer des variables alphanumriques de longueur diffrente de 1 en crivant: CHARACTER *20 NOM,PRENOM NOM et PRENOM sont deux chanes de caractres pouvant comporter au plus 20 caractres. On peut galement dclarer plusieurs variables comme tant de longueurs diffrentes: CHARACTER*8 NOM1, NOM2, ORIGIN*15, NOM3 Attention dans l'exemple ci-dessus, NOM1, NOM2 ET NOM3 ont une longueur maximale de 8 caractres, et ORIGIN est dfini comme tant de longueur 15.
JJH, 2005,2011

Le langage FORTRAN - page 22

Gnralement, on place la dclaration CHARACTER aprs la dclaration IMPLICIT. 3.3.3.6 Linstruction DATA L'instruction DATA devient dsuette. Elle sert initialiser une variable ou un tableau. Il est maintenant possible d'initialiser une variable au moment de sa dclaration. La syntaxe de linstruction DATA est la suivante : DATA liste de variables /liste de valeurs/ Les donnes lintrieur de chaque liste sont spares par des virgules. Il existe trois faons dinitialiser des variables : Par une affectation A laide de linstruction DATA Au moment de la dclaration (FORTRAN90) Laffectation est une commande excutable. On opre en gnral une affectation par ligne PROGRAM exemple1 REAL*4 A,X,Y INTEGER*2 I,J,K A=20.5 X=-3.0 Y=0.23 I=-4 J=-4 K=-4 PRINT*, A,X,Y,I,J,K END PROGRAM Avec linstruction DATA, le compilateur initialise directement les variables la valeur indique au moment de la compilation. Lcriture est galement plus compacte. Lexemple ci-dessus devient : PROGRAM exemple1b REAL*4 A,X,Y INTEGER*2 I,J,K DATA A,X,Y,I,J,K /20.5,-3.0,0.23,3*-4/ PRINT*, A,X,Y,I,J,K END PROGRAM Il est galement possible de grouper les variables de mme valeur et de condenser la valeur dinitialisation comme il a t fait dans lexemple pour les variables I, J, K. 3.3.4 Cas des variables indices Une variable indice est constitue du nom suivi du ou des indices (de 1 7) placs entre parenthses. Ces indices sont des variables entires ou des constantes entires. Les indices des tableaux commencent tous 1, et doivent tre positifs. Attention : Une erreur frquente est l'indiage involontaire par rapport 0. Le
JJH, 2005,2011

Le langage FORTRAN - page 23

compilateur ne peut pas signaler cette erreur, sauf si l'indice est une constante. Penser vrifier la valeur des indices.

Ex : ELEM(I,J)=X(I)*J Un tableau apparat toujours avec ses indices sauf: Dans une liste d'initialisation DATA ou d'entre-sortie o elle dsigne tout le tableau, PROGRAM exemple3 REAL*4 A(3) DATA A /1., 2., 3./ WRITE(*,*) A END PROGRAM exemple3 on aura comme rsultat : 1.000000 2.000000 Press any key to continue 3.000000

La ligne DATA initialise le tableau A entier, et la ligne WRITE crit le tableau entier. Lorsqu'elle est place dans une liste d'arguments d'un sous-programme, dans quel cas elle indique l'adresse du premier lment, Exemple : PROGRAM exemple4 REAL*4 A(4,4) DATA A /16*1.0/ WRITE(*,*) TRACE(A,4) END PROGRAM exemple4 REAL*4 FUNCTION TRACE(X,N) REAL*4 X DIMENSION X(N,N) INTEGER I,N TRACE=0 DO I=1,N TRACE=TRACE+X(I,I) END DO END Dans une dclaration de type ou de commun, la dimension tant dclare dans une autre instruction, voir exemple prcdent.

La rgle de dfinition du type par dfaut est respecte dans le cas d'une variable indice.

JJH, 2005,2011

Le langage FORTRAN - page 24

Attention: Il faut prvenir le compilateur de la place mmoire rserver une variable indice l'aide de l'instruction DIMENSION. Exemple: DIMENSION ELEM(20,20), X(20) On indique au compilateur la valeur maximale que pourra atteindre l'indice. Il est IMPOSSIBLE dans un programme principal de placer une variable dans une instruction de dimensionnement, comme par exemple: DIMENSION A(N,N), l'allocation mmoire n'tant pas dynamique. Par contre si N a t dfini par paramtrage pralable, cette criture est alors possible. On peut remarquer dans l'exemple prcdent l'instruction DIMENSION X(N,N). Elle semble aller l'encontre de ce qui vient d'tre mentionn. Mais dans cet exemple, X est un argument, ce qui signifie que ce tableau existe, donc qu'il a dj t cr. La dclaration DIMENSION, dans ce cas, prcise au compilateur simplement que X est un tableau deux dimensions. Il est logique de placer la dclaration de type AVANT la dclaration de dimension, le type de la variable dfinissant la quantit mmoire ncessaire un lment: REAL*8 A DIMENSION A(50) On peut galement condenser: REAL*8 TABL(10) La valeur d'un indice ne peut tre ni ngative, ni nulle. En principe, le programmeur n'a pas se proccuper de la distribution en mmoire des variables, aussi cet aspect sera pass sous silence. Les choses voluant, FORTRAN 90 autorise des rfrences d'indiage quelconques : On peut indiquer au moment de la dclaration des tableaux, les bornes d'indiage. Le FORTRAN 90 gre l'allocation dynamique de mmoire. Elle est particulirement utile pour les grands tableaux. Elle permet d'utiliser au maximum la mmoire disponible. On se reportera au paragraphe 3.4 traitant de l'allocation dynamique de mmoire. 3.3.4.1 Cas des chanes de caractres Forme gnrale de la dclaration : CHARACTER *n a(k1), b(k2), ... ou bien : CHARACTER a(k1)*n1, b(k2)*n2, ...
JJH, 2005,2011

Le langage FORTRAN - page 25

o : a, b, ... sont des noms de variables k1, k2, ... sont des listes d'indices maxi lorsqu'on utilise des tableaux de chanes de caractres. *n nombre de caractres de toutes les chanes qui suivent *n1, *n2 nombre de caractres de la chane qui les prcde directement. Exemple : CHARACTER T*1, Y*3, Z(5)*10 T est un seul caractre Y est une chane de 3 caractres Z est un tableau de 5 chanes de 10 caractres chacune. 3.3.4.2 Groupements de Variables : Les dclarations STRUCTURE et RECORD Les dclarations STRUCTURE et RECORD permettent de composer des ensembles de variables faciles manipuler. Il sagit dun regroupement organis de variables de diffrents types sous une seule appellation. On se reportera au 8.4 pour une tude de ces dclarations. 3.4 Allocation dynamique de mmoire : ALLOCATE 3.4.1 Gnralits sur l'allocation dynamique de mmoire La rservation en mmoire de la place occupe par les variables a lieu lors de la compilation. Il est donc IMPOSSIBLE de rserver des tableaux dont on ne connat pas l'avance les dimensions. Par consquent, REAL*8 TABLEAU(L,M) est illicite dans un programme principal. FORTRAN 90 va plus loin, en considrant, toujours dans un sous programme ou une fonction, la variable tableau comme n'existant que pendant la dure d'utilisation du sous-programme (voir dans le paragraphe 3.5). On peut cependant trouver ce genre de dclaration dans un sous-programme en FORTRAN77, condition qu'il s'agisse de la dclaration d'un paramtre. Dans ce cas le tableau a dj t cr dans le programme appelant. La dclaration donne alors au compilateur les indications ncessaires pour tre en mesure de recalculer les adresses de chaque lment, et non pour crer la place mmoire. Le FORTRAN offre maintenant une autre possibilit de gestion de la mmoire: L'allocation dynamique de la mmoire. 3.4.2 Dclaration Dans le cas de l'allocation dynamique de la mmoire, il faut toujours dclarer le tableau, mais cette fois, on ne donne aucune dimension prcise, sauf le nombre d'indices de ce tableau. La dclaration doit toujours indiquer le type du tableau (rel, entier, ...) suivie de la mention

JJH, 2005,2011

Le langage FORTRAN - page 26

ALLOCATABLE ainsi que d'une indication donnant le nombre d'indices. La dclaration d'un tableau dynamique prend la forme suivante : type nom [ALLOCATABLE] (:,:,...) Si le tableau risque de dpasser 65536 octets, il faut le dclarer HUGE : type nom [ALLOCATABLE,HUGE] (:,:,...) Ceci n'est valable que pour un compilateur travaillant sous MS-DOS. exemple pour un tableau de rels 3 indices : REAL*8 TAB [ALLOCATABLE] (:,:,:) 3.4.3 Allocation Un tableau cr par allocation dynamique de mmoire autorise un indiage quelconque, donc ne commenant pas forcment 1. Cette possibilit est rarement utile, aussi on pourra consulter le manuel fourni avec le langage pour une utilisation ventuelle. L'allocation de la mmoire se passe en faisant appel la procdure ALLOCATE. On l'utilise comme suit : ALLOCATE(tab1(dim1, dim2,...),tab2(dim3,...),...,STAT=erreur) erreur est une variable entire qui contiendra un code erreur gal 0 si tout s'est bien pass. Cette possibilit est facultative, mais dans le cas d'une omission, la gestion des erreurs est plus difficile. Attention : Les tableaux dynamiques ne peuvent pas apparatre dans des dclarations comme AUTOMATIC, COMMON, DATA, EQUIVALENCE, STRUCTURE. Un tableau de structures peut tre du type dynamique. 3.4.4 Libration de la mmoire Lintrt majeur de l'allocation dynamique de la mmoire est la possibilit de la librer pour la raffecter un autre tableau. la libration mmoire se fait l'aide de la procdure DEALLOCATE. L'usage est le suivant : DEALLOCATE(liste tableaux, STAT=erreur) La variable erreur est un entier, elle indique surtout un essai de libration d'une variable n'ayant jamais exist. Exemple : REAL*4 tableau [ALLOCATABLE](:,:) INTEGER dim_x, dim_y, erreur Ouverture du fichier de donnees OPEN(12, FILE='ENTREE.DAT',STATUS='OLD) Lecture des dimensions READ(12,*) dim_x, dim_y

c c

JJH, 2005,2011

Le langage FORTRAN - page 27

Allocation ALLOCATE(tableau(dim_x, dim_y),STAT=erreur) IF(erreur.NE.0) STOP 'Erreur Allocation memoire' Lecture de tous les termes du tableau DO I=1,dim_x READ(12,*)(tableau(I,J),J=1,dim_y) END DO ..... Liberation memoire DEALLOCATE(tableau)

Lorsque l'on alloue dynamiquement de l'espace mmoire une variable dans un sousprogramme, cet espace est automatiquement libr lorsque l'on quitte le sous programme, s'il est compil en FORTRAN95. 3.5 Les nouvelles formes de dclaration des variables Avec le FORTRAN 90, la dclaration des variables s'est un peu modifie. Les dclarations classiques du FORTRAN 77 restent utilisables. FORTRAN 90 admet une forme un peu diffrente, simple assimiler. Les types de variables restent identiques. Les dclarations suivantes sont similaires : REAL*4 A,B,X DIMENSION A(9), B(9,9) INTEGER*2 I,J,K Peut scrire : REAL(4),DIMENSION(9):: A REAL(4),DIMENSION(9,9):: B INTEGER(2):: I,J,K Ou encore : REAL(4):: A(9),B(9,9) INTEGER(2):: I,J,K FORTRAN90 offre des possibilits de gestion de mmoire beaucoup plus performantes que ses prdcesseurs. Il peut automatiquement crer lespace mmoire ncessaire au moment de lentre dans un sous-programme ou dans une fonction, et librer cet espace au moment de la sortie du module. Il faut, dans ce cas, dclarer les tableaux en utilisant les arguments dappel. Exemple : SUBROUTINE TRAITEMENT(I,J) REAL(4), DIMENSION(I*2,J) ::B Lespace occup par le tableau B est automatiquement libr la sortie du module. Lallocation dynamique de la mmoire est une mthode prfrable. Elle sutilise, compte tenu des nouvelles notations, comme suit :

JJH, 2005,2011

Le langage FORTRAN - page 28

REAL(4), DIMENSION( :,:), ALLOCATABLE :: B ALLOCATE(B(I*2,J)) DEALLOCATE(B) ALLOCATE(B(10,30)) . DEALLOCATE(B) La premire dclaration peut tre crite plus simplement : REAL(4), ALLOCATABLE :: B(:,:) 3.6 Les pointeurs Les pointeurs sont des variables contenant ladresse dune autre variable, souvent dun tableau. Ils ont en outre la particularit de pouvoir soit prendre ladresse dun tableau classique, dj existant, ou se comporter comme une variable dynamique (allocation dynamique de mmoire). Exemple : REAL(4), DIMENSION(:),POINTER :: PNTR_TAB REAL(4), DIMENSION(50),TARGET :: TABLE PNTR_TAB => TABLE . NULLIFY(PNTR_TAB) ALLOCATE(PNTR_TAB(100)) DEALLOCATE(PNTR_TAB) On attribue l'adresse au pointeur l'aide de l'oprateur => qui signifie pointer sur . Le pointeur est libr par l'instruction NULLIFY. L'instruction ASSOCIATED vrifie si un pointeur est bien associ avec sa cible. 3.7 Dclaration des sous-programmes et fonctions passs en argument Lorsqu'un argument d'appel est une fonction, le processus de passage d'argument entre la routine appelante et la routine appele n'est pas identique celui du passage de variables. Il faut prvenir le compilateur que tel ou tel argument est un nom de sous-programme ou de fonction, ce qui est fait l'aide d'une dclaration EXTERNAL toujours place dans le programme appelant. La forme gnrale d'une telle dclaration est : EXTERNAL a, b, c, ... a, b, c, .. sont les noms des sous-programmes ou de fonctions. 3.8 Les Interfaces Les interfaces sont des modules descriptifs, notamment de sous programmes et de fonctions, destins au compilateur. Ces modules dcrivent la manire d'appeler un sous programme ou
JJH, 2005,2011

Le langage FORTRAN - page 29

une fonction, en numrant la liste des paramtres. Le compilateur sait alors si les appels faits aux diffrents sous-programmes sont corrects ou non. Un bloc interface commence par l'instruction INTERFACE et se termine par END INTERFACE. Gnralement, on place les blocs Interface dans un fichier. Ce fichier est charg en plaant l'instruction USE tout de suite aprs la ligne de dbut du programme ou sousprogramme. L'interface dcrit le sous-programme ou la fonction simplement en reprenant la premire et la dernire ligne (par un simple copier-coller). Entre ces deux lignes, on place les dclarations des arguments. Le bloc INTERFACE se place en tte de programme ou sous-programme. Un moyen plus puissant consiste placer tous les blocs INTERFACE dans un module et de le sauver avec une extension .f90. Cette mthode permettra galement d'viter l'utilisation de blocs COMMON. Exemple d'emploi d'un bloc interface : Le programme appelle un sous programme qui remplit deux tableaux (angle et sinus correspondant). PROGRAM exemple9 REAL(4),ALLOCATABLE::TABLE(:),ANGLES(:) INTEGER(2)::Nb,I Nb=5 ALLOCATE(TABLE(Nb),ANGLES(Nb)) CALL TABLESIN(ANGLES,TABLE,Nb) DO I=1,Nb WRITE(*,*)i,ANGLES(I),TABLE(I) END DO DEALLOCATE(TABLE,ANGLES) END PROGRAM SUBROUTINE TABLESIN(A,V,N) INTEGER(2):: N REAL(4):: A(N),V(N) REAL(4):: PIS2, INCR INTEGER(2)::I PIS2=ATAN(1.0)*2 INCR=PIS2/(N-1) DO I=1,N A(I) = (I-1.)/(N-1)*90 V(I) = SIN((I-1)*INCR) END DO END SUBROUTINE Le programme est le sous-programme sont placs dans des fichiers diffrents et compils. Il n'y a pas d'erreur signale la compilation. Le rsultat affich par le programme donne : 1 0.0000000E+00 0.0000000E+00 2 0.3926991 0.3826835 3 0.7853982 0.7071068 4 1.178097 0.9238795 5 1.570796 1.000000 Press any key to continue

JJH, 2005,2011

Le langage FORTRAN - page 30

En changeant la ligne d'appel du sous programme de la manire suivante, la compilation et l'xcution du programme se passent correctement : CALL TABLESIN(ANGLES,TABLE,5) Le dernier paramtre est cette fois une constante. Si l'on crit ce dernier argument sous la forme d'un rel , il n'y a toujours pas d'erreur de compilation : CALL TABLESIN(ANGLES,TABLE,5.) mais, les rsultats sont un peu diffrents : 1 -4.3160208E+08 -4.3160208E+08 2 -4.3160208E+08 -4.3160208E+08 3 -4.3160208E+08 -4.3160208E+08 4 -4.3160208E+08 -4.3160208E+08 5 -4.3160208E+08 -4.3160208E+08 Press any key to continue Cette erreur est typique d'un dfaut de passage d'arguments. En effet, normalement, le sous programme attend comme dernier argument une valeur sur 2 octets, INTEGER(2), or, le compilateur a interprt la valeur 5. comme un nombre rel, cod sur 4 octets. On remarque qu'il est ais de commettre une erreur de taille sur les arguments. Une erreur frquente consiste confondre INTEGER(2), INTEGER(4) et INTEGER. La dclaration INTEGER produit un entier sur 4 octets, ou rarement sur 2, selon les paramtrages du compilateur. Il est important de surveiller le type et l'ordre des arguments. En ajoutant un bloc INTERFACE, le compilateur dtecte une incohrence : PROGRAM exemple9 INTERFACE SUBROUTINE TABLESIN(A,V,N) INTEGER(2):: N REAL(4):: A(N),V(N) END SUBROUTINE END INTERFACE REAL(4),ALLOCATABLE::TABLE(:),ANGLES(:) INTEGER(2)::Nb,I Nb=5 ALLOCATE(TABLE(Nb),ANGLES(Nb)) CALL TABLESIN(ANGLES,TABLE,5.) DO I=1,Nb WRITE(*,*)i,ANGLES(I),TABLE(I) END DO DEALLOCATE(TABLE,ANGLES) END PROGRAM exemple9.f90(12) : Error: The type of the actual argument differs from the type of the dummy argument. [5.] CALL TABLESIN(ANGLES,TABLE,5.) ----------------------------^ Mais l'interet n'est pas evident : Ecrire 6 lignes de programme supplmentaires pour viter une erreur dans une ligne En fait, on place les blocs INTERFACE dans un module que l'on appelle par l'instruction USE. 3.9 Les Modules Les modules sont des units de programme, comme les programmes, les sous-programmes et les fonctions. Ils sont destins remplacer les blocs COMMON, Permettent ainsi de partager

JJH, 2005,2011

Le langage FORTRAN - page 31

des variables entre diffrents modules xcutables (programme, sous-programmes et fonctions). On y retrouve les interfaces des diffrents sous-programmes et fonctions utiliss dans le projet. Une simple ligne d'instruction USE suffit pour les utiliser. La forme gnrale d'un module est : MODULE nom_module Dclarations de variables globales Dclarations d'interfaces END MODULE nom_module

JJH, 2005,2011

Le langage FORTRAN - page 32

4. Programmes et sous-programmes
4.1 Principe gnral Le programme principal et chaque sous-programme sont analyss sparment par le compilateur. Ils peuvent donc figurer soit dans un mme fichier, soit dans des fichiers spars. Il est prfrable de faire un fichier par sous-programme. Au moment de la mise au point de petits programmes, il est plus facile de faire figurer le programme principal et les sous programmes ensemble, puis de les sparer lorsque la compilation et les essais d'excution ont russi. L'diteur de liens ralise la construction globale du programme et des sous-programmes. Il fait galement des tests de compatibilit au niveau des passages des arguments. Dans le cas o l'on fait figurer dans un mme fichier programme et sous-programmes, le programme principal doit figurer en tte, suivi des sous-programmes, chacun se terminant par END, pour bien dlimiter les blocs. Attention : Prendre l'habitude de faire suivre l'instruction PROGRAM, SUBROUTINE ou FUNCTION par l'instruction IMPLICIT NONE. Elle rend obligatoire la dclaration de toute variable utilise dans le module. Cette prcaution vite souvent des erreurs difficiles dtecter. On distingue 4 types de modules : PROGRAM : Programme principal, tout module dont la premire instruction n'est pas SUBROUTINE, FUNCTION ou BLOCK DATA. Ce module peut comporter comme premire instruction PROGRAM, mais ce n'est pas obligatoire. SUBROUTINE : Ce module est un sous-programme toujours appel par un CALL partir d'un autre module de type programme ou sous-programme. FUNCTION : Ce module est simplement appel par son nom partir d'un autre module. BLOCK DATA : Ce module initialise des variables places dans un COMMON nomm. Se rfrer au chapitre des dclarations.

4.2 Programme principal Un programme comporte 2 parties : Les dclarations concernant les variables, Les instructions excutables.

On peut placer au dbut du programme l'instruction PROGRAM Nom du programme

JJH, 2005,2011

Le langage FORTRAN - page 33

Cette instruction est facultative, le compilateur n'en a nullement besoin, mais en fin de programme, on fera toujours figurer l'instruction END. Structure globale : PROGRAM nom du programme Dclarations des variables utilises Instructions excutables END Attention : On ne peut pas placer de dclaration aprs une instruction excutable. Arrt du programme : Instruction STOP Cette instruction est facultative pour une fin normale de programme. Elle signifie fin de l'excution. La main est alors retourne au shell (superviseur). On peut placer des instructions STOP n'importe o dans le programme, mais de prfrence on n'en placera qu'une juste avant l'instruction END. Fin du programme : instruction END. L'instruction STOP n'est pas obligatoire. En revanche, l'instruction END permet au compilateur de dlimiter les diffrents modules (programme et sous-programmes) figurant dans un mme fichier. Si l'on omet l'instruction END la fin d'un module, le compilateur indiquera une erreur. L'instruction END est excutable depuis la version 77 du FORTRAN. Elle remplace l'instruction STOP la fin du programme principal, et l'instruction RETURN la fin d'une fonction ou d'un sous-programme. Conseil : N'utilisez plus les instructions STOP et RETURN Le programme principal se voit assigner le nom _main, aussi si l'diteur de liens vous signale pour le FORTRAN Microsoft, l'absence de _main, le programme principal a tout simplement t oubli. 4.3 Sous-Programmes Il existe en FORTRAN quatre sortes de sous-programmes : Les fonctions internes, qui ne sont pas rellement des sous-programmes, car intrieurs un programme donn. PROGRAM exemple5 REAL F,X INTEGER I F(X)=X*X-1 DO I=-5,5 X=.5*I WRITE(*,*) X,F(X)
JJH, 2005,2011

Le langage FORTRAN - page 34

END DO END Les fonctions qui sont appeles par leur rfrence dans une expression mathmatique et fournissent un rsultat numrique. Elles sont perues comme des variables "furtives".

Les fonctions implicites qui font partie du langage. Elles se trouvent dans les librairies du FORTRAN. Ce sont par exemple les fonctions mathmatiques du genre SIN(x), SQRT(x), etc. Les sous-programmes qui sont appels par un CALL et peuvent fournir plusieurs rsultats. Ces rsultats figurent obligatoirement parmi les arguments.

4.3.1 Structure d'un sous-programme type SUBROUTINE SUBROUTINE nom(liste des arguments) Dclarations des arguments Dclarations des variables Instructions excutables RETURN END L'instruction RETURN redonne la main au programme appelant. On peut placer plusieurs instructions RETURN dans un mme module, mais pour des raisons de structuration et de lisibilit, on vitera cette pratique. Faire figurer cette instruction de prfrence la fin du module, ou alors l'oublier, car elle n'est plus ncessaire pour les versions actuelles du FORTRAN. Il faut dclarer les arguments comme s'il s'agissait de variables. Le compilateur ne rserve pas la place mmoire, puisque ceci a t fait dans un module hirarchiquement suprieur. En fait, quand le nom d'une variable figure simultanment dans la liste des arguments en entre et dans une dclaration, le compilateur utilise uniquement les informations de type fournies par la dclaration. Arguments et variables peuvent figurer dans une mme dclaration. Il est prfrable, uniquement pour des raisons de clart du module, de sparer les dclarations des arguments et des variables. La forme gnrale de l'appel d'un sous-programme du type SUBROUTINE sera : CALL nom du sous-programme(liste des arguments) Les arguments peuvent tre :

JJH, 2005,2011

Le langage FORTRAN - page 35

des constantes de tous types des expressions arithmtiques ou logiques des noms de fonctions ou de sous-programmes des variables simples ou indices (lments de tableaux) des noms de tableaux

En sortie, le sous-programme peut modifier : les variables simples les variables indices Attention : Au moment de l'appel, les arguments doivent tre identiques en nombre, ordre, type, aux arguments du sous-programme. Le passage d'un tableau entier comme paramtre, se fait en donnant uniquement son nom, non muni de parenthses et d'indices. Dans ce cas, le tableau doit tre redclar dans le sousprogramme. Exemple d'appel de sous-programme : CALL SPROG(A,MAT,10) Cas o un paramtre est un nom de fonction ou de sous-programme : Lors d'un passage d'arguments, il faut prciser au compilateur la nature des arguments passs (s'agit-il de simples variables ou de fonctions ?). On utilise alors la dclaration EXTERNAL en tte du programme appelant. Exemple : EXTERNAL COS, SIN ... ... CALL INTEG(1., 2., COS, SOM1) CALL INTEG(0., 1., SIN, SOM2) ...

Dans l'exemple ci-dessus, on prcise que COS et SIN ne sont pas des variables, mais des fonctions.

4.3.2 Structure d'un sous-programme du type FUNCTION type FUNCTION nom(liste d'arguments) Dclarations Instructions

JJH, 2005,2011

Le langage FORTRAN - page 36

nom = ... ! Instruction Retourner en algo RETURN ! Facultatif END Remarquer 2 choses :

L'entte avec sa dclaration de type, car une fonction retourne une valeur dont il faut dclarer le type

L'instruction de mise en place de la valeur retourne : (nom = ...). Elle correspond l'instruction retourner resultat de l'algorithmique.

L'instruction END dlimite les blocs, et l'instruction RETURN n'est plus obligatoire pour les versions actuelles du FORTRAN. 4.4 Variables et arguments Un sous-programme ou une fonction peut reprendre des tiquettes et des noms dj utiliss par ailleurs, sans pour autant affecter le comportement du programme. En quelques mots, un sous-programme peut tre gliss aprs n'importe quel autre programme sans prcaution particulire comme par exemple une modification des tiquettes. La communication entre le programme appelant et le sous-programme est assure au moyen des arguments d'appel et de l'instruction COMMON. Le passage des arguments dans la liste se fait par rfrence. Le sous-programme peut donc travailler directement dans la mmoire du programme appelant. Deux variables de mme nom situes dans deux procdures diffrentes seront indpendantes, sauf si elles sont lies par un passage de paramtre, une dclaration COMMON, ou une dclaration EQUIVALENCE. Dans un sous-programme, on utilise deux types de variables : 1. Les variables propres au module: Le compilateur rserve en mmoire la place que ncessitent les variables locales. Il convient donc de les dclarer (surtout quand le type de la variable ne correspond pas avec le caractre initial). En fait, pour une plus grande rigueur de programmation, elles devraient toutes tre dclares. Utiliser la dclaration IMPLICIT NONE pour forcer la dclaration des variables. Les tableaux locaux devront donc tre dclars avec une dimension numrique ou dclars dynamiques. 2. Les arguments : Ils sont fournis par le module appelant. Leur place mmoire n'est donc plus rserver, le type de passage de paramtre tant par rfrence (par adresse). Le sous-programme travaille donc
JJH, 2005,2011

Le langage FORTRAN - page 37

directement dans la mmoire du programme principal lorsqu'il utilise les arguments. Mais la dclaration reste cependant ncessaire, elle servira fixer le type de chaque variable s'il peut y avoir ambigut. Une dclaration concernant un paramtre ne provoquera dont pas une rservation mmoire. En ce qui concerne les tableaux, il faut obligatoirement les dimensionner. Le dimensionnement d'un tableau un seul indice ne pose pas de problme, car tous ses lments se suivent en mmoire. La redclaration d'un tel tableau peut se faire comme suit : DIMENSION A(1) Le compilateur ne se proccupe pas de la dimension relle dans ce cas. Tout lment A(I) pourra tre retrouv de manire simple, tant donn la disposition linaire en mmoire des lments. On peut donc dclarer un tableau simple en indiquant qu'il ne contient qu'un seul lment. Le problme est tout autre pour un tableau deux dimensions ou plus. L'accs un lment a(i,j) dpend du nombre de lignes et de colonnes. La dclaration peut alors tre faite en utilisant des variables en indice, mais uniquement dans les sous-programmes. Attention, ces variables doivent galement figurer dans la liste des arguments. Exemple pour le cas d'une matrice carre passe en paramtre : C Programme principal PROGRAM TOTO C ... DIMENSION A(50,50) N = 50 C ... CALL SPROG(A,N) C ... END C Sous-programme SUBROUTINE SPROG(B,M) DIMENSION B(M,M) C ... RETURN END

Attention M devra tre rigoureusement identique la valeur de la dimension dclare dans le programme principal. Dans la liste des arguments, les bornes des tableaux doivent prcder les tableaux auxquels elles sont associes.

Ex: Calcul d'une intgrale par la mthode des trapzes. L'intgrale s'exprime sous la forme:
1 x 2 ( f ( a ) + f (b)) + f ( a + ix )

JJH, 2005,2011

Le langage FORTRAN - page 38

Le calcul de l'intgrale est effectu par une fonction que l'on appellera TRAP. Cette fonction pourra tre compile sparment et lie au programme appelant au moment de l'dition des liens. Le programme qui suit sera appel PROG.FOR: FUNCTION GAUS(T) GAUS= EXP(-T*T/2.) RETURN END c EXTERNAL GAUS c WRITE (*,*) 'Donner EPS1 et EPS2...' READ (*,*) EPS1,EPS2 Y=TRAP (-10.,10.,GAUS,EPS1) Z=TRAP (-10.,10.,GAUS,EPS2) WRITE(*,10) Y,Z FORMAT (2F12.4) END

10

On peut dissocier le module fonction, et le compiler sparment sans problme particulier. On pourra essayer de dplacer la dclaration EXTERNAL avant la fonction et surveiller les messages d'erreur qui ne manqueront pas d'apparatre. Si l'on oublie de mentionner GAUS comme tant externe, la fonction TRAP ne recevra pas les donnes ncessaires au calcul de la fonction GAUS et le programme "plantera", mme si aucun message d'erreur n'est apparu durant la compilation ou l'dition des liens. Comme dj dit, on aura mme intrt compiler sparment la fonction d'intgration par la mthode des trapzes judicieusement appele TRAP() et la runir au programme appelant seulement au moment de l'dition des liens (LINK ou ld). Si l'on dispose d'une foule de petits utilitaires, on aura certainement avantage se crer sa propre librairie de fonctions et sousprogrammes l'aide d'un libraire, mais ceci est une autre histoire... La fonction TRAP(), qui sera nomme TRAP.FOR est donne ci-dessous. On la compilera sparment: FUNCTION TRAP(A,B,F,DX) c================================================== c A et B sont les bornes d'integration c F est la fonction a integrer c DX est le pas de l'integration c================================================== c N=(B-A)/DX-.5 c N est le nombre de pas necessaires (entier >= 1) TRAP=(F(A) + F(B))/2. X=A c DO 10 I=1,N X=X+DX

JJH, 2005,2011

Le langage FORTRAN - page 39

10

TRAP=TRAP+f(X) CONTINUE TRAP=TRAP*DX RETURN END

Le lecteur compilera les diffrentes parties sparment, puis essaiera de les rassembler en un seul bloc pour les compiler en une seule fois. Prendre soin de noter les diffrences au niveau de la programmation. A titre d'exercice, refaire la manipulation en adoptant la mthode de SIMPSON. En gnral, le FORTRAN est fourni avec un environnement de dveloppement qui permet l'dition des diffrents modules et la gestion de projet. Le descripteur de projet fait apparatre tous les fichiers source (.for et .f90) qui composent le projet.

JJH, 2005,2011

Le langage FORTRAN - page 40

5.

Algorithmique et FORTRAN

5.1 Noms de blocs En algorithmique, on dcrit les programmes l'aide de diffrents modules. Ces modules sont des programmes, des sous-programmes ou des fonctions. Ils sont dlimits par les dclarations de dbut et de fin. Les dclarations des variables et arguments suivent obligatoirement la dclaration de dbut de module et prcdent toute instruction excutable. Attention : Une erreur frquente signale par le compilateur est l'apparition d'une dclaration aprs une instruction excutable. 5.2 Dclarations 5.2.1 Les dclarations de modules Elles sont dj connues : PROGRAM, FUNCTION, SUBROUTINE, BLOCK DATA 5.2.2 Les dclarations de type Elles sont utilises aussi bien pour les variables locales que pour les arguments. Citons pour mmoire les plus frquentes : LOGICAL, CHARACTER, INTEGER, REAL, COMPLEX, RECORD 5.2.3 les dclarations d'agencement mmoire Ce sont les dclarations EQUIVALENCE, COMMON, DIMENSION, STRUCTURE, ALLOCATABLE... Elles influent l'organisation en mmoire des variables. 5.3 Constructions 5.3.1 Constructions squentielles 5.3.2 Constructions alternatives 5.3.2.1 Si... Alors... Sinon... Fin Si L'action conditionnelle simple: l'instruction IF. Le rsultat d'un test IF est logique. Sa valeur peut tre .TRUE. ou .FALSE. . L'action suivant le test est donc soit ignore, soit excute. Le test simple se prsente sous la forme suivante: IF (expression rsultat logique) instruction

JJH, 2005,2011

Le langage FORTRAN - page 41

Si l'expression rsultat logique donne un rsultat vrai, alors l'instruction qui la suit est excute, sinon elle est ignore. L'instruction excuter doit tre place sur la mme ligne. Il ne faut pas mettre de END IF. Exemple : IF(I.GE.N) STOP 1 Cependant, il arrive qu'une instruction soit insuffisante. Pour viter des blocs d'instructions dlimits par des GOTO, comme c'tait souvent le cas dans les anciennes versions de FORTRAN, on dispose de la squence IF .... THEN / ENDIF THEN marque le dbut d'une squence d'instructions dlimite par l'instruction ENDIF Exemple : IF(I.LE.N) THEN I=I+1 MOT='' ENDIF On l'utilise donc sous la forme: IF (Expression rsultat logique) THEN Squence d'instructions ENDIF Le THEN est plac sur la mme ligne que le IF. Sur les lignes suivantes est dispose la squence d'instructions excuter si la condition du IF est vraie. Cette squence se termine imprativement par un END IF. Un enrichissement complmentaire: ELSE (sinon). L'algorithme d'utilisation est: Si (expression vraie) alors faire: Sequence 1 Sinon faire: Sequence 2 Fin de la boucle conditionnelle.

Il s'agit l d'une squence alternative. On peut donner comme exemple: READ(*,*) N1, N2 IF (N2.EQ.0) THEN WRITE(*,*) 'ATTENTION, LE DIVISEUR EST NUL' ELSE WRITE(*,*) 'LE QUOTIENT DE', N1,'PAR',N2,'VAUT',N1/N2

JJH, 2005,2011

Le langage FORTRAN - page 42

ENDIF

On peut galement imbriquer les constructions alternatives. 5.3.2.2 Squence Cas o La squence cas o existe en FORTRAN 90 sous la forme suivante : SELECT CASE (selecteur) CASE (Expr.1) squence 1 CASE (Expr.2) squence 2 ... [CASE DEFAULT squence dfaut] END SELECT Dans ce cas, les expressions peuvent couvrir diffrentes formes. On peut combiner des intervalles de valeur dans un cas o : CASE (10:14, 'A':'Z', '_') Si le slecteur possde une valeur comprise entre 10 et 14, ou entre les codes ASCII de A et Z ou est gal au code ASCII de _, la squence suivant l'instruction CASE sera excute. 5.3.3 Constructions itratives 5.3.3.1 Boucle Pour... Fin Pour Une boucle est une suite d'instructions que le programme va parcourir un certain nombre de fois. Le mot-cl d'une boucle est: DO Syntaxe: DO tiquette I = N1,N2,INCR .... tiquette CONTINUE Les lments d'une boucle DO sont : tiquette : Elle dtermine l'tendue de la boucle. Souvent elle pointe l'instruction CONTINUE, mais ceci n'est plus obligatoire. I : C'est le compteur. Cette variable doit obligatoirement tre entire. Il s'incrmentera de 1 chaque bouclage, partant de N1 et s'arrtant la valeur N2. N1 et N2 : Bornes du compteur de boucle.

JJH, 2005,2011

Le langage FORTRAN - page 43

INCR : Un compteur de boucle peut voluer non seulement par incrment de 1, mais aussi se dcrmenter, ou voluer par pas entiers constants, mais quelconques. Cet lment est facultatif. Son absence sous entend un incrment de 1.

Attention, les boucles multiples doivent tre imbriques et les indices diffrents. Exemple d'utilisation d'une boucle c boucle elementaire DO 10 I = 1, 10 WRITE(*,*) I CONTINUE

10

c lecture simple d'un tableau dans un fichier sur unite c 7 DO 100 I = 1,L DO 50 J = 1,M READ(7,*)A(I,J) CONTINUE CONTINUE

50 100

On peut galement trouver la boucle Pour sous la forme : DO index = min, max [,pas] instructions ENDDO L'exemple prcdent s'crit alors : DO I = 1,L DO J = 1,M READ(7,*)A(I,J) END DO END DO Dans les boucles do l'index peut tre un rel ou un entier. Mais pour des raisons de purisme, on n'utilisera que des index entiers.

5.3.3.2 Boucle Tant... Fin Tant Que Cette boucle traduit la construction suivante : Tant Que condition vraie faire Instructions rpter Fin Tant Que.

JJH, 2005,2011

Le langage FORTRAN - page 44

On peut la trouver sous deux formes, quand elle existe : DOWHILE (expression conditionnelle) instructions ENDDO ou bien : WHILE etiquette (expression conditionnelle) instructions xx CONTINUE

Cette construction n'existe pas sur tous les compilateurs. On peut alors la crer en se basant sur les boucles Itrer : Tant Que (condition pour rester dans la boucle) Instructions Fin Tant que est quivalent : Iterer Sortir si (condition de sortie de boucle) Instructions Fin Iterer

On la traduira en FORTRAN par une boucle Itrer : C et1 Tant que non condition de sortie IF (condition de sortie) GOTO et2 ... Instructions de boucle ... GOTO et1 CONTINUE Fin Tant que

et2 C

et1 et et2 sont des tiquettes numriques Les commentaires sont utiles pour mettre en vidence la construction.

JJH, 2005,2011

Le langage FORTRAN - page 45

5.3.3.3 Boucle Faire ... tant que ou jusqu' ce que La construction Faire ... Tant Que n'existe pas en FORTRAN. Dans ce cas, il conviendra galement de la construire l'aide des instructions GOTO et IF: Faire Instructions de boucle Tant que condition vraie En FORTRAN : C et1 ... instructions ... IF (condition vraie) GOTO et1 Tant Que condition vraie 5.3.3.4 Boucles indtermines ou boucles ITERER Il est possible en, FORTRAN 90, d'crire des boucles iterer gnralises. La condition de sortie se posera alors sous la forme : IF(condition de sortie) EXIT La boucle suivante : DO WHILE(I .LE. 100) sequence END DO devient alors : DO IF(I .GT. 100) EXIT sequence END DO Faire CONTINUE

JJH, 2005,2011

Le langage FORTRAN - page 46

6. Les Entres-Sorties
6.1 Instructions de lecture et d'criture simples 6.1.1 Gnralits Elles revtent un caractre important, car elles permettent la communication avec l'utilisateur ou avec des units particulires comme les MODEMS (liaisons tlphoniques), fichiers sur disque, ou sur des consoles particulires. Quatre questions essentielles se posent pour cette opration: 1. 2. 3. 4. Dans quel sens (entre ou sortie)? Sur quel priphrique? Faut-il une conversion, un formatage? Echanger quoi?

Une entre de donnes correspond l'instruction READ, une sortie WRITE, comme nous avons dj pu le constater. Le fortran attribue chaque priphrique un numro d'unit logique. Fortran attribue le caractre * la console. Le format d'dition qui peut-tre considr comme tant la mise en forme est conditionn par l'instruction FORMAT qui est rfrence par une tiquette. L'instruction d'entre-sortie est suivie de la liste des donnes transmettre. Exemple: READ(unit logique, tiquette du format) liste de variables WRITE(unit logique, tiquette du format) liste de variables Les assignations standard des units logiques varient selon le type de compilateur. Pour les FORTRAN Microsoft ou COMPACQ, elles sont:

* ou Astrisque, reprsente la console 0 Reprsente initialement la console, mais peut galement reprsenter un fichier sur le disque 5 Reprsente initialement le clavier 6 Reprsente initialement l'cran

La constitution des formats sera vue plus loin. On peut utiliser le signe * pour dsigner l'unit logique standard qui est la console et le FORMAT libre ou automatique. C'est gnralement ce que fera le dbutant, ou lorsque l'on veut crire rapidement un programme.

JJH, 2005,2011

Le langage FORTRAN - page 47

Exemples de lecture et d'criture standard : READ(*,*)A,B,C WRITE(*,*)A,B,C

En conclusion, l'utilisation des instructions READ et WRITE standard est courante lors de la ralisation premier jet d'un programme.

6.1.2 Instruction de lecture La forme gnrale simple d'un ordre de lecture est : READ(constante entire,*) {liste des variables destination La constante entire dsigne le fichier source d'o proviennent les donnes. Rappelons que le systme considre galement les priphriques (console) comme tant un fichier dj ouvert. Cette constante est comprise entre 1 et 99. Voir le paragraphe prcdent pour les assignations standard. A chaque ordre READ, une nouvelle ligne du fichier lire est examine. Le signe * signifie que les valeurs lire peuvent avoir t crites sans contrainte de cadrage et de prsentation. Il suffit de faire apparatre les donnes dans l'ordre de lecture, et de les sparer par des blancs, tabulations, ou par des virgules. On peut cependant effectuer des lectures sur des prsentations plus complexes, mais dans ce cas, il faut utiliser une rfrence une ligne FORMAT la place de l'toile. La liste des variables dfinit celles qui seront affectes lors de l'opration de lecture, les valeurs tant attribues dans l'ordre de l'apparition des variables. Les donnes entres devront tre du mme type que les variables destination. Attention : Lorsque l'on utilise une entre formate, les caractres blancs sont lus comme tant des zros, ce qui peut avoir de graves consquences lorsque ces blancs sont situs aprs les chiffres exprims. Exemple : On fait une lecture avec la spcification I4 (voir dans le paragraphe FORMAT) (Le caractre espace est matrialis par le caractre b) 1 2 3 4 b 1 2 b

JJH, 2005,2011

Le langage FORTRAN - page 48

Au lieu de lire 12 comme espr, on lit 120 ! On prfrera le format libre obtenu avec *.

6.1.3 Instruction d'criture La forme gnrale de l'ordre d'criture au format standard est : WRITE(constante entire,*) liste de donnes Les donnes sont des constantes ou des variables spares par une virgule. A chaque instruction WRITE, une nouvelle ligne est crite sur le fichier destination. Le fichier destination est repr par une constante entire (voir l'instruction READ). Le signe * signifie qu'une prsentation standard automatique est dsire (FORMAT standard). Il est utilis pendant la mise au point des programmes. Lors de la finition et de l'amlioration de la prsentation, l'instruction d'criture sera toujours rfrence une ligne FORMAT. Pour une sortie formate de rsultats, on utilisera la forme suivante : WRITE(numro unit, tiquette ligne FORMAT) liste variables Exemple : IMP=2 WRITE (IMP,100) I,J,A,B FORMAT (2I4,F12.4,3X,E15.8)

100

On peut galement utiliser une forme plus condense, mais identique : IMP=2 WRITE (IMP,'(2I4,F12.4,3X,E15.8)') I,J,A,B

6.1.4 Les boucles implicites dans les instructions le lecture-criture Le FORTRAN offre une facilit en ce qui concerne les entres-sorties de valeurs de type tableau : les boucles implicites. Les boucles implicites sutilisentde la manire suivante : WRITE(*,*) (TABLE(I),I=1,N) Une autre faon daffichage du tableau est : DO I=1,N WRITE(*,*) TABLE(I) END DO Chaque fois quun WRITE est ralis, il y a saut de ligne, ce qui signifie que dans le second exemple, TABLE est affich en colonne, c'est--dire avec une valeur par ligne. Avec la boucle

JJH, 2005,2011

Le langage FORTRAN - page 49

implicite, linstruction WRITE apparat comme tant suivie par la liste complte des lments du tableau. Pour laffichage de tableaux complets, et de taille raisonnable, on peut utiliser la construction suivante : DO I=1,M WRITE(*,*) (TABLE(I,J), J=1,N) END DO Les boucles implicites se rencontrent galement avec linstruction READ. La lecture des donnes en tableau se fait souvent avec une boucle implicite place linterieur dune boucle explicite. On peut galement touver des boucles implicites dans une ligne dinstruction DATA.

6.1.5 Formats de lecture-criture Les entres sorties peuvent se faire en format libre, ou rfrences des lignes FORMAT. Ces lignes indiquent en fait un canevas suivre pour la prsentation des rsultats. Les lignes FORMAT contiennent les spcifications de conversion, des messages, des commandes d'imprimante ou de gestion simple du curseur. Elles peuvent se placer n'importe o dans le programme, mais on les placera de prfrence la fin du module, juste avant l'ordre END.

Les spcifications de conversion sont de la forme : nIm : Cette spcification s'applique aux variables entires. m indique le nombre de caractres imprimer, ou le nombre de caractres lire sur le fichier. n reprsente le nombre de rptitions de cette spcification. Dans l'exemple prcdent, 2I4 s'applique aux variables I et J; ces quantits tant imprimes avec un maximum de quatre chiffres. On aurait pu crire la ligne FORMAT de la manire suivante: 100 FORMAT (I4, I4, F12.4, 3X, E15.8)

nFl.d : Cette spcification s'applique aux donnes relles. n garde le mme rle que prcdemment. l reprsente le nombre de caractres maximal, y compris le signe et le point. d reprsente le nombre de chiffres imprimer aprs la virgule. Exemple : Soit le caractre -123.4567 imprimer. Nous obtiendrons: F9.4 F11.4 -123.4567 bb-123.4567
JJH, 2005,2011

Le langage FORTRAN - page 50

F8.4 F13.6 F6.0

******** erreur bb-123.456700 b-123.

Dans le morceau de programme prcdent, F12.4 s'applique la variable A.

nEl.d : Lorsque l'on ne connat pas l'ordre de grandeur de la valeur, il est prfrable de demander en impression la notation scientifique. A l'affichage apparat un E suivi de l'exposant de la puissance de Dix. Il faut que l soit >= d+7. Exemple : pour obtenir un affichage du type 0.xxxx, on utilise le format passe-partout E15.8. nDl.d : Est l'quivalent du prcdent, mais pour des quantits donnes en double prcision. La formule passe-partout serait: D23.16. nGl.d : Recouvre I, F, E ou D. la sortie se fait dans le format convenant le mieux la valeur. Pour les nombres complexes, on emploie deux spcifications de type F, E, ou G. nAl : Permet la manipulation de chanes de caractres. l reprsente le nombre de caractres afficher. nX : Insre n blancs ou permet de sauter n caractres la lecture. nH<Caractres> n dsigne le nombre de caractres et Caractres est une chane de n caractres directement accole H. Ex : Supposons que les variables A et B valent respectivement 3.14159 et 9.81. Les lignes de programme suivantes: 100 WRITE (IMP,100) A,B FORMAT (8H*** A= ,F5.2,3X,3HB= ,F5.2)

donneraient comme rsultat l'imprimante: *** A= 3.14 B= 9.81 On veillera ce que n reprsente la longueur exacte de la chane de caractres sous peine de modifier compltement les formats d'dition suivants s'ils existent. Une mauvaise valeur provoquera certainement un message d'erreur. Le caractre / figurant dans un format provoquera un changement de ligne. Ex : 10 WRITE(IMP,10) A,B FORMAT (I5 / F12.5)

JJH, 2005,2011

Le langage FORTRAN - page 51

On peut rpter certains caractres en procdant de la manire suivante: FORMAT (1X,19H*******************/) peut tre remplac par: FORMAT (1X,19(1H*)/) o 19 est un multiplicateur. Certains compilateurs autorisent l'usage du signe $ qui empche le passage la ligne suivante la fin d'une instruction WRITE. Le fait que parfois une instruction format contienne plus de spcifications que ncessaire ne gne pas. Seules seront utilises dans ce cas les premires. Si l'inverse, le nombre de spcifications est trop court, le format est parcouru une seconde fois, voire plus encore. En ce qui concerne l'impression, uniquement pour certains compilateurs, le papier dans l'imprimante peut tre contrl en utilisant les caractres suivants:

+ provoque une surimpression 1 fait aller la page 0 fait sauter une ligne

Tout autre caractre fait aller la ligne. Ainsi si l'on veut imprimer RESULTATS DU CALCUL, en crivant 10 WRITE (IMP,10) FORMAT (19HRESULTATS DU CALCUL)

fait aller la ligne(le premier caractre est diffrent de +,1,0), et ce caractre est mang!: ESULTATS DU CALCUL Il aurait fallu provoquer un saut de page et crire le titre au dbut de la nouvelle page de la manire suivante: 10 FORMAT (20H1RESULTATS DU CALCUL)

6.2 Echanges avec les fichiers 6.2.1 Dfinition de fichier Il sera intressant d'envoyer certains rsultats dans des fichiers, pour une utilisation ultrieure par un programme diffrent. Ces fichiers pourront tre utiliss soit pour la lecture de donnes (entre), soit pour le stockage de donnes (sortie). Lorsque les rsultats d'un programme sont nombreux, il est pratique de pouvoir les consulter dans un fichier, l'aide d'un diteur de texte. Le fichier dans ce cas l, sera un fichier texte, accs squentiel. On utilise souvent un fichier rsultat pour passer des donnes un autre programme de posttraitement. Ce cas peut alors tre assimil une forme particulire de passage d'arguments. Un fichier est un ensemble de donnes inscrites sur un support de masse. Le fichier est dsign par un nom suivi dune extension facultative. Lextension donne en gnral des informations sur la provenance ou la destination des donnes. Un fichier contenant du texte aura comme

JJH, 2005,2011

Le langage FORTRAN - page 52

extension .txt , ce qui en permettra louverture laide du bloc-notes par un double-clic sur le nom du fichier. Si le fichier contient des donnes binaires, on choisira une extension autre que .txt , par exemple .bin ou .dat . 6.2.2 Contenu dun fichier Le contenu dun fichier est dcid par le concepteur du programme. On distingue deux genres de fichiers : 1. Les fichiers Formats. Ce sont des fichiers texte, qui peuvent tre ouverts par un diteur de texte et qui peuvent tre affichs sans dcodage particulier. Le FORTRAN considre par dfaut un fichier comme Format, c'est--dire comme fichier texte. 2. Les fichiers Non Formats. Ce sont en gnral des fichiers binaires. Seul un programme spcialement dvelopp en permettra la lecture. Lintrt de ce genre de fichier est la compacit. Les donnes y sont inscrites exactement comme elles figurent en mmoire : sous la forme binaire. 6.2.3 Modes daccs un fichier Il existe deux modes daccs : 1. Le mode Squentiel. Cest le mode daccs le plus courant. Dans ce mode, les donnes sont places dans le fichier dans lordre dapparition des instructions dcriture. Le fichier ne peut tre modifi que par lajout de donnes en fin de fichier. Si lon veut insrer des donnes un endroit quelconque du fichier, sans modifier les donnes existantes, il faut passer par un fichier intermdiaire. Lcriture dans un fichier squentiel efface toutes les donnes qui sont situes aprs les donnes que lon vient dcrire. 2. Le mode Direct. Ce mode permet laccs direct nimporte quel enregistrement du fichier, que ce soit en lecture ou en criture, sans affecter les autres enregistrements. La modification dun enregistrement quelconque est possible sans faire appel des manipulations de fichiers et de donnes. Linconvnient majeur de ce mode est lobligation davoir des enregistrements de longueur identique. 6.2.4 Mode opratoire Lutilisation dun fichier necessite trois tapes essentielles : 1. Ouverture du fichier (instruction OPEN) 2. Accs au fichier (instruction READ ou WRITE) 3. Fermeture du fichier (Instruction CLOSE) Il est possible douvrir simultanment plusieurs fichiers, pourvu que le numro dunit soit diffrent. Il est raisonnable de fermer le fichier lorsque lon en a plus besoin. 6.3 Les instructions relatives aux manipulations de fichiers 6.3.1 Ouverture d'un fichier OPEN ([UNIT=]unite [,ACCESS=acces] [,BLANK=blanks] [,ERR=etiquette]

JJH, 2005,2011

Le langage FORTRAN - page 53

[,FILE=fichier] [,FORM=format] [,IOSTAT=erreur] [,RECL=lg_rec] [,STATUS=status])

Notations : les spcifications entre crochets sont facultatives. Une instruction standard d'ouverture de fichier a gnralement la forme suivante : OPEN(unite, FILE = 'nom du fichier', STATUS = 'OLD' 'NEW' 'UNKNOWN') Chaque paramtre peut apparatre dans un ordre quelconque. Si l'on omet UNIT, la valeur unit doit apparatre en premier. Cest cette forme qui est en gnral adopte. 6.3.1.1 Description de chaque paramtre unit : nombre entier qui sera choisi entre 10 et 99. Il est possible de prendre des valeurs infrieures 10, au risque davoir des ennuis lxcution, et ventuellement une incompatibilit avec dautres compilateurs. Ce sera le numro d'accs au fichier. Ce numro est arbitraire, mais il sera rserv ce fichier durant toute la dure de son ouverture. acces : 3 types d'accs seront possibles. 'SEQUENTIAL', 'DIRECT' ou 'APPEND' (pas implment sur tous les compilateurs). Le mode daccs par dfaut est SEQUENTIAL. blanks : Option qui permet d'valuer les espaces comme tant 'NULL' (par dfaut) ou 'ZERO' etiquette : Etiquette d'une ligne instruction qui sera appele en cas de problme fichier : Expression alphanumrique signifiant le nom du fichier. format : Expression qui sera soit 'FORMATTED', soit 'UNFORMATTED'. Si l'accs est squentiel, le format par dfaut sera 'FORMATTED'. erreur : Variable entire, nulle si pas d'erreur, ngative si fin de fichier rencontr, valeur positive non nulle figurant l'erreur si problme. lg-rec : Expression entire prcisant le nombre de bytes d'un enregistrement pour un fichier accs direct. Ignor pour un squentiel. status : Peut tre 'OLD', 'NEW', 'SCRATCH', 'UNKNOWN', 'APPEND'. OLD : Le fichier doit dj exister
JJH, 2005,2011

Le langage FORTRAN - page 54

NEW : Le fichier est crer . SCRATCH : Le fichier est dtruit la fin du programme. APPEND : Le fichier existe dj, et on se place la fin pour rajouter des donnes. UNKNOWN : NEW ou OLD si le fichier existe ou non. Exemples : c Ouverture d'un fichier existant deja OPEN (11, FILE='DONNEES.DAT') ... c Ouverture d'un nouveau fichier pour y placer des c resultats OPEN (12, FILE='RESULT.DAT',ACCESS = 'SEQUENTIAL', + STATUS='NEW')

6.3.2 Fermeture d'un fichier La fermeture d'un fichier se fait automatiquement lorsque le programme se termine normalement. Ne pas utiliser le signe * dans l'instruction de fermeture de fichier. Syntaxe : CLOSE([UNIT=]unite [,ERR=etiquette] [,IOSTAT=erreur] [,STATUS=status])

Si l'on omet de mentionner UNIT=, le numro de unit doit figurer en premier. L'ordre des arguments n'a pas d'importance. Description de chaque paramtre : unit : Nombre entier spcifiant l'unit externe. Aucune erreur ne sera signale si cette unit n'a pas t ouverte. etiquette : tiquette d'une instruction excutable dans le mme programme. Cette instruction sera excute si une erreur d'accs au fichier se produit. erreur : Variable entire ou lment de tableau qui se verra affecter le numro d'erreur si celle-ci se produit. status : Peut tre 'KEEP' (conserver) ou 'DELETE' (effacer). Les fichiers ouverts sans nom auront un status par dfaut 'DELETE' qui signifie effacer aprs fermeture. Ces fichiers sont considrs comme fichiers temporaires. Le status par dfaut pour les autres fichiers sera 'KEEP'.

JJH, 2005,2011

Le langage FORTRAN - page 55

Exemple : c fermeture et effacement du fichier 8 CLOSE(8, STATUS='DELETE) 6.3.3 Enregistrement "fin de fichier" Cette instruction est peu utilise. ENDFILE unite ou ENDFILE ([UNIT=]unite [,ERR=etiquette] [,IOSTAT=erreur]) Les arguments sont identiques ceux dj vus pour OPEN et CLOSE. Aprs avoir crit l'enregistrement fin de fichier, L'instruction ENDFILE empche tout transfert supplmentaire de donnes si l'on n'a pas auparavant utilis l'instruction REWIND ou BACKSPACE. Lorsque l'on opre sur un fichier accs direct, les enregistrements situs aprs l'enregistrement fin de fichier seront effacs. Exemple d'utilisation sur un fichier ouvert sur le numro 7: WRITE (7,*) resultat ENDFILE 7 REWIND 7 READ (7,*) donnee

6.3.4 Positionnement d'un enregistrement en arrire sur un fichier BACKSPACE unite ou BACKSPACE ([UNIT=]unite [,ERR=etiquette] [,IOSTAT=erreur]) Les arguments ne demandent pas d'explication particulire. Exemple d'utilisation pour le fichier 7 : BACKSPACE 7 ou BACKSPACE (7) ou UNITE = 7 BACKSPACE UNITE ou
JJH, 2005,2011

Le langage FORTRAN - page 56

BACKSPACE (UNIT=unite, ERR=100, IOSTAT=code_erreur)

6.3.5 Repositionnement d'un fichier sur le premier enregistrement REWIND unit ou REWIND ([UNIT=]unit [,ERR=etiquette] [,IOSTAT=erreur]) Cette commande rappelle les inscriptions que l'on peut voir sur un magntophone non francis. Elle provient de l'poque o les mmoires de masse de type disque n'existaient pas encore. Les bandes magntiques servaient alors de moyen de stockage de l'information. Ce moyen est encore utilis pour stocker des donnes lorsque elles sont trop nombreuses pour pouvoir figurer sur un disque dur. La lecture tait plus lente. Cette instruction est toujours valable. Si lon veut se repositionner au dbut dun fichier squentiel ouvert, linstruction REWIND convient parfaitement. Attention, si lon procde une criture apres un REWIND, toutes les donnes situes aprs celles que lon vient dcrire seront perdues.

6.3.6 Lecture des particularits d'une unit ou d'un fichier INQUIRE ([UNIT=]unit ou FILE='nom_de_fichier' [,ACCESS=acces] [,BLANK=blanks] [,DIRECT=direct] [,ERR=tiquette] [,EXIST=exist] [,FORM=forme] [,FORMATTED=formatte] [,IOSTAT=erreur] [,NAME=nom] [,NAMED=nomme] [,NEXTREC=nextr] [,NUMBER=numero] [,OPENED=ouvert] [,RECL=lg] [,SEQUENTIAL=seq] [,UNFORMATTED=unf]) Cette instruction est utilise dans les sous-programmes devant acder un fichier dj ouvert par ailleurs. 6.3.6.1 Description des arguments acces : Variable alphanumrique qui contiendra au retour une des chaines de caractres suivantes : 'SEQUENTIAL'

JJH, 2005,2011

Le langage FORTRAN - page 57

'DIRECT' blanks : Variable alphanumrique qui se verra affecter au retour soit 'NULL', soit 'ZERO'. direct : Variable alphanumrique, qui contiendra selon le type d'accs 'YES' pour direct ou 'NO' ou 'UNKNOWN'. exist : Variable logique qui contiendra .TRUE. si le fichier existe, sinon .FALSE.. forme : Variable alpha. Si l'unit ou le fichier est connect une entre-sortie formate, forme contiendra 'FORMATTED', sinon 'UNFORMATTED' formatte : Variable alpha, rponse la question FORMATTED?. Contiendra 'YES', 'NO', 'UNKNOWN'. nom : Variable alphanumrique qui contiendra le nom du fichier connect unit. nomme : Variable logique. .FALSE. si le fichier est un fichier temporaire (sans nom ou scratch). nextr : variable entire, numro du prochain enregistrement pour un fichier accs direct. numero : Variable entire qui contiendra le numro de l'unit connect au fichier dont le nom devra tre spcifi. ouvert : Variable logique qui sera .TRUE. si un fichier est effectivement connect l'unit prcise. lg : Variable entire qui contiendra le nombre d'octets d'un enregistrement pour un fichier accs direct. seq : Variable alphanumrique. Contient 'YES' si le fichier prcis est accs squentiel. unf : Variable alphanumrique. Contient 'YES' si le fichier est de forme non formate.

Exemple d'utilisation : Vrification de l'existence d'un fichier. CHARACTER*12 nom LOGICAL existe c verification de l'existence : INQUIRE(FILE=nom, EXIST=existe) c entree du nom de fichier 100 WRITE(*,*)'Donnez le nom du fichier :' READ(*,*) nom IF(.NOT.existe) THEN WRITE(*,*)'Le fichier n existe pas.'
JJH, 2005,2011

Le langage FORTRAN - page 58

GOTO 100 END IF

6.3.7 Lecture et criture des donnes dans un fichier La lecture et l'criture de donnes dans un fichier se fait avec les mmes instructions que pour la console : READ(unit, format) liste de variables WRITE(unit, format) liste de variables L'unit utilise sera le numro affect au fichier lors de l'ouverture de celui-ci. 6.4 Impression de rsultats La plupart des systmes d'exploitation considrent les imprimantes comme un fichier possdant un nom gnrique, comme PRN pour MS-DOS, ou WINDOWS. Aussi, si l'on dsire imprimer des rsultats directement sur une imprimante, il faut l'ouvrir comme un fichier et y crire les donnes comme d'habitude : ... OPEN(9,FILE='PRN') WRITE(9,*)'Ce texte est destine a l imprimante' ... 6.5 Structures des fichiers et des enregistrements L'accs des donnes rassembles dans un fichier dpend de la forme de stockage et du mode d'accs. On accde des donnes d'un fichier par groupe de donnes. Ce groupe est appel "enregistrement". Les mthodes de stockage des donnes dans le fichier peuvent tre : Formates Non formates Binaires

On peut accder un enregistrement selon deux modes :


Squentiel Direct

L'accs squentiel un enregistrement N implique la lecture des N-1 enregistrements prcdents, alors que l'accs direct permet d'accder en lecture comme en criture n'importe quel enregistrement. Attention dans ce cas, la longueur d'un enregistrement doit tre connue et constante. On peut combiner les mthodes de stockage et les modes d'accs, ce qui donne 6 faons de procder.

JJH, 2005,2011

Le langage FORTRAN - page 59

6.5.1 Les enregistrements formats On cre des fichier formats en spcifiant l'ouverture FORM='FORMATTED'. Les enregistrements sont alors stocks sous forme ASCII, c'est dire directement affichables. Les nombres, utiliss en mmoire sous forme binaire, sont convertis en forme ASCII. Chaque enregistrement se termine par les caractres ASCII Retour chariot et Saut de ligne (CR et LF). 6.5.1.1 Les fichiers squentiels formats Les fichiers squentiels formats comportent des enregistrements qui doivent tre lus de faon squentielle, chaque enregistrement est de longueur quelconque. Attention, il faut s'assurer, lors de la lecture de bien pouvoir lire un enregistrement complet. Chaque enregistrement est spar par une suite CR LF code ASCII 0DH, 0AH. 6.5.1.2 Fichiers formats accs direct Tous les enregistrements possdent la mme longueur. Chaque enregistrement peut directement tre lu ou crit, sans passer par les prcdents enregistrements. La longueur d'un enregistrement est spcifie au moment de l'ouverture par RECL=valeur. En ralit, il faut ajouter 2 caractres CR et LF, qui servent de sparateur. Si l'on crit un enregistrement de longueur infrieure celle spcifie, il est automatiquement combl par des espaces typographiques (code ASCII 32). L'criture du 7me enregistrement suivi du 5me se fera par exemple ainsi :
OPEN(13,FILE='FORDIR',FORM='FORMATTED',ACCESS='DIRECT', RECL=15) ... WRITE(13,'(A)',REC=7) 'Coucou' WRITE(13,'(I6)',REC=5) 12756

Nous aurons sur le disque :


... enregistrement 4 (17 octets) 12756 6(17octets)Coucou [CR/LF]... [CR/LF]enregistrement

La lecture se fait directement, de faon identique. Il est inutile de lire tous les enregistrement prcdant l'enregistrement souhait. 6.5.2 Les enregistrements non formats. Les enregistrements non formats contiennent les donnes brutes, sous une forme identique que celle utilise en mmoire. Par exemple, un rel simple prcision occupe 4 octets en mmoire. Ecrit dans un fichier sous la forme non formate, il occupera galement 4 octets, mais il est inutile de chercher le relire au moyen d'un diteur de texte. Dans un fichier enregistrements formats, un rel occupe autant d'octets que de caractres ncessaires pour le reprsenter, tant donn qu'il sera exprim sous la forme ASCII. Donc, premier avantage : un gain de place certain. La transcription binaire/ASCII aussi bien au niveau de la lecture que de l'criture demande galement du temps. Ce temps est conomis dans le cas des enregistrements non formats, puisque la forme de stockage est identique celle du stockage en mmoire. Les changes de donnes sont alors beaucoup plus rapides. 6.5.2.1 Les enregistrements squentiels non formats

JJH, 2005,2011

Le langage FORTRAN - page 60

Les fichiers de ce type sont particuliers au FORTRAN. Les fichiers sont organiss en blocs de 130 octets ou moins. Ces blocs sont appels "blocs physiques". Chaque bloc comporte les donnes ou une partie des donnes que l'on a enregistres, encadres deux octets contenant la longueur utile du bloc. Bien entendu, le compilateur se charge de mettre en place et jour ces 2 octets. La figure suivante indique la structure d'un bloc physique. /L/.....bloc...../L/ Lorsque l'on dsire enregistrer un ensemble de donnes dpassant la capacit maximale d'un bloc physique, le compilateur place les octets dencadrement L 129 pour indiquer que le bloc physique courant n'est pas termin. Structure d'un enregistrement logique de plus de 128 octets : /129/ ... 128 octets de donnes.../129//12/ ...12 octets de donnes.../12/ Cette opration de partitionnement en blocs de 128 octets est transparente pour le programmeur. En effet, il peut crer des enregistrements de longueur quelconque. Les fichiers squentiels non formats commencent par un octet dont la valeur est 75 et se terminent par un octet dont la valeur est 130 Exemple d'utilisation de fichier squentiel non format :
CHARACTER XYZ(3) INTEGER*4 IDATA(35) DATA IDATA /35 * -1/, XYZ / 'x','y','z' / c c -1 est encode par FFFFFFFF en hexadecimal c OPEN(33, FILE='SEQNF',FORM='UNFORMATTED') c c c c Le mode sequentiel est obtenu par defaut. On ecrit un enregistrement de 140 octets, suivi par un enregistrement de 3 octets WRITE(33) IDATA WRITE(33) XYZ CLOSE(33) END

Le fichier aura alors l'allure suivante : /75/129/ FF....128 octets FF/129/12/ FF 12 octets FF/12/3/xyz/3/130/ 6.5.2.2 Les fichiers accs direct et enregistrements non formatts Comme tous les fichiers accs direct, l'utilisateur peut accder en lecture ou en criture chaque enregistrement, dans n'importe quel ordre. Ceci impose que la longueur d'un enregistrement est connue et constante, c'est vident. La longueur d'un enregistrement est spcifie dans l'instruction OPEN par RECL= valeur. Exemple de cration de fichier accs direct non format :
OPEN(33,FILE='DIRNF',RECL=10,FORM='UNFORMATTED',

JJH, 2005,2011

Le langage FORTRAN - page 61 + ACCESS='DIRECT') WRITE(33,REC=3).TRUE.,'abcdef' WRITE(33, REC=1)2049 CLOSE(33) END

L'allure du fichier sera la suivante : /01 08 00 00??????/??????????/01 00 00 00 abcdef/ 6.5.3 Les enregistrements binaires Cette forme est la plus recommande, car elle n'est pas propre au FORTRAN. On peut donc relire et crer des fichiers en provenance ou destination d'autres langages. Les fichiers binaires n'ont pas de structure interne particulire. Le programmeur doit donc tre parfaitement au courant de la disposition des donnes dans le fichier. Aucun sparateur ne permet de dlimiter un quelconque bloc ou groupe de variables, sauf si le programmeur dcide d'en placer de son propre gr. Les donnes tant enregistres sous forme binaire, sans sparateur, le gain de place est encore (lgrement) plus important. On prfrera ce type de fichiers pour le stockage d'un nombre important de donnes. Attention, un change de donnes avec d'autres logiciels est plus problmatique, mais, grce aux normes dencodage des valeurs relles par exemple, ces fichiers sont souvent lisibles par d'autres langages. Cependant, pour un transfert de donnes vers un tableur par exemple, il est prfrable de passer par un fichier squentiel format. Pour travailler en mode binaire, il suffit de prciser au moment de l'ouverture FORM='BINARY'. 6.5.3.1 Les fichiers squentiels binaires L'criture et la lecture de fichiers binaires sont rgents par le type des variables. Inutile de prciser une longueur d'enregistrement. Pour accder des donnes enregistres, on relit simplement celles qui ont t places avant, en respectant leur type. Exemple de cration de fichier binaire accs squentiel :
$STORAGE:4 INTEGER*1 BELLS(4) INTEGER IWYS(3) CHARACTER*4 CVAR DATA BELLS /4*7/ DATA CVAR /' is '/,IWYS/'What',' you',' see'/ c On va ecrire 'What you see is what you get!' suivi de 3 beeps OPEN(33,FILE='SEQBIN',FORM='BINARY') WRITE(33) IWYS,CVAR WRITE(33) 'what ','you get!' WRITE(33) BELLS CLOSE(33) END

6.5.3.2 Les fichiers binaires accs direct Il faut spcifier au moment de l'ouverture le type d'accs, ainsi que la longueur d'un enregistrement. Le nombre d'octets lus ou crits dpendent toujours du type de la variable.

JJH, 2005,2011

Le langage FORTRAN - page 62

Contrairement au cas des fichiers non formats, la tentative d'criture d'un enregistrement de longueur suprieure celle dclare par RECL=longueur, ne provoque pas d'erreur, mais dborde sur l'enregistrement suivant. Si l'on ne mentionne pas de numro d'enregistrement (REC=n dans l'instruction d'criture ou de lecture) les accs se font alors de manire squentielle partir de l'enregistrement courant. Exemple de cration de fichier binaire accs direct
$STORAGE:4 OPEN(33,FILE='DIRBIN', RECL=10, ACCESS='DIRECT', +FORM='BINARY') WRITE(33, REC=1)'abcdefghijklmno' WRITE(33)4, 5 WRITE(33, REC=40) 'pq' CLOSE(33) END

Le fichier ainsi obtenu prend la forme : /abcdefghij/klmno?????/04 00 00 00 05 00 00 00??/.../pq????????/ Quelques exemples Lorsquun dbutant veut sessayer aux manipulations de fichiers, il est conseill de faire les essais avec peu de donnes, et en mode squentiel format. Dans un premier temps, Il se contentera dafficher lcran les donnes au moyen de linstruction WRITE(*,*). Lorsque ce qui est affich lcran convient, il suffit de placer linstruction suivante avant la premire instruction WRITE : OPEN(10,FILE=premier.txt,STATUS=UNKNOWN) Le fichier sappellera premier.txt. Sil nexistait pas auparavant, il sera cr. Lcriture dans le fichier est simple : il suffit de dupliquer toutes les lignes comportant une instruction WRITE et de remplacer la premire toile par la valeur 10. On placera aprs le dernier WRITE linstruction suivante : CLOSE(10)

JJH, 2005,2011

Le langage FORTRAN - page 63

7. Traitement de l'information
7.1 Expressions arithmtiques 7.1.1 Dfinition Une expression arithmtique est un ensemble form de constantes, variables et fonctions spares par des oprateurs et des parenthses ; elle est destine fournir une valeur numrique. 7.1.2 Oprateurs + Addition - Soustraction * Multiplication / Division ** Exponentiation Ces oprateurs sont prsents par ordre de priorit croissante. Exemple: TOTAL=TOTHT+TVA Les oprations arithmtiques simples sont values de la gauche vers la droite. Par contre, deux exponentiations successives sont values de la droite vers la gauche.

7.1.3 Type des rsultats obtenus par +, -, *, / Les types sont classs par ordre croissant du rang: 1. 2. 3. 4. 5. 6. INTEGER*2 rang le plus faible INTEGER*4 REAL*4 (REAL) REAL*8 (DOUBLE PRECISION) COMPLEX*8 (COMPLEX) COMPLEX*16 rang le plus lev

C'est l'oprande de rang le plus lev qui fixe le type du rsultat. Une petite exception: Une opration entre un COMPLEX*8 et un REAL*8 gnre un COMPLEX*16 (Il s'agit de la double prcision). Rappelons qu'un complexe est compos d'une partie relle et d'une partie imaginaire et que ces deux parties sont toujours du mme type.

JJH, 2005,2011

Le langage FORTRAN - page 64

7.1.4 Type des rsultats obtenus par l'oprateur puissance On peut rsumer sous la forme d'un tableau le type du rsultat de l'lvation de X la puissance Y : Premier Oprande (X) Rel Double Complexe Rel Double Rel Double Double Double

Exposant Y

Entier Rel Double Complexe

Entier Entier Rel Double Complexe

7.1.5 Rgle d'homognit Au cours d'un calcul, si les oprandes sont de types diffrents, l'oprande du type le plus faible (occupant le moins de place mmoire) sera converti dans le type de l'oprande le plus fort.

7.2 Traitement des chanes de caractres 7.2.1 Accs une partie d'une chane On peut, si on le dsire, accder une partie d'une chane de caractres en jouant sur les indices suivant le nom de la variable: nom(d:f) "nom" reprsente le nom de la variable d : indique le rang du premier caractre concern (le premier de la chane par dfaut). f : indique le rang du dernier caractre concern. Exemple: CHARACTER*10 MOT MOT='CONTORSION' MOT(5:6) vaut 'OR' MOT(4:) vaut 'TORSION' MOT(:3) vaut 'CON' (excusez...) On peut modifier MOT: MOT(4:5)='VE'

JJH, 2005,2011

Le langage FORTRAN - page 65

Aprs excution de cette instruction, MOT contiendra 'CONVERSION'. L'expression MOT(:4)=MOT(3:6) est interdite, car de part et d'autre du symbole d'affectation figurent en commun MOT(3:4). Dans cet exemple, il aurait fallu crire: CHARACTER*4 TMOT ... TMOT=MOT(3:6) MOT(:4)=TMOT

Pour mettre une variable alphanumrique blanc, il suffit de lui attribuer la chane de caractres nulle : MOT= Si une suite de caractres attribuer est trop longue pour la variable de destination, seuls les premiers sont attribus, dans la limite des places disponibles. 7.2.2 Oprateur de concatnation de chane Il est constitu de deux barres de fraction successives (//). 7.3 Fonctions numriques standard On peut citer les plus usuelles: SIN COS ALOG EXP SQRT ATAN TANH ABS IABS FLOAT IFIX SIGN CHAR ICHAR NINT MOD sinus cosinus logarithme nprien exponentielle racine carre arc tangente tangente hyperbolique valeur absolue d'un rel valeur absolue d'un entier convertit d'entier rel convertit de rel entier transfert de signe conversion du code ASCII en caractre conversion inverse de la prcdente fonction arrondi fonction modulo

Les fonctions incorpores au langage font appel des mots-cl. Exemples : Racine carre :

JJH, 2005,2011

Le langage FORTRAN - page 66

Mot-cl: SQRT X1 = -B + SQRT( B**2 - 4*A*C) Code ASCII d'un caractre : ICHAR('0') donne 48. Rciproquement, CHAR(I), I tant un entier, renvoie le caractre dont le code ASCII est I (CHAR(48) donnera le caractre 0). Exemple d'utilisation de la fonction CHAR: Emission d'un Bip sonore. On dclare IBELL comme paramtre, et, plus loin dans le programme, on l'envoie la console: PARAMETER (IBELL=7) .... WRITE (*,*) CHAR(IBELL) 7.4 Expressions logiques 7.4.1 Oprateurs de relation arithmtique Une opration de comparaison port sur deux oprandes et donne un rsultat logique. Naturellement, les deux oprandes doivent tre du mme type. On ne peut comparer une variable alphanumrique une variable numrique. Les oprateurs de comparaison sont:

FORTRAN 77
.GT. .GE. .EQ. .NE. .LE. .LT. Plus grand que Plus grand ou gal que Egal Diffrent de Infrieur ou gal Infrieur

FORTRAN 90
> >= == /= <= <

Remarque: Deux complexes ne peuvent tre que gaux ou diffrents, donc seuls les oprateurs .NE. et .EQ. sont utilisables. On peut galement effectuer des comparaisons sur deux chanes de caractres. Dans ce cas, la comparaison se fait de la gauche vers la droite, caractre aprs caractre. La diffrence est faite ds l'apparition d'un premier caractre diffrent de son homologue en position. C'est

JJH, 2005,2011

Le langage FORTRAN - page 67

alors celui qui possde le code ASCII le plus lev qui sera considr comme suprieur. Signalons que le code ASCII respecte l'ordre alphabtique. Exemple: 'HENRY' est suprieur 'HENRI'

7.4.2 Oprateurs logiques En logique, il n'existe que deux tats: .TRUE. .FALSE. Les oprateurs logiques sont: .NOT. .AND. .OR. .EQV. .NEQV. NON ET OU EQUIVALENCE OU EXCLUSIF VRAI FAUX

Le lecteur pourra reconstituer la table de vrit. Ordre d'valuation des diverses oprations vues: 1. 2. 3. 4. Oprateurs arithmtiques Concatnation Oprateurs de comparaison Oprateurs logiques

Exemple: I.EQ.0.OR.J.GT.I+3 sera valu comme: (I.EQ.0).OR.(J.GT.(I+3))

7.5 Oprateurs de relations alphanumriques On peut galement comparer deux chanes de caractres entre elles. Les oprateurs seront : .GT., .GE., .EQ., .NE., .LE., .LT. Une chane de caractres est value partir de la valeur en code ASCII des caractres. Dans ce cas, la comparaison se fait de la gauche vers la droite, caractre aprs caractre. la diffrence est faite ds l'apparition d'un premier caractre diffrent de son homologue en
JJH, 2005,2011

Le langage FORTRAN - page 68

position. C'est alors celui qui possde le code ASCII le plus lev qui sera considr comme suprieur. Signalons que le code ASCII respecte l'ordre alphabtique. Exemple: 'HENRY' est suprieur 'HENRI'

JJH, 2005,2011

Le langage FORTRAN - page 69

8. Gestion mmoire
Dclarations COMMON, EQUIVALENCE, ALLOCATE 8.1 Variables globales : La dclaration COMMON La dclaration COMMON tait frquemment utilise pour effectuer un passage des arguments, avec d'autres effets sur les variables qu'il nest pas forcment judicieux d'exploiter comme par exemple le groupement des variables en mmoire dans l'ordre dfini dans la liste COMMON. Syntaxe de la dclaration COMMON : COMMON /nom1 bloc/liste1 variables/nom2 bloc/liste2...

La dclaration COMMON a donc deux effets principaux :


Elle groupe les variables dans l'ordre de chaque liste,

Elle permet de les rendre visibles (globales) d'un sous-programme pourvu qu'il possde une dclaration COMMON correspondante. Une dclaration COMMON peut donc servir au passage des arguments.

Le nom de bloc n'est pas obligatoire. Dans ce cas, il s'agit d'un COMMON blanc. Son utilisation est viter. Exemple d'utilisation de COMMON : COMMON /BLK1/A,B,C /BLK2/T,U,I //Z // dfinit un COMMON blanc. Il est impossible de faire figurer dans un COMMON des lments disjoints d'un tableau : COMMON A(1), A(3) n'a pas de sens. On peut grouper les instructions COMMON et DIMENSION : COMMON A(100) quivaut DIMENSION A(100) COMMON A

JJH, 2005,2011

Le langage FORTRAN - page 70

Lorsque le COMMON est utilis pour un passage des arguments, on le retrouve dans le programme et le sous-programme : C Programme principal ... COMMON /XXX/A,I,T ... CALL SPROG(...) ... END C Sous-programme SUBROUTINE SPROG(...) COMMON /XXX/Z,L,U ... RETURN END On ne peut pas employer dans un COMMON une variable figurant dj dans la liste des arguments : SUBROUTINE SPROG(A,B,C) COMMON X,Y,C est incorrect ! 8.2 Le partage mmoire : La dclaration EQUIVALENCE La dclaration EQUIVALENCE permet d'affecter plusieurs variables la mme adresse. Sa syntaxe se prsente sous la forme : EQUIVALENCE variables),... Exemple : EQUIVALENCE (A,B,C),(Y,TAB(3)) A, B, C auront la mme adresse mmoire, c'est dire que ces variables ne formeront qu'une. Y aura la mme implantation que le troisime lment de TAB. Si l'on place dans une liste d'quivalence des lments de tableaux distincts : EQUIVALENCE (A(5), B(7)) non seulement A(5) serait gal B(7), mais aussi A(4) B(6), etc. En consquence, la dclaration suivante EQUIVALENCE (A(5),B(7)),(A(1),B(1)) est illicite. (liste de variables),(liste de

JJH, 2005,2011

Le langage FORTRAN - page 71

En couplant les dclarations EQUIVALENCE et COMMON, on peut tendre les quivalences: DIMENSION A(5) COMMON X,Y,Z EQUIVALENCE (Y,A(2)) Nous aurons dans ce cas en plus l'quivalence entre X et A(1), Z et A(3). En suivant cette logique, les dclarations suivantes sont illicites : COMMON A,B EQUIVALENCE (A,B) L'usage de l'instruction EQUIVALENCE permet d'conomiser de la place mmoire. Elle permet galement de "bidouiller" les variables, car on peut dclarer quivalentes des variables de types diffrents. Cette dernire faon de faire est cependant viter si l'on ne sait pas trop ce que l'on fait... 8.3 Variables situes dans la pile : la dclaration AUTOMATIC Le FORTRAN fait appel uniquement des variables statiques, c'est dire que ces variables occupent de la place mmoire durant toute la dure du programme. D'autres langages comme le C procdent de manire diffrente : une variable n'occupe de la mmoire que lorsque le le module dans lequel elle est dclare est en cours dexcution. La variable est place dans ce que l'on appelle "la pile" ou "le tas". L'avantage est immdiat : gain de place mmoire, surtout pour les tableaux. nous sommes en prsence de variable existence "dynamique". On peut suggrer au FORTRAN 90 l'utilisation de ce type de variables l'aide de la dclaration AUTOMATIC. L'usage est le suivant : AUTOMATIC liste de variables Si la dclaration AUTOMATIC apparat seule dans une ligne, toutes les variables qui suivent sont places dans la pile. La dclaration SAVE permet d'introduire des exceptions pour certaines variables. Le paragraphe 3.5 indique comment indiquer au compilateur de grer un tableau comme variable automatique sans dclaration spcifique. 8.4 Les Structures de variables Dans le cas de descriptions dobjets complexes, par exemple dindividus ou de vhicules, il est souvent ncessaire dutiliser plusieurs types de variables. Par exemple, si lon veut tablir des fiches techniques pour des voitures particulires, on peut tenir compte des caractristiques suivantes : Paramtre Marque Modle Date dachat Type Chane de caractres (Maximum 25) Chane de caractres (Maximum 15) Tableau de 3 entiers (x 2 octets)

JJH, 2005,2011

Le langage FORTRAN - page 72

Puissance Fiscale Masse vide Charge utile Coef. de prix dusage

Nombre entier (2 octets) Nombre entier (2 octets) Nombre entier (2 octets) Rel (4 octets)

Si, par exemple, on veut grer un parc de voitures, il serait intressant de grouper ces donnes sur une seule variable, tout en gardant la possibilit daccder individuellement chaque composante. De plus, si cette variable complexe pouvait tre manipule comme un lment de tableau, dans le cadre de la gestion dun vaste parc de vhicules, la manipulation des donnes serait grandement facilite. 8.4.1 Dclarations STRUCTURE et RECORD La dclaration STRUCTURE permet de raliser ce groupement. Utilisation de la dclaration : STRUCTURE /nom_structure/ dclarations des lments . . . END STRUCTURE nom_structure : il sagit dun nom arbitraire que lon donne la structure dont la description suit. Attention au choix du nom. Ne pas utiliser de nom de fonctions intrinsques, de variables dj utilises, de types de variables, etc... Dclarations des lments : On dclare les variables qui sont en gnral des variables classiques utilises, comme INTEGER*2, REAL*4,... On peut aussi utiliser une structure dj dclare, car le nom de la structure est considr comme tant un descripteur de type de variable. Exemple appliqu au tableau ci-dessus : STRUCTURE /VEHICULE/ CHARACTER*25 marque CHARACTER*15 modle INTEGER*2 date_achat(3) INTEGER*2 puissance INTEGER*2 masse INTEGER*2 charge REAL*4 coef END STRUCTURE Il nest pas possible dinclure dans les variables de structure des tableaux dynamiques, ce qui est comprhensible, leur taille tant alors variable. Une dclaration similaire STRUCTURE est galement utilise en FORTRAN 90. Ils sagit de la dclaration TYPE que nous verrons plus loin. Nous venons donc, ci-dessus, de dfinir un nouveau type de variable et non de la dclarer. A partir de cet instant, nous pouvons utiliser le nom de ce type pour dclarer des variables complexes ( ne pas confondre avec COMPLEX !) et travailler avec ce type de variable. Commenons par la dclaration : RECORD /VEHICULE/ parc1(50), parc2(50), voiture

JJH, 2005,2011

Le langage FORTRAN - page 73

parc1 et parc2 sont deux structures dclares de 50 vhicules chacune (tableau de structures) et voiture est une variable simple. La dclaration RECORD se place avec les autres dclarations de variables simples. Evidemment, le bloc de description STRUCTURE doit figurer avant la dclaration RECORD. Comment utiliser une variable de type structure ? Plusieurs possibilits soffrent nous : on peut manipuler une entit entire lors des affectations : ... parc1(I)=voiture tous les lements de la variable voiture sont copis dans la Ieme structure de parc1. Si lon veut accder un lment de voiture, il faut dcrire la structure en insrant des points : write(*,*) indiquez la marque du vehicule : read(*,*) voiture.marque parc1(10).marque=voiture.marque Si par exemple, on utilise une structure linterieur dune autre : STRUCTURE /moteur/ integer*2 cylindree integer*2 Pdin integer*2 nb_cyl END STRUCTURE si lon inclut cette dclaration dans la structure vhicule dcrite prcdemment : STRUCTURE /VEHICULE/ ... REAL*4 coef RECORD /moteur/ motor END STRUCTURE on peut accder la cylindre par : write(*,*) voiture.motor.cylindree Comme on peut le voir, lusage est facile assimiler. Il est fort probable que lon ait sauver des elements de structure sur le disque. Dans ce cas, on est oblig, lorsque lon travaille sur une structure entire, daccder un fichier binaire ou non format. Il est possible de lire un lment dune structure dans un fichier format. Rappelons quun fichier binaire ou non format est une reprsentation exacte de la forme de la variable en mmoire, alors quun fichier format est la reprsentation ASCII lisible des variables. 8.4.2 La dclaration TYPE Il sagit dune dclaration similaire, mais plus puissante. Nous ne verrons pas en dtail les caractristiques de cette dclaration, mais dcrirons les points essentiels. Syntaxe :

JJH, 2005,2011

Le langage FORTRAN - page 74

TYPE nom_type declarations internes END TYPE nom_type nom_type est le nom du nouveau type de variable que nous venons de crer. Utilisons cette dclaration dans lexemple vu dans le paragraphe prcdent : TYPE VEHICULE CHARACTER*25 marque CHARACTER*15 modle INTEGER*2 date_achat(3) INTEGER*2 puissance INTEGER*2 masse INTEGER*2 charge REAL*4 coef END TYPE VEHICULE On peut galement utiliser linstruction RECORD, lie la dclaration STRUCTURE linterieur de cette construction. Pour crer une variable structure, il faut utiliser la syntaxe suivante : TYPE (nom_type)[,attributs] : : variable1, variable2,... lattribut peut avoir plusieurs fonctions. Sil sagit de PARAMETER, la variable cre est alors une constante. Les attributs peuvent aussi tre PUBLIC ou PRIVATE, selon la visibilit dsire pour les modules. Mais ceci est une autre histoire... exemple : TYPE (VEHICULE) : : parc1(50),parc2(50),voiture write(*,*) indiquez la marque du vehicule : read(*,*) voiture%marque voiture=VEHICULE(Peugeot,Clio,30,2,1990,5,1200,1900,0.75 ) parc1(10).marque=voiture%marque write(*,*)voiture

JJH, 2005,2011

Le langage FORTRAN Annexa A - page 75

9. ANNEXES

ANNEXE A
9.1 CLASSEMENT DES INSTRUCTIONS PAR CATEGORIE

DECLARATIONS
AUTOMATIC BLOCK DATA BYTE CHARACTER COMMON COMPLEX DATA DIMENSION DOUBLE ... EQUIVALENCE EXTERNAL IMPLICIT INTEGER INTRINSIC LOGICAL MAP NAMELIST PARAMETER REAL RECORD STRUCTURE UNION Les variables sont places de prfrence dans la pile Identifie un sous-programme bloc de donnes dans lequel on peut initialiser variables et tableaux dclaration, quivalent INTEGER*1, variable sur 1 octet Dclaration pour variables alphanumriques Variables globales, partage par plusieurs modules Dclaration pour variables complexes Initialisation de variables Dclaration pour tableaux Dclaration double prcision Partage location mmoire identique pour plusieurs variables de nom et de type diffrents Identifie un nom comme tant un sous-programme ou une fonction Attribue un type implicite certaines variables Dclaration pour variables entires Dclaration pour fonctions intrinsques Dclaration pour variables logiques Dbute un groupe de variables dans une STRUCTURE dclare un nom de groupe pour un ensemble de variables Donne un nom une constante Dclaration de type rel Attribue une structure un nom de variable Dclaration d'une structure de diffrents types de variables Partage de mmes emplacements mmoire pour plusieurs variables

PROGRAMMES ET SOUS-PROGRAMMES
PROGRAM FUNCTION SUBROUTINE CALL RETURN Dbut de programme Sous-programme de type fonction nom de Sous-Programme Appelle et xcute un sous-programme Retour de sous-programme ou fonction

FICHIERS

JJH, 2005,2011

Le langage FORTRAN - page 76

BACKSPACE CLOSE ENDFILE INQUIRE LOCKING OPEN READ REWIND WRITE

Positionne le pointeur de fichier sur l'enregistrement prcdent Fermeture de fichier Mise en place caractre fin de fichier Examen proprits de fichiers Verrouillage de fichiers Ouverture de fichier Lecture Pointe sur le dbut du fichier Ecriture

STRUCTURES ALTERNATIVES
CASE CASE DEFAULT ELSE END IF END SELECT IF SELECT CASE Cas o (F90) Idem (F90) Sinon de la structure SI... ALORS... SINON Fin construction alterne SI... Fin d'un bloc Cas o (F90) Structure alternative SI Cas OU

BOUCLES

CONTINUE CYCLE DO DO WHILE END DO EXIT

Instruction dsuette, sans effet. Effectue un saut au dbut d'une boucle (F90) Boucle Pour ou Iterer Boucle Tant Que (F90) Fin de boucle pour ou tant que ou iterer (F90) Sortie prmature d'une boucle DO

ALLOCATION MEMOIRE
ALLOCATE DEALLOCATE Allocation dynamique de mmoire (F90) Libre l'espace rserv par ALLOCATE (F90)

ENTREES-SORTIES
READ WRITE Lecture Ecriture

JJH, 2005,2011

Le langage FORTRAN Annexa B - page 77

ANNEXE B
9.2 CLASSEMENT DES INSTRUCTIONS ORDRE ALPHABETIQUE
Note Voici la liste des instructions du langage FORTRAN. Lorsque l'instruction est particulire au FORTRAN 90, on trouvera la mention F90. Cette liste n'a pour but que de rappeler l'existence d'une instruction, mais pas d'en donner l'usage. L'utilisateur aura avantage consulter l'aide en ligne fournie avec les compilateurs FORTRAN.

ALLOCATE ASSIGN AUTOMATIC BACKSPACE BLOCK DATA BYTE CALL CASE CASE DEFAULT CHARACTER CLOSE COMMON COMPLEX CONTINUE CYCLE DATA DEALLOCATE DIMENSION DO DO WHILE DOUBLE ... ELSE END END DO ENDFILE END IF END MAP END SELECT END STRUCTURE END UNION ENTRY EQUIVALENCE

Allocation dynamique de mmoire (F90) Attribue la valeur d'une tiquette un entier Les variables sont places de prfrence dans la pile (F90) Positionne le pointeur de fichier sur l'enregistrement prcdent Identifie un sous-programme bloc de donnes dans lequel on peut initialiser variables et tableaux Dclaration, quivalent INTEGER*1, variable sur 1 octet (F90) Appelle et excute un sous-programme Cas o (F90) Idem (F90) Dclaration pour variables alphanumriques Fermeture de fichier Variables globales, partage par plusieurs modules Dclaration pour variables complexes Instruction dsute, sans effet. Effectue un saut au dbut d'une boucle (F90) Initialisation de variables Libre l'espace rserv par ALLOCATE (F90) Dclaration pour tableaux Boucle Pour Boucle Tant Que (F90) Dclaration double prcision Sinon de la structure SI... ALORS... SINON Fin de module (programme, sous-programme,..) Fin de boucle pour ou tant que (F90) Mise en place caractre fin de fichier Fin construction alterne SI... Fin d'un bloc Cas o (F90) Fin d'une structure (F90) Fin d'une instruction de partage mmoire UNION (F90) Spcifie un point d'entre secondaire dans un sous-programme ( viter) Partage location mmoire identique pour plusieurs variables de nom et de type diffrents
JJH, 2005,2011

Le langage FORTRAN Annexe B - page 78

EXIT EXTERNAL FORMAT FUNCTION GOTO IF IMPLICIT INCLUDE INQUIRE INTEGER INTERFACE TO INTRINSIC LOCKING LOGICAL MAP NAMELIST OPEN PARAMETER PAUSE PRINT PROGRAM READ REAL RECORD RETURN REWIND SAVE SELECT CASE STOP STRUCTURE SUBROUTINE UNION WRITE

Sortie prmature d'une boucle DO Identifie un nom comme tant un sous-programme ou une fonction Format de lecture ou criture Sous-programme de type fonction Saut Structure alternative SI Attribue un type implicite certaines variables Lecture et insertion de fichiers dans le programme au moment de la compilation (F90) Examen proprits de fichiers Dclaration pour variables entires Dclaration permettant au compilateur de vrifier les instructions d'appel des sous-programmes (F90) Dclaration pour fonctions intrinsques passes en argument Verrouillage de fichiers (F90) Dclaration pour variables logiques Dbute un groupe de variables dans une STRUCTURE (F90) dclare un nom de groupe pour un ensemble de variables (F90) Ouverture de fichier Donne un nom une constante Arrt temporaire du programme Sortie cran Dbut de programme Lecture Dclaration de type rel Attribue une structure un nom de variable (F90) Retour de sous-programme ou fonction Pointe sur le dbut du fichier Maintien des variables dans des sous-programmes Cas OU (F90) Arrt programme Dclaration d'une structure de diffrents types de variables (F90) Nom de Sous-Programme Partage de mmes emplacements mmoire pour plusieurs variables (F90) Ecriture

JJH, 2005,2011

Le langage FORTRAN Annexa C - page 79

ANNEXE C
9.3 FONCTIONS INTRINSEQUES

CLASSEMENT PAR USAGE DEDIE

Types de donnes et abrviations : gen i i2 i4 r r4 r8 l l1 l2 l4 cx cx8 cx16 cr plusieurs types possibles entier 1, 2, 4 octets entier 2 Octets entier 4 octets rel 4 ou 8 octets (simple ou double prcision) rel 4 octets rel 8 octets logique 1, 2, 4 octets logique 1 octet logique 2 octets logique 4 octets complexe 8 ou 16 octets complexe simple prcision complexe double prcision caractre

JJH, 2005,2011

Le langage FORTRAN Annexe C - page 80

Conversion de type
Fonction Dfinition Types Argument / fonction i / cr i, r, cx / cx i, r, cx / r8 i, r, cx / cx16 i, r, cx / r8 cx16 / r8 i / r4 i, r ou cx / i2 cr / i r8 / i r4 / i i, r ou cx / i i, r ou cx / i1 i, r ou cx / i2 i, r ou cx / i4 i, r, ou cx / i4 i, r, cx / r4 r8 / r4

CHAR(i) conversion de type CMPLX(gen,gen) conversion en complexe DBLE(gen) conversion de type DCMPLX(genA[,genB])conversion de type DFLOAT(gen) conversion de type DREAL(cx16) conversion de type FLOAT(i) conversion de type HFIX(gen) conversion de type ICHAR(cr) conversion de type IDINT(r8) conversion de type IFIX(r4) conversion de type INT(gen) conversion de type INT1(gen) conversion de type INT2(gen) conversion de type INT4(gen) conversion de type JFIX(gen) conversion de type REAL(gen) conversion de type SNGL(r8) conversion de type

JJH, 2005,2011

Le langage FORTRAN Annexa C - page 81

Chanes de caractres
Fonction INDEX(crA, crB[,l]) LEN(cr) LGE(crA, crB) LGT(crA, crB) LLE(crA, crB) LLT(crA, crB) SCAN(crA, crB[,l]) VERIFY(crA, crB[,l]) Dfinition recherche chane B dans A longueur d'une chane comparaison chaine A >= B A>B A <= B A<B recherche caractre non prsence d'une chane Types Argument / fonction cr / int cr / i cr / l cr / l cr / l cr / l cr / i cr / i

Oprations binaires
Fonction BTEST(i, i) IAND(iA, iB) IBCHNG(iA, iB) IBCLR(iA, iB) IBSET(iA, iB) IEOR(iA, iB) IOR(iA, iB) ISHA(iA, iB) ISHC(iA, iB) ISHFT(iA, iB) ISHL(iA, iB) Dfinition test sur bit produit logique change valeur bit RZ bit R1 bit ou exclusif ou dcalage arithmtique rotation dcalage logique dcalage logique Types Argument / fonction i/l i / identique i / identique i / identique i / identique i / identique i / identique i / identique i / identique i / identique i / identique

Fonctions trigonomtriques
Fonction ACOS(r) ASIN(r) ATAN(r) ATAN2(rA, rB) CCOS(cx8) CDCOS(cx16) CDSIN(cx16) COS(gen) COTAN(r) CSIN(cx8) DACOS(r8) DASIN(r8) Dfinition Arc cosinus arc sinus arc tangente arc tangente(A/B) cosinus cosinus sinus cosinus cotangente sinus arc cos arc sin Types Argument / fonction r / identique r / identique r / identique r,r / identique cx8 / cx8 cx16 / cx16 cx16 / cx16 r ou cx / identique r / identique cx8 / cx8 r8 / r8 r8 / r8

JJH, 2005,2011

Le langage FORTRAN Annexe C - page 82

DATAN(r8) DATAN2(r8A, r8B) DCOS(r8) DCOTAN(r8) DSIN(r8) DTAN(r8) SIN(gen) TAN(r)

arc tangente arc tan A/B cos cotangente sinus tangente sinus tangente

r8 / r8 r8 / r8 r8 / r8 r8 / r8 r8 / r8 r8 / r8 r, cx / identique r / identique

Trigonomtrie hyperbolique
Fonction COSH(r) DCOSH(r8) DSINH(r8) DTANH(r8) SINH(r) TANH(r) Dfinition cos hyperbolique cos hyperbolique sinus hyperbolique tangente hyperbolique sinus hyperbolique tangente hyperbolique Types Argument / fonction r / identique r8 / r8 r8 / r8 r8 / r8 r/r r / identique

Gestion mmoire
Fonction Dfinition Types Argument / fonction

ALLOCATED(tableau)status d'allocation dynamique gen / l LOC(gen) Adresse tout / i2 ou i4 LOCFAR(gen) Adresse segmente tout / i4 LOCNEAR(gen) Adresse non segmente tout / i2

Numriques
Fonction ABS(gen) AIMAG(cx8) AINT(r) ALOG(r4) ALOG10(r4) AMAX0(i, i, ...) AMAX1(r4, r4,...) AMIN0,AMIN1 AMOD(r4, r4) ANINT(r) CABS(cx) CDABS(cx16) CDEXP(cx16) CDLOG(cx16) CDSQRT(cx16) Dfinition Valeur Absolue partie imaginaire de cx8 Valeur tronque Log naturel Log dcimal Maxi Maxi cf. AMAX reste de division arrondi valeur absolue valeur absolue exponentielle logarithme naturel racine carre Types Argument / fonction i, r, cx / identique cx8 / r4 r / identique r4 / r4 r4 / r4 i / r4 r4 / r4 r4 / r4 r / identique cx / r cx16 / r8 cx16 / cx16 cx16 / cx16 cx16 / cx16

JJH, 2005,2011

Le langage FORTRAN Annexa C - page 83

CEXP(cx8) exponentielle cx8 / cx8 CLOG(cx8) log naturel cx8 / cx8 CONJG(cx8) complexe conjugu cx8 / cx8 CSQRT(cx8) racine carre cx8 / cx8 DABS(r8) valeur absolue r8 / r8 DCONJG(cx16) complexe conjugu cx16 / cx16 DDIM(r8A, r8B) diffrence positive r8 / r8 DEXP(r8) exponentielle r8 / r8 DIM(genA, genB) diffrence positive i ou r / identique DIMAG(cx16) partie imaginaire complexe cx16 / r8 DINT(r8) troncature r8 / r8 DLOG(r8) log naturel r8 / r8 DLOG10(r8) log dcimal r8 / r8 DMAX1(r8A, r8B, ...) Maxi r8, r8 DMIN1(r8A, r8B, ...) Mini r8 / r8 DMOD(r8A, r8B) reste r8 /r8 DNINT(r8) arrondi r8 / r8 DPROD(r4A, r4B) produit double prcision r4 / r8 DSIGN(r8A, r8B) transfert de signe r8 / r8 DSQRT(r8) racine carre r8 / r8 EOF(i) fin de fichier i/l EPSILON(gen) plus petit incrment r/r EXP(gen) exponentielle r ou cx / identique HUGE(gen) plus grand nombre positif i ou r / identique IABS(i) valeur absolue i/i IDIM(iA, iB) diffrence positive i/i IDNINT(r8) arrondi r8 / i IMAG(cx) partie imaginaire cx / r ISIGN(iA, iB) transfert de signe i/i LOG(gen) logarithme r / identique LOG10(gen) log dcimal r / identique MAX(genA, genB[,...]) maximum i ou r / identique MAX0(iA, iB[,...]) maximum i/i MAX1(r4A, r4B[,...]) maximum r4 / i MAXEXPONENT(r) plus grand exposant pour type r/r MIN(genA, genB[,...]) minimum i ou r / identique MIN0(iA, iB[,...]) minimum i/i MIN1(r4A, r4B[,...]) minimum r4 / i MINEXPONENT(r) plus petit exposant pour type r / r MOD(genA, genB) reste i ou r / identique NEAREST(r, directeur) NINT(r) arrondi r/i NOT(i) complment logique i / identique PRECISION(gen) nombre de chiffres significatifs r/i SIGN(genA, genB) transfert de signe i, r / identique SQRT(gen) racine carre r ou cx / identique TINY(r) plus petite valeur positive r/r

JJH, 2005,2011

Le langage FORTRAN Annexe C - page 84

ANNEXE D

9.4 POSITION DES INSTRUCTIONS

PROGRAM, SUBROUTINE,FUNCTION, MODULE USE IMPLICIT NONE PARAMETER FORMAT PARAMETER, DATA IMPLICIT Dfinitions STRUCTURE, Blocs INTERFACE, Dclarations de Type, Autres dclarations

Instructions excutables CONTAINS Procdures internes et modules END

JJH, 2005,2011

Le langage FORTRAN Annexa C - page 85

INTRODUCTION 1.1 1.2 2. HISTORIQUE ELABORATION D'UN PROGRAMME STRUCTURE DES INSTRUCTIONS STRUCTURE D'UN PROGRAMME DEMARRAGE RAPIDE - DEUX INSTRUCTIONS UTILES : READ ET WRITE UTILISATION DE READ ET WRITE LE PREMIER PROGRAMME ELEMENTS DE BASE DU LANGAGE LES MOTS-CLE DU LANGAGE LES SEPARATEURS MISE EN PLACE DES INSTRUCTIONS STRUCTURE D'UNE LIGNE FORTRAN DE TYPE CLASSIQUE (FORMATEE) DESCRIPTION DES ZONES COMMENTAIRES UN EXEMPLE EN FORTRAN 77 LES IDENTIFICATEURS

3 3 3 7 7 7 7 8 9 9 9 10 10 11 12 12 12 14 14 14 14 14 15 15 15 16 16 16 16 17 17 17 19 19 20 21 21 21 22 22 24 25 25

2.1 2.2 2.2.1 2.2.2 2.3 2.4 2.5 2.6 2.6.1 2.6.2 2.7 2.8 2.9 3.

CONSTANTES ET VARIABLES

3.1 CONSTANTES 3.1.1 GENERALITES 3.1.2 CONSTANTES ENTIERES 3.1.3 CONSTANTES REELLES 3.1.4 CONSTANTES COMPLEXES 3.1.5 CONSTANTES LOGIQUES 3.1.6 CONSTANTES CHAINES DE CARACTERES 3.1.7 DECLARATION DES CONSTANTES 3.2 LES VARIABLES 3.2.1 VARIABLES SIMPLES 3.2.2 LES TABLEAUX (VARIABLES INDICEES) 3.3 DECLARATION DES VARIABLES 3.3.1 LES TYPES DE VARIABLES 3.3.2 DECLARATION IMPLICITE DES VARIABLES 3.3.3 DECLARATION EXPLICITE DES VARIABLES SIMPLES 3.3.3.1 Variables entires 3.3.3.2 Variables relles 3.3.3.3 Variables logiques 3.3.3.4 Variables complexes 3.3.3.5 Variables de caractres 3.3.3.6 Linstruction DATA 3.3.4 CAS DES VARIABLES INDICEES 3.3.4.1 Cas des chanes de caractres 3.3.4.2 Groupements de Variables : Les dclarations STRUCTURE et RECORD 3.4 ALLOCATION DYNAMIQUE DE MEMOIRE : ALLOCATE

JJH, 2005,2011

Le langage FORTRAN Annexe C - page 86

3.4.1 3.4.2 3.4.3 3.4.4 3.5 3.6 3.7 3.8 3.9 4.

GENERALITES SUR L'ALLOCATION DYNAMIQUE DE MEMOIRE DECLARATION ALLOCATION LIBERATION DE LA MEMOIRE LES NOUVELLES FORMES DE DECLARATION DES VARIABLES LES POINTEURS DECLARATION DES SOUS-PROGRAMMES ET FONCTIONS PASSES EN ARGUMENT LES INTERFACES LES MODULES

25 25 26 26 27 28 28 28 30 32 32 32 33 34 35 36 40 40 40 40 40 40 40 40 40 40 42 42 42 43 45 45 46 46 46 47 48 48 49 51 51 52 52 52

PROGRAMMES ET SOUS-PROGRAMMES PRINCIPE GENERAL PROGRAMME PRINCIPAL SOUS-PROGRAMMES STRUCTURE D'UN SOUS-PROGRAMME TYPE SUBROUTINE STRUCTURE D'UN SOUS-PROGRAMME DU TYPE FUNCTION VARIABLES ET ARGUMENTS

4.1 4.2 4.3 4.3.1 4.3.2 4.4 5.

ALGORITHMIQUE ET FORTRAN

5.1 NOMS DE BLOCS 5.2 DECLARATIONS 5.2.1 LES DECLARATIONS DE MODULES 5.2.2 LES DECLARATIONS DE TYPE 5.2.3 LES DECLARATIONS D'AGENCEMENT MEMOIRE 5.3 CONSTRUCTIONS 5.3.1 CONSTRUCTIONS SEQUENTIELLES 5.3.2 CONSTRUCTIONS ALTERNATIVES 5.3.2.1 Si... Alors... Sinon... Fin Si 5.3.2.2 Squence Cas o 5.3.3 CONSTRUCTIONS ITERATIVES 5.3.3.1 Boucle Pour... Fin Pour 5.3.3.2 Boucle Tant... Fin Tant Que 5.3.3.3 Boucle Faire ... tant que ou jusqu' ce que 5.3.3.4 Boucles indtermines ou boucles ITERER 6. LES ENTREES-SORTIES

6.1 INSTRUCTIONS DE LECTURE ET D'ECRITURE SIMPLES 6.1.1 GENERALITES 6.1.2 INSTRUCTION DE LECTURE 6.1.3 INSTRUCTION D'ECRITURE 6.1.4 LES BOUCLES IMPLICITES DANS LES INSTRUCTIONS LE LECTURE-ECRITURE 6.1.5 FORMATS DE LECTURE-ECRITURE 6.2 ECHANGES AVEC LES FICHIERS 6.2.1 DEFINITION DE FICHIER 6.2.2 CONTENU DUN FICHIER 6.2.3 MODES DACCES A UN FICHIER 6.2.4 MODE OPERATOIRE

JJH, 2005,2011

Le langage FORTRAN Annexa C - page 87

6.3 LES INSTRUCTIONS RELATIVES AUX MANIPULATIONS DE FICHIERS 6.3.1 OUVERTURE D'UN FICHIER 6.3.1.1 Description de chaque paramtre 6.3.2 FERMETURE D'UN FICHIER 6.3.3 ENREGISTREMENT "FIN DE FICHIER" 6.3.4 POSITIONNEMENT D'UN ENREGISTREMENT EN ARRIERE SUR UN FICHIER 6.3.5 REPOSITIONNEMENT D'UN FICHIER SUR LE PREMIER ENREGISTREMENT 6.3.6 LECTURE DES PARTICULARITES D'UNE UNITE OU D'UN FICHIER 6.3.6.1 Description des arguments 6.3.7 LECTURE ET ECRITURE DES DONNEES DANS UN FICHIER 6.4 IMPRESSION DE RESULTATS 6.5 STRUCTURES DES FICHIERS ET DES ENREGISTREMENTS 6.5.1 LES ENREGISTREMENTS FORMATES 6.5.1.1 Les fichiers squentiels formats 6.5.1.2 Fichiers formats accs direct 6.5.2 LES ENREGISTREMENTS NON FORMATES. 6.5.2.1 Les enregistrements squentiels non formats 6.5.2.2 Les fichiers accs direct et enregistrements non formatts 6.5.3 LES ENREGISTREMENTS BINAIRES 6.5.3.1 Les fichiers squentiels binaires 6.5.3.2 Les fichiers binaires accs direct 7. TRAITEMENT DE L'INFORMATION EXPRESSIONS ARITHMETIQUES DEFINITION OPERATEURS TYPE DES RESULTATS OBTENUS PAR +, -, *, / TYPE DES RESULTATS OBTENUS PAR L'OPERATEUR PUISSANCE REGLE D'HOMOGENEITE TRAITEMENT DES CHAINES DE CARACTERES ACCES A UNE PARTIE D'UNE CHAINE OPERATEUR DE CONCATENATION DE CHAINE FONCTIONS NUMERIQUES STANDARD EXPRESSIONS LOGIQUES OPERATEURS DE RELATION ARITHMETIQUE OPERATEURS LOGIQUES OPERATEURS DE RELATIONS ALPHANUMERIQUES

52 52 53 54 55 55 56 56 56 58 58 58 59 59 59 59 59 60 61 61 61 63 63 63 63 63 64 64 64 64 65 65 66 66 67 67 69 69 70 71 71 72 73 75

7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.2 7.3 7.4 7.4.1 7.4.2 7.5 8.

GESTION MEMOIRE VARIABLES GLOBALES : LA DECLARATION COMMON LE PARTAGE MEMOIRE : LA DECLARATION EQUIVALENCE VARIABLES SITUEES DANS LA PILE : LA DECLARATION AUTOMATIC LES STRUCTURES DE VARIABLES DECLARATIONS STRUCTURE ET RECORD LA DECLARATION TYPE

8.1 8.2 8.3 8.4 8.4.1 8.4.2 9.

ANNEXES

JJH, 2005,2011

Le langage FORTRAN Annexe C - page 88

9.1 9.2 9.3 9.4

CLASSEMENT DES INSTRUCTIONS PAR CATEGORIE CLASSEMENT DES INSTRUCTIONS ORDRE ALPHABETIQUE FONCTIONS INTRINSEQUES POSITION DES INSTRUCTIONS

75 77 79 84

JJH, 2005,2011

Você também pode gostar