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

声明函数时Fortran 95中的不可分类语句,fortran,Fortran,我希望能在这方面得到一些帮助。程序的要点是取一个下限、一个上限和步数,然后将它们输入到各自选择的方程中,以创建一个矩阵,该矩阵是步数的长度,其中包含所选方程的值。我收到一份无法归类的声明: array(i)=function1(x) array(i)=function2(x) array(i)=function3(x) 我觉得这与我如何声明我的函数有关,但我无法找到修复方法。任何帮助都将不胜感激 程序填充1 隐式无 !变量 整数::i,步长 实数::下、上、函数1、函数2、函数3、x、q、w、

我希望能在这方面得到一些帮助。程序的要点是取一个下限、一个上限和步数,然后将它们输入到各自选择的方程中,以创建一个矩阵,该矩阵是步数的长度,其中包含所选方程的值。我收到一份无法归类的声明:

array(i)=function1(x)
array(i)=function2(x)
array(i)=function3(x)
我觉得这与我如何声明我的函数有关,但我无法找到修复方法。任何帮助都将不胜感激

程序填充1
隐式无
!变量
整数::i,步长
实数::下、上、函数1、函数2、函数3、x、q、w、e
字符(20)::选项
实数,可分配::数组(:)
!格式
101格式(A)!仅单个文本元素
102格式()!
!-------变量定义------!
!
!
!
!----------------------------------!
!x=.1(上下)
!
WRITE(*,101)“您好,用户,请选择要计算的函数:”
写入(*,101)
写(*,101)“A)f(x)=x^2+2x+4”
写(*,101)“B)f(x)=x+4”
写(*,101)“C)f(x)=sin(x)+42”
写入(*,101)“输入A、B或C”
做
读取(*,101)选项
如果((选项等式“A”)或(选项等式“A”)),则
否则如果((选项EQ.'B')或(选项EQ.'B')),则
否则,如果((选项EQ'c')或(选项EQ'c'),则
其他的
写(*,*)“请输入A、B或C”
周期
如果结束
出口
结束
写(*,101)“请输入下限:”
读(*,*)下
写入(*,101)
写(*,101)“请输入上限:”
读(*,*)上
写入(*,101)
写入(*,101)“请输入步长”
读取(*,*)步骤
函数1=((x**2)+(2*x)+4)
函数2=(abs(x+4))
函数3=(sin(x)+42)
分配(数组(步骤))
x=更低
i=1,步骤
如果((选项等式“A”)或(选项等式“A”)),则
数组(i)=函数1(x)
否则如果((选项EQ.'B')或(选项EQ.'B')),则
数组(i)=函数2(x)
否则,如果((选项EQ'c')或(选项EQ'c'),则
数组(i)=函数3(x)
如果结束
x=x+(上下)/台阶
结束
i=1,步骤
写入(*,'(4F6.2)')数组(i)
结束
结束程序

这不是在Fortran中定义函数的方式

结束程序后
,定义如下功能:

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

或者,更好的是,将它们放入一个模块中

这不是在Fortran中定义函数的方式

结束程序后
,定义如下功能:

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
或者,更好的是,将它们放入一个模块中

这些线

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)
您在定义中省略了伪参数,编译器生气并发出错误对我来说并不奇怪

这些线

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)

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

如何安排模块、子例程或函数和主程序的示例:我想说语句函数最直接的替代方法是内部函数。@VladimirF我同意,但这需要对OP给出的代码进行额外更改。为清楚起见,我建议使用“end function foo”语法,而不仅仅是“end function”正如上面代码中使用的。我不知道,函数很短,你可以在上面两行查找名字。重命名一个函数,然后忘记重命名
结束函数
,这是一件痛苦的事情,因此我建议仅当函数不适合单个屏幕时才使用该函数的名称。如何排列模块的示例,子程序或函数和主程序:我想说语句函数最直接的替代方法是内部函数。@VladimirF我同意,但这需要对OP给出的代码进行额外更改。为清楚起见,我建议使用“end function foo”语法,而不是上面代码中使用的“end function”。我不,函数很短,您可以在上面两行中查找名称。重命名一个函数,然后忘记重命名
结束函数
,这是一件痛苦的事情,因此我建议仅当函数不适合单个屏幕时才使用该名称。