我有一个程序可以获得摄氏温度矩阵并在屏幕上打印那些温度的最小值,最大值,平均值和方差。这就是守则:
PROGRAM MATRIS
IMPLICIT NONE
INTEGER::M,N,I,J
REAL::AVG,VAR,LEAST,LARGEST,SUM,MIN_A,MAX_A
REAL,DIMENSION(:,:),ALLOCATABLE::A,B
PRINT*,"PLEASE ENTER column,raw"
READ*,M,N
ALLOCATE(A(M,N),B(M,N))
OPEN(10,FILE="C:/TEMP.txt",STATUS="OLD",ACTION="READ")
OPEN(10,FILE="C:/output.txt",STATUS="REPLACE",ACTION="WRITE")
OPEN(10,FILE="C:/output_statistic",STATUS="REPLACE",ACTION="WRITE")
READ*,(10,*)((A(I,J),I=1,M),J=1,N)
DO J=1,N
DO I=1,M
B(I,J)=A(I,J)+273.15
END DO
END DO
WRITE(20,'(2(F6.2,2X))')((A(I,J),I=1,M),J=1,N)
REAL::R1,R2,R3,R4,R5
PRINT*,"PLEASE ENTER YOUR NUMBER"
READ*,R1,R2,R3,R4,R5
CALL REVERSE(R1,R2,R3,R4,R5)
PRINT*,R2,R3,R4,R5
CONTAINS
SUBROUTINE REVERSE(A,D,E,F,G)
IMPLICIT NONE
REAL,INTENT(IN)::A
REAL,INTENT(OUT)::D,E,F,G
SUM=0.
VAR=0.
LARGEST=0.
LEAST=10000.
DO I=1,N
READ*,A
SUM=SUM+A
MAX_A=MAX(LARGEST,A)
LARGEST=MAX_A
MIN_A=MIN(LEAST,A)
LEAST=MIN_A
VAR=SQRT(VAR+(A-AVG)**2)
AVG=SUM/N
D=MAX_A
E=MIN_A
F=VAR
G=AVG
END DO
RETURN
PRINT*,D/E/F/G
END SUBROUTINE REVERSE
END PROGRAM MATRIS
在第19行我收到此错误: REAL不能出现在可执行语句之后
和第34行我收到此错误: A出现在作业的左侧,但具有INTENT(IN)属性
我该如何解决这些问题。如果我的程序中有其他错误,您能看到吗?我是Fortran的新手,我需要你的帮助。感谢
答案 0 :(得分:1)
您必须在程序或子程序的开头声明所有变量。
你必须移动你的
REAL::R1,R2,R3,R4,R5
直到您声明其他变量的位置。
关于第二个问题:您已在子例程中声明A
为INTENT(IN)
。这意味着子程序无法改变其值。
但是READ*,A
会做到这一点。因此,编译器会告诉您这是不一致的,无法编译。
但请,请帮我个忙,找一本关于Fortran编程的好书。或者做一些在线Fortran课程,如果你找到一些。 您的代码中存在更多错误,如果您尝试以这种方式进行操作,则代码将永远不会执行您希望它执行的操作。