Fonction en argument d'une autre fonction
Salut,
Je sais que pour déclarer une fonction qui va être appelé en argumentd'autre autre fonction on utilise EXTERNAL.
Par contre si cette fonction retourne un tableau, j'ai un peu de mal a la passer en argument car il me dit l'attribut EXTERNAL et DIMENSION sont en conflit.
J'utilise dans mon code ci dessous une fonction retournant un tableau que je veux appeler dans en argument de ma subroutine.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
FUNCTION carre(vect)
IMPLICIT NONE
REAL, DIMENSION (:) :: vect
REAL, DIMENSION(SIZE(vect)) :: carre
INTEGER :: i
DO i = 1,SIZE(vect)
carre(i) = vect(i) * vect(i)
END DO
END FUNCTION carre
PROGRAM vecteur
IMPLICIT NONE
REAL,DIMENSION(5) :: vect,resu
INTEGER :: i,n
INTERFACE
FUNCTION carre(vect)
REAL, DIMENSION (:) :: vect
REAL, DIMENSION(SIZE(vect)) :: carre
INTEGER :: i
END FUNCTION carre
END INTERFACE
EXTERNAL carre
n = 5;
!initialisation du vecteur aléatoirement
DO i = 1,n
vect(i) = REAL(rand(0)*45)+1
END DO
!affichage de celui-ci
DO i = 1,n
WRITE(6,*) 'vect(',i,') = ',vect(i)
END DO
!! resu = carre(vect);
CALL select_transfo(vect,carre)
DO i = 1,n
WRITE(6,*) 'vect(',i,') = ',resu(i)
END DO
CONTAINS
! la subroutine qui va appeler la fonction carre en argument
SUBROUTINE select_transfo(vect,fonct)
REAL, DIMENSION (:) :: vect
REAL, DIMENSION (:) :: fonct
vect = carre(vect);
END SUBROUTINE select_transfo
END PROGRAM vecteur |
Merci