我希望得到一些帮助。程序的要点是采用下限,上限和步数,然后将它们输入到相应的选定方程中,以创建一个矩阵,该矩阵是步长的长度,包含用于被选中的方程式。我在:
获得了无法分类的陈述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
答案 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
或者,甚至更好,将它们放入模块中!