x est un entier si a et b sont des entiers
x est un réel si a et b sont des réels ou a entier et b réel ...
x est un tableau du même profil que a si a et b sont deux tableaux de même profil.
L'opération + ( -,/ ou *) est déjà prédéfinie, et selon le
type des opérandes elle fournit un résultat différent.
Fortran offre la possibilité de :
Exemple.
Interface operator (+)
Interface operator (-)
Exemple. Interface operator (.SOMME.)
Cette technique est utilisée pour doter d'opérateurs simples des types dérivées, afin d'en simplifier la manipulation.
MODULE opplusmod IMPLICIT NONE TYPE point INTEGER :: num REAL :: x,y END TYPE point INTERFACE OPERATOR(+) MODULE PROCEDURE point_plus_point, point_plus_entier END INTERFACE CONTAINS FUNCTION point_plus_point( p1, p2) RESULT(ppp) TYPE(point), INTENT(IN) :: p1,p2 TYPE(point) :: ppp ppp = point(p1%num+p2%num, p1%x+p2%y, p1%y+p2%y) END FUNCTION point_plus_point FUNCTION point_plus_entier( p, n) RESULT(ppn) TYPE(point), INTENT(in) :: p INTEGER , INTENT(in) :: n TYPE(point) :: ppn ppn = point(p%num+n, p%x, p%y) END FUNCTION point_plus_entier END MODULE opplusmodCe module a permis de définir la somme de deux structures comme on le souhaite par l'interface operator (+).
Voici un exemple d'utilisation de ce module :
Program operateur USE opplusmod IMPLICIT NONE TYPE(point) :: a,b,c a = point(3, 2., 3.) b = point(2, 4., 5.2) c = a+b PRINT*,'a+b =',c PRINT*,'c+14 =',c+14
Exercices
TYPE rationnel integer :: num, den END rationnelce type permet de définir une fraction rationnelle numérateur sur denominateur.
Ecrire une interface operator (+) permettant de supporter les instructions suivantes
f = f1+f2 f = f1+2 f = 2+f1