这是我最近想知道的,主要是出于好奇。我有兴趣学习一些旧的编码风格,FORTRAN似乎是一个很好的起点。
我想我应该通过提供一个好的起点来帮助你们 那么如何在FORTRAN中编写这个C程序呢?
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中单独写出,而不是必然合并为一个陈述。
答案 0 :(得分:7)
不要责怪我 - 你说旧的编码风格:
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
和J
以提供与原始函数相同的效果(即按值传递,因此x
和{{ 1}}在调用例程中没有变化)请除非作为一个笑话,否则请不要写这样的新代码。
答案 1 :(得分:2)
答案 2 :(得分:2)
您的功能在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
欢呼声
答案 3 :(得分:1)
你从哪里学习FORTRAN?只需看一下wikibooks!
从例子中得出,我会说:
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
答案 4 :(得分:1)
与上面类似,但有一个主要程序来说明如何调用它。
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年前学到的。
答案 5 :(得分:0)
将规则IJKLMN应用于整数
时的真实旧样式C2345678
FUNCTION IFOO(I,J)
II = I + J/2
JJ = J - I*3
IFOO = II*JJ
END