回 帖 发 新 帖 刷新版面

主题:请各位老师来改改程序

我刚学FORTRAN,编了个小程序,怎么也搞不定,希望各位前辈指点下怎么改
MODULE INTEGRAL
    IMPLICIT NONE
CONTAINS
REAL FUNCTION WSVSP_Integral(PP,H)
    IMPLICIT NONE
    REAL::S,S1,K,H,W,N
    REAL::PP(:),A(:)

    N=SIZE(PP)
    A=0
    DO K=1,N
       A(2*K-1)=A(2*K-1)+1
       A(2*K)=A(2*K)+4
       A(2*K+1)=A(2*K+1)+1
    ENDDO
    DO K=1,N
       S1=A(K)*PP(K)
       S=S+S1
    ENDDO
    W=H/6*S
    RETURN

END FUNCTION WSVSP_Integral 

END MODULE INTEGRAL

PROGRAM TEST1401
    USE INTEGRAL
    IMPLICIT NONE
    REAL,ALLOCATABLE :: PP(:)
    REAL,ALLOCATABLE :: X(:)
    REAL,ALLOCATABLE :: A(:)
    REAL::H,P,Q,M,S
    INTEGER::N,K

    PRINT*,'输入开始,结束点'
    READ(*,*)P,Q
    PRINT*,'输入N值'
    READ(*,*)N
    PRINT*,'GENERATE DATA:'
    M=(N-1)/2
    H=(Q-P)/M
    DO K=1,N
        X(K)=P+(K-1)*H/2
        PP(K)=SIN(X(K))
    ENDDO

    S=WSVSP_Integral(PP,H)

    PRINT*,'输出结果'
    READ(*,*)S

END PROGRAM TEST1401

F:\diyige\Text1.f90
F:\diyige\Text1.f90(23): warning FOR4291: function WSVSP_INTEGRAL has not been assigned a value
F:\diyige\Text1.f90(53): warning FOR4280: unused local variable A
F:\diyige\Text1.f90(7): error FOR3099: deferred-shape specification for non-POINTER or non-ALLOCATABLE array A
Errors in declarations, no further processing for INTEGRAL
Error executing fl32.exe.
Text1.obj - 1 error(s), 2 warning(s)

回复列表 (共5个回复)

沙发

A数值也指定多大的数组,比如A(100)

板凳


非常谢谢Kaier
这样运行是没有错误了,可是那两个 warning 怎么改正呀

3 楼

经修改,程序运行没有问题了,不过其中的算法是否有问题,我没有细看。

MODULE INTEGRAL
  IMPLICIT NONE
CONTAINS
REAL FUNCTION WSVSP_Integral(PP,H)
  IMPLICIT NONE
  REAL:: S,S1,H,W
  REAL:: PP(:)
  real, allocatable:: A(:)
  integer:: K, N
  N=SIZE(PP)
  allocate( A(2 * N + 1) )
  A=0
  DO K=1,N
     A(2*K-1)=A(2*K-1)+1
     A(2*K)=A(2*K)+4
     A(2*K+1)=A(2*K+1)+1
  ENDDO
  DO K=1,N
     S1=A(K)*PP(K)
     S=S+S1
  ENDDO
  W=H/6*S
  WSVSP_Integral = W
  deallocate( A )
  RETURN

END FUNCTION WSVSP_Integral 

END MODULE INTEGRAL

PROGRAM TEST1401
  USE INTEGRAL
  IMPLICIT NONE
  REAL,ALLOCATABLE :: PP(:)
  REAL,ALLOCATABLE :: X(:)
  REAL::H,P,Q,M,S
  INTEGER::N,K

  PRINT*,'输入开始,结束点'
  READ(*,*) P,Q
  PRINT*,'输入N值'
  READ(*,*) N
  PRINT*,'GENERATE DATA:'
  allocate( PP(1 : N), X(1 : N) )
  M=(N-1)/2
  H=(Q-P)/M
  DO K=1,N
      X(K)=P+(K-1)*H/2
      PP(K)=SIN(X(K))
  ENDDO

  S=WSVSP_Integral(PP,H)

  PRINT*,'输出结果'
  Write(*,*) S
  deallocate( PP, X )
    
END PROGRAM TEST1401

4 楼


太感谢了,[em2]

5 楼

有空一起交流一下,谢谢楼主了,请继续努力


















[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册