• Aucun résultat trouvé

10.7 Param` etres formels de type tableau

10.7.1 Exercice

Au vu du m´ecanisme de passage des arguments aux subroutines, expliquez pour- quoi les param`etres formels de type vecteurs et matrices sont d´eclar´es de cette mani`ere.

10.7.2

Exemple

Subroutine qui lit une matrice au clavier. La subroutine devra sortir la matrice, son nombre de lignes r´eelles, son nombre de colonnes r´eelles (figure 10.8). Il faut bien comprendre que la seule matrice ayant une existence r´eelle est la matrice mat du programme principal, et que pour lui r´eserver de la m´emoire, il faut la d´eclarer avec un nombre de lignes et un nombres de colonnes explicites. Le param`etre formel a de la subroutine va recevoir l’adresse de mat au moment de l’appel, et connaissant sa premi`ere taille de d´eclaration (10) via le param`etre formel ma, elle sera `a mˆeme de lire et ´ecrire un ´el´ement quelconque de mat.

10.7.3

Exercice 1

Que se passe-t-il si l’utilisateur tape un nombre de lignes sup´erieur `a 10 et/ou un nombre de colonnes sup´erieur `a 20 ?

10.7.4

Exercice 2

´

Ecrire une subroutine qui affiche une matrice `a l’´ecran, et combinez-la avec litmat pour v´erifier votre r´eponse `a la question pr´ec´edente.

Chapitre 10. Fonctions et subroutines

program test

parameter(mligne=10, mcolon=20) double precision mat (mligne, mcolon) call litmat (mat, mligne, nligne, ncolon) end

subroutine litmat (a, ma, nl, nc) double precision a (ma, *)

write(*,*)

& ’Entrez nombre de lignes-colonnes’ read(*,*) nl, nc do i=1, nl write(*,*) ’Ligne ’, i read(*,*) (a(i,j), j=1,nc) enddo return end

Initiation au langage FORTRAN

10.8

D´eclaration external

10.8.1

Objectif

Utiliser le nom d’une fonction ou d’une subroutine comme argument d’une autre fonction ou subroutine.

Quelle drˆole d’id´ee ?

Examinons le probl`eme suivant : ´Ecrire une subroutine qui calcule l’int´egrale Rb

af (x) dx pour une fonction f quelconque. Que faudra-t-il faire entrer et sortir de la subroutine ?

– la fonction f ;

– les bornes d’int´egration a et b ; – la valeur de l’int´egrale.

Or quel est le moyen en FORTRAN de programmer une fonction f (x) ? C’est d’utiliser une fonction FORTRAN, qui renverra par exemple une valeur real. On peut donc pr´edire la forme de la subroutine d’int´egration :

subroutine integ (a, b, f, valint)

Les param`etres formels a, b et valint seront double precision, mais de quel type est f ?

C’est le nom d’une fonction FORTRAN, et pour d´eclarer un param`etre formel aussi bizarre, on ´ecrira :

external f et aussi

real f

car f renvoie une valeur real. On peut aussi d´eclarer des param`etres formels de type subroutine, en utilisant simplement external. Dans le corps de la su- broutine, on fera bien sˆur appel `a cette fonction f pour calculer l’int´egrale. Pas de difficult´e ! On fait comme si elle existait et on ´ecrira des choses du style :

valint = valint + h/2 *(f(x1+h) + f(x1))

Maintenant ma subroutine d’int´egration est ´ecrite. Je souhaite l’appliquer `a une fonction que j’ai ´ecrite en FORTRAN, du style :

real function truc(x) real x

... truc=... return end

Chapitre 10. Fonctions et subroutines

Je veux appeler la subroutine integ pour calculer l’int´egrale de cette fonction entre disons 1 et 2. J’´ecrirai :

call integ (1.0, 2.0, truc, somtruc)

1.0 et 2.0 sont des constantes real, somtruc une variable real qui me renverra la valeur de l’int´egrale...

Et truc ? C’est le nom d’une fonction FORTRAN. Ai-je le droit de passer ce genre de chose en argument `a une subroutine ? La r´eponse est oui, si je la d´eclare :

external truc

dans le bloc fonctionnel d’o`u je fais le call. De plus, comme cette fonction renvoie une valeur real, j’ajouterai :

real truc

10.8.2

R´ecapitulation

La figure10.9r´ecapitule tout ce que l’on vient d’expliquer.

Remarquons que la structure de truc est impos´ee par la subroutine qui demande que la fonction repr´esent´ee par son param`etre formel f ait un argument r´eel et renvoie une valeur r´eelle. Nous ne pourrions donc pas par exemple d´eclarer :

real function truc(x,y)

En g´en´eral, les subroutines du type integ sont des boites noires toutes faites (par des sp´ecialistes), et on vous indique juste le type de ses param`etres formels. Lorsque l’un d’entre eux est une fonction ou une subroutine, on vous indique en plus la liste des param`etres formels que doit avoir cette fonction ou subroutine.

10.8.3

Exercice

´

Ecrire la structure d’un programme (programme principal / subroutine / fonc- tions) pour trouver les z´eros d’une fonction f (x) par la m´ethode de Newton. On rappelle que cette m´ethode n´ecessite la connaissance de la fonction f (x) et de sa d´eriv´ee f0(x).

Initiation au langage FORTRAN

program test real somtruc external truc real truc

call integ (1.0, 2.0, truc, somtruc) end

subroutine integ (a, b, f, valint) real a, b, valint external f real f ... valint=valint + ( f(x1+h) + f(x1) )*h/2 ... return end

real function truc(x) real x

... truc=... return end

Chapitre 11

Les fichiers

Avertissement : nous parlons ici implicitement de fichiers dits s´equentiels, c’est-`a-dire qu’`a partir de l’ouverture du fichier, on lit les donn´ees dans l’ordre o`u elles sont stock´ees, sans pouvoir acc´eder directement `a une donn´ee particuli`ere. Au fur et `a mesure des lectures ou ´ecritures, un pointeur de fichier avance automatiquement d’une donn´ee `a la suivante.

Il existe en FORTRAN des fichiers dits `a acc`es direct, mais nous n’en parlerons pas ici.

Les fichiers s´equentiels sont divis´es en deux types : le fichiers format´es et les fichiers binaires.

11.1

Les fichiers format´es

Plus simplement, ce sont des fichiers texte, c’est-`a-dire organis´es en lignes de caract`eres, que l’on pourrait lire ou ´ecrire avec un ´editeur.

Lorsque l’on ´ecrit un objet FORTRAN sur ce type de fichier, celui-ci est converti en chaˆıne de caract`ere selon un formatage d´efini par l’utilisateur ou par d´efaut (voir « ´Ecritures format´ees » 7.1)

Ce type de fichier est pratique car on peut les visualiser par un ´editeur de texte, et de plus presque tous les logiciels savent lire des fichiers texte.

L’´ecran et le clavier sont des cas particuliers de fichiers format´es.

Documents relatifs