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 : Sélectionner tout - Visualiser dans une fenêtre à part
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