求大神指导error #6637
PROGRAM MAIN
REAL W(5,5)
CALL READIN(W)
CALL PUTOUT(W)
CALL WMAX(W,X1,X2) !// 此行出问题
WRITE(*,*)'X1=',X1,'X2=',X2
END
SUBROUTINE READIN(A)
REAL A(5,5)
WRITE(*,*)'Enter 5*5 matrix:'
DO 10 I=1,5
READ(*,*)(A(I,J),J=1,5)
10CONTINUE
END
SUBROUTINE PUTOUT(A)
REAL A(5,5)
DO 20 I=1,5
WRITE(*,*) (A(I,J),J=1,5)
20CONTINUE
END
SUBROUTINE WMAX(A,S1,S2)
S1=A(1,1)
S2=A(1,5)
DO 30 I=2,5
IF(S1.LT.A(I,I)) S1=A(I,I)
IF(s2.LT.A(I,5-I+1)) S2=A(I,5-I+1)
30CONTINUE
END
错误 1 error #6637: When a dummy argument is a function, the corresponding actual argument must also be a function.
C:\Users\Administrator\Documents\Visual Studio 2013\Projects\10-15-5=5juzhen\10-15-5=5juzhen\5=5.f90 5
问题出在红色那一行
SUBROUTINE WMAX(A,S1,S2)
Real A(5,5) !// 添加此句
S1=A(1,1) 我将你的代码改了一下,你看看这里面的一些代码习惯。会比你自己的代码可读性、可修改性好一些。(例如要改成6*6的就更容易)
Program main
Implicit None !// 很重要
Real w(5, 5) , x1 , x2
Call readin(w)
Call putout(w)
Call wmax(w, x1, x2)
Write (*, *) 'X1=', x1, 'X2=', x2
contains
Subroutine readin(a)
Implicit None !// 很重要
Real a(:,:)
integer :: i
Write (*, *) 'Enter 5*5 matrix:'
Do i = 1, size(a,dim=1)
Read (*, *) a(i,:)
End Do
End Subroutine readin
Subroutine putout(a)
Implicit None !// 很重要
Real a(:, :)
integer :: i
Do i = 1, size(a,dim=1)
Write (*, *) a(i,:)
End Do
End Subroutine putout
Subroutine wmax(a, s1, s2)
Implicit None !// 很重要
Real a(:, :) , s1 , s2
integer :: i , N
N = size(a,dim=2)
s1 = a(1, 1)
s2 = a(1, N)
Do i = 2, N
If (s1<a(i,i)) s1 = a(i, i)
If (s2<a(i,N-i+1)) s2 = a(i, N-i+1)
End Do
End Subroutine wmax
End Program main vvt 发表于 2015-10-15 14:42
SUBROUTINE WMAX(A,S1,S2)
Real A(5,5) !// 添加此句
S1=A(1,1)
对,应该加上那句。解决了,谢谢了 fcode 发表于 2015-10-15 14:51
我将你的代码改了一下,你看看这里面的一些代码习惯。会比你自己的代码可读性、可修改性好一些。(例如要改 ...
多谢了,我在学Fortran,可以的话,以后还请多多指教 Harry 发表于 2015-10-17 16:12
多谢了,我在学Fortran,可以的话,以后还请多多指教
建议lz还是先把彭国伦那本书好好翻翻,前面代码当中的低级错误以及被扬弃的Fortran史前语法完全可以避免
页:
[1]