声明函数时Fortran 95中的不可分类语句

时间:2014-04-01 22:14:41

标签: fortran

我希望得到一些帮助。程序的要点是采用下限,上限和步数,然后将它们输入到相应的选定方程中,以创建一个矩阵,该矩阵是步长的长度,包含用于被选中的方程式。我在:

获得了无法分类的陈述
array(i)=function1(x)
array(i)=function2(x)
array(i)=function3(x)

我觉得这与我如何宣布我的功能有关,但我无法找到解决方法。任何帮助将不胜感激。

  PROGRAM stuff1
    IMPLICIT NONE

    !variables
      INTEGER::i,step
      REAL::lower,upper,function1,function2,function3,x,q,w,e
      CHARACTER(20)::option
      REAL,ALLOCATABLE::array(:)

    !formats
    101 FORMAT(A)     !single text element only
    102 FORMAT()      ! <description>

    !-------Variable Definitions-------!
    !
    !
    !
    !----------------------------------!

    !x= .1(upper-lower)

    !<Begin Coding Here>

    WRITE(*,101)"Hello User, please select a function to evaluate:"
    WRITE(*,101)
    WRITE(*,101)"A) f(x)=x^2+2x+4"
    WRITE(*,101)"B) f(x)=|x+4|"
    WRITE(*,101)"C) f(x)=sin(x)+42"
    WRITE(*,101)"Enter A,B,or C"

      DO
      READ(*,101)option
      IF ((option.EQ."A") .OR. (option.EQ."a")) THEN
      ELSE IF((option.EQ.'B') .OR. (option.EQ.'b'))THEN
      ELSE IF((option.EQ.'c') .OR. (option.EQ.'c'))THEN
      ELSE 
      WRITE(*,*)"Please enter A,B,or C"
      CYCLE
      END IF
      EXIT
      END DO

    WRITE(*,101)"please enter an lower bound:"

      READ(*,*)lower

    WRITE(*,101)
    WRITE(*,101)"please enter an upper bound:"
      READ(*,*)upper

    WRITE(*,101)
    WRITE(*,101)"please enter a step size"
      READ(*,*)step


    function1=((x**2)+(2*x)+4)
    function2=(abs(x+4))
    function3=(sin(x)+42)


    ALLOCATE(array(step))
    x=lower
    DO i=1,step
      IF ((option.EQ."A") .OR. (option.EQ."a")) THEN
          array(i)=function1(x)
      ELSE IF((option.EQ.'B') .OR. (option.EQ.'b'))THEN
          array(i)=function2(x)
      ELSE IF((option.EQ.'c') .OR. (option.EQ.'c'))THEN
          array(i)=function3(x)
      END IF
      x=x+(upper-lower)/step
    END DO

    DO i=1,step
      WRITE(*,'(4F6.2)')array(i)
    END DO

    END PROGRAM

2 个答案:

答案 0 :(得分:4)

这些行

function1=((x**2)+(2*x)+4)
function2=(abs(x+4))
function3=(sin(x)+42)

似乎是三个语句函数。这是一个你不应该使用的过时功能,而是你应该按行

定义功能
   real function one(x)
       real, intent(in) :: x
       one = x**2 + 2*x + 4
   end function one

如果你必须像1979年一样编程,那么语句功能的正确形式将是

function1(x)=((x**2)+(2*x)+4)

你在定义中省略了伪参数,对我来说编译器生气并发出错误并不奇怪。

答案 1 :(得分:1)

这不是如何在Fortran中定义函数的!

END PROGRAM之后,定义您的功能,如:

real function function1(x)
  real,intent(in) :: x
  function1=((x**2)+(2*x)+4)
end function
real function function2(x)
  real,intent(in) :: x
  function2=(abs(x+4))
end function
real function function3(x)
  real,intent(in) :: x
  function3=(sin(x)+42)
end function

或者,甚至更好,将它们放入模块中!