Quelle est la structure de base d'une fonction en FORTRAN?
Question
Ceci est quelque chose qui je voulais savoir récemment, la plupart du temps sur curiousity. Je suis d'humeur à apprendre quelques anciens styles de codage, et Fortran semble être un bon endroit pour commencer.
Je suppose que je devrais vous aider gars en fournissant un bon point de départ.
Alors, comment cette procédure C est écrit en FORTRAN?
int foo ( int x , int y )
{
int tempX = x ;
x += y / 2 ;
y -= tempX * 3 ; // tempX holds x's original value.
return x * y ;
}
Je sais que toute la fonction pourrait être une seule ligne:
return ( x + ( y / 2 ) ) * ( y - ( x * 3 ) ) ;
Mais le point de me poser cette question est de voir comment ces quatre déclarations seraient rédigées individuellement en FORTRAN, non neccessarily combinés en une seule instruction.
La solution
Où pouvez-vous apprendre FORTRAN de? Il suffit de jeter un oeil à la Wikibooks !
Dérivé de l'exemple, je dirais:
function func(x, y) result(r)
integer, intent(in) :: x, y
integer :: r
integer :: tempX
tempX = x
x = x / 2
y = y - tempX * 3
r = x * y
end function foo
Autres conseils
Ne me blâmez pas - vous avez dit vieux styles de codage:
C234567
SUBROUTINE FOO(I,J,K)
C SAVE THE ORIGINAL VALUES
IORIG = I
JORIG = J
C PERFORM THE COMPUTATION
I = I + J/2
J = J - IORIG*3
K = I * J
C RESTORE VALUES
I = IORIG
J = JORIG
END SUBROUTINE FOO
Je frémis que je vous écris, mais
- toutes les variables sont implicitement entiers, car ils commencent par lettres entre I et N
- FORTRAN passe par référence, donc remis à zéro
I
etJ
à l'extrémité pour obtenir le même effet que la fonction d'origine (à savoir passer par valeur, de sortex
ety
sont restés inchangés dans la routine d'appel) - Les commentaires commencent dans la colonne 1, les déclarations réelles commencent dans la colonne 7
S'il vous plaît, s'il vous plaît, s'il vous plaît ne jamais écrire un nouveau code comme celui-ci, à moins comme une plaisanterie.
Votre fonction pourrait ressembler à ceci dans Fortran
integer function foo(m, n)
integer i
i = m
m = m + n/2
n = n - i*3
foo = m*n
end function foo
Vous devriez être en mesure de commencer avec un tutoriel sur Fortran. Quelque chose comme cela pourrait aider http: //www.cs .mtu.edu / ~ Shene / COURS / cs201 / NOTES / fortran.html
hourras
Voir Fonctions et sous-routines :
INTEGER FUNCTION foo(i, j)
...
foo = 42
END
puis plus tard:
k = foo(1, 2)
Tout comme ci-dessus, mais avec un programme principal pour illustrer comment il serait appelé.
C2345678
program testfoo
implicit none
integer r, foo
r = foo(4,5)
print *, 'result = ', r
end
integer function foo(x,y)
integer x, y
integer tx, ty
tx = x + y / 2
ty = y - x * 3
foo = tx * ty
return
end
Notez que ceci est Fortran 77, qui est ce que j'ai appris il y a 23 ans.
True style ancien dans l'application de la règle IJKLMN pour entier
C2345678
FUNCTION IFOO(I,J)
II = I + J/2
JJ = J - I*3
IFOO = II*JJ
END