Какова базовая структура функции в FORTRAN?
Вопрос
Это то, что я хотел узнать недавно, в основном из любопытства.Я в настроении изучить несколько старых стилей кодирования, и FORTRAN кажется хорошим местом для начала.
Я думаю, мне следует помочь вам, ребята, предоставив хорошую отправную точку.
Итак, как бы эта процедура C была написана на 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 ;
}
Я знаю, что вся функция может быть одной строкой:
return ( x + ( y / 2 ) ) * ( y - ( x * 3 ) ) ;
Но смысл того, что я задаю этот вопрос, состоит в том, чтобы посмотреть, как эти четыре утверждения будут написаны по отдельности на FORTRAN, а не обязательно объединены в одно утверждение.
Решение
Откуда вы изучаете ФОРТРАН?Просто взгляните на викиокниги!
Исходя из приведенного примера, я бы сказал:
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
Другие советы
Не вини меня - ты сказал Старый стили кодирования:
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
Я содрогаюсь, когда пишу это, но
- все переменные неявно являются целыми числами, поскольку они начинаются с букв между I и N
- FORTRAN передается по ссылке, поэтому сбросьте
I
иJ
в конце, чтобы дать тот же эффект, что и исходная функция (т.е.передача по значению, так чтоx
иy
были неизменны в процедуре вызова) - Комментарии начинаются с столбца 1, фактические утверждения начинаются с столбца 7
Пожалуйста, пожалуйста, пожалуйста, никогда не пишите новый код, подобный этому, разве что в шутку.
Ваша функция может выглядеть следующим образом в Fortran
integer function foo(m, n)
integer i
i = m
m = m + n/2
n = n - i*3
foo = m*n
end function foo
Вы должны быть в состоянии начать работу с любым учебником по Fortran.Что-то вроде этого могло бы помочь http://www.cs.mtu.edu /~shene/COURSES/cs201/NOTES/fortran.html
ваше здоровье
Видишь Функции и подпрограммы:
INTEGER FUNCTION foo(i, j)
...
foo = 42
END
тогда позже:
k = foo(1, 2)
Аналогично приведенному выше, но с основной программой, иллюстрирующей, как она будет вызываться.
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
Обратите внимание, что это Fortran 77, который я выучил 23 года назад.
Верный старый стиль в применении правила IJKLMN для целого числа
C2345678
FUNCTION IFOO(I,J)
II = I + J/2
JJ = J - I*3
IFOO = II*JJ
END