| ||||
auteur : Germain Salvato-Vallverdu | ||||
Les function et les subroutine sont littéralement traduits de l'anglais par fonction et sous-programme.
Ce sont les deux types de sous programmes disponibles en Fortran.
Les différences majeures entre une fonction et une subroutine sont :
Les fonctions
Voyons un exemple simple d'une fonction et de son appel. Une fonction est, par exemple, de la forme
f(x) = a*x + b. Voici un programme qui utilise cette fonction :
Les subroutines
Pour continuer l'exemple précédent, on peut programmer une sous-routine qui va lire les paramètres a et b de
la fonction f(a,b,x).
Les argument d'une subroutine peuvent être de plusieurs types
Les arguments entrants ne peuvent pas être modifiés dans la subroutine. Une subroutine doit assigner une valeur à un
argument sortant.
|
| ||||
auteur : Germain Salvato-Vallverdu | ||||
Quand on travaille dans un terminal il arrive souvant qu'on rajoute à la suite d'un programme des paramètres.
par exemple : mon_programme.x p1 p2 p3. Pour récupérer p1, p2 et p3 on utilise la subroutine getarg.
L'entier correspond à la place de l'argument. Par exemple, dans notre cas, 1 correspond à p1, 2 à p2 et 3 à p3.
La valeur 0 permet de récupérer le nom du programme. Ceci peut être mis à profit pour si l'exécutable est enregistré
sous des noms différents afin d'avoir une exécution différente selon le nom du programme.
Les paramètres p1, p2 ou p3 sont enregistrés dans une variable
de type chaîne de caractères. Voici un exemple d'utilisation :
|
| ||
auteur : Germain Salvato-Vallverdu | ||
Une variable est une zone mémoire à laquelle on associe un nom pour pouvoir écire ou lire ce qu'elle contient.
Lorsqu'on utilise des sous programmes il faut savoir si les variables qu'on utilise sont accessibles par tous
les sous programmes (variables globales) ou juste dans le programme ou sous programme dans lequel elles sont
déclarées.
En Fortran toutes les variables déclarées au début d'un programme principal, d'une fonction ou d'une
subroutine sont des variables locales. Ainsi si l'on déclare un entier i dans 3 sous programme, ces
3 variables i seront associées à 3 zones mémoires différentes et indépendantes.
Pour utiliser des variables globales, communes à plusieurs sous programmes, on utilise les common
(FORTRAN77) ou des module (Fortran90).
|
| ||
auteur : Germain Salvato-Vallverdu | ||
La méthode la plus simple pour qu'une subroutine et son programme appelant se passent des variables est de les
mettre comme arguments de la subroutine. Il faut ensuite préciser s'ils sont entrant (ils viennent du programme
appelant et ne doivent pas être modifié), sortant (ils viennent de la subroutine vers le programme appelant et
doivent être assignés) ou les deux.
Il n'est pas obligatoire de préciser l'intent, cela peut cependant éviter certaines erreurs et facilite
la lecture du programme.
|
| ||||
auteur : Germain Salvato-Vallverdu | ||||
Le common permet de déclarer un zone mémoire commune dans laquelle seront enregistrées des variables.
Elles seront accessibles par tous les
sous programmes dans lesquels le common est déclaré. Reprenons l'exemple utilisé par les arguments pour
comparer.
Il n'est plus nécessaire de donner les variables a,b et c en argument de la subroutine sub car elles sont accessibles par l'intermédiaire du common.
Dans ce cas les variables de la zone commune sont toutes modifiables par la subroutine, pour préciser un intent il faut
utiliser les paramètres.
Pour ne pas avoir à reécrire dans chaque sous programme le common, il était courant d'inclure un fichier qui contenait
les variables du common. Ceci avait également l'avantage de ne pas avoir à modifier tous les common dans tous les
sous programmes à chaque modification. Voici un exemple :
|
| ||||
auteur : Germain Salvato-Vallverdu | ||||
Les modules sont la grande nouveauté du Fortran 90 et apporte au Fortran un soupçon de programmation orientée objet.
L'utilisation des modules pour partager des variables entre des sous programmes n'est qu'une infime partie de ce qu'ils
apportent. Dans ce cas, leur utilisation est similaire à celle du common. On va créer un module, dans lequel
seront déclarées des variables qui seront disponibles dans tous les sous programmes qui utilisent le module.
L'utilisation d'un module apporte cependant une contrainte. Ils doivent être compilés avant le programme principal. Plusieurs
solutions sont possibles :
Pour les compilateurs ifort, g95 ou gFortran, la compilation (création de l'objet) se fait en ajoutant l'option -c.
Il est possible de n'utiliser qu'une partie d'un module avec l'instruction only. On va ainsi sélectionner les
variables qui seront accessibles et celles qui ne le seront pas. Voici un exemple :
|
Copyright © 2008 developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.