FORTRAN中函数的基本结构是什么?

时间:2009-07-03 18:25:59

标签: c++ c function fortran

这是我最近想知道的,主要是出于好奇。我有兴趣学习一些旧的编码风格,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中单独写出,而不是必然合并为一个陈述。

6 个答案:

答案 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和N之间的字母开头
  • FORTRAN通过引用传递,因此最后重置IJ以提供与原始函数相同的效果(即按值传递,因此x和{{ 1}}在调用例程中没有变化)
  • 评论从第1列开始,实际声明从第7列开始

请除非作为一个笑话,否则请不要写这样的新代码。

答案 1 :(得分:2)

请参阅Functions and Subroutines

INTEGER FUNCTION foo(i, j)
...
foo = 42
END

然后:

k = foo(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