J'essaie d'écrire un programme avec une fonction qui retourne une matrice avec un nombre aléatoire sur la diagonale, 1s sur les sous-diagonales et 0 partout ailleurs. Alors, je l'ai écrit cette fonction:Erreur: Deux programmes principaux dans Fortran
real function am1d
do i=1,L
do j=1,L
if (i.eq.j) then
am1d(i,j)=rand()*w-w/2.
elseif ((i-j.eq.1) .or. (j-i.eq.1)) then
am1d(i,j)=1
else am1d(i,j)=0
enddo
enddo
end function am1d
et a essayé de l'appeler d'ici (dans le même fichier source, juste au-dessus de la fonction)
program make3d
integer, parameter :: L = 20
real, parameter :: w = 0.5
real :: x
!x=rand(1234) ! seed random manually
x=rand(itime) ! seed random from current local time
print *,am1d()(:)
end program make3d
Mais essayer de compiler ce throws l'erreur:
$ f95 make3d.f
make3d.f:18.21:
print *,am1d()(:)
1
Error: Syntax error in PRINT statement at (1)
make3d.f:7.72:
program make3d
1
make3d.f:24.72:
real function am1d
2
Error: Two main PROGRAMs at (1) and (2)
Qu'est-ce que cela signifie? Je ne pensais pas qu'une fonction pourrait jamais être un programme? J'ai eu de petites fonctions logiques sous l'instruction endprogram avant, sans aucun problème.
l'erreur de syntaxe dans l'impression est levée parce que vous avez écrit 'print *' au lieu de 'print *'. Et ne pas déclarer la forme de la sortie de la fonction est également faux. Mais la deuxième erreur lancée par le compilateur doit être ignorée car elle est probablement causée par la première erreur (cascade). –