Fortran Coder

查看: 21498|回复: 5
打印 上一主题 下一主题

[求助] 求大神指导error #6637

[复制链接]

13

帖子

4

主题

0

精华

入门

F 币
74 元
贡献
43 点
跳转到指定楼层
楼主
发表于 2015-10-15 14:08:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
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)
10  CONTINUE
    END

    SUBROUTINE PUTOUT(A)
    REAL A(5,5)
    DO 20 I=1,5
        WRITE(*,*) (A(I,J),J=1,5)
20  CONTINUE
    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)
30  CONTINUE
    END


错误        1         error #6637: When a dummy argument is a function, the corresponding actual argument must also be a function.   [W]        
C:\Users\Administrator\Documents\Visual Studio 2013\Projects\10-15-5=5juzhen\10-15-5=5juzhen\5=5.f90        5        
问题出在红色那一行


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2015-10-15 14:42:29 | 只看该作者
[Fortran] 纯文本查看 复制代码
SUBROUTINE WMAX(A,S1,S2)
  Real A(5,5) !// 添加此句
    S1=A(1,1)

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2015-10-15 14:51:39 | 只看该作者
我将你的代码改了一下,你看看这里面的一些代码习惯。会比你自己的代码可读性、可修改性好一些。(例如要改成6*6的就更容易)

[Fortran] 纯文本查看 复制代码
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

评分

参与人数 1F 币 +10 贡献 +10 收起 理由
珊瑚虫 + 10 + 10 很给力!

查看全部评分

13

帖子

4

主题

0

精华

入门

F 币
74 元
贡献
43 点
地板
 楼主| 发表于 2015-10-17 16:07:49 | 只看该作者
vvt 发表于 2015-10-15 14:42
[mw_shl_code=fortran,true]SUBROUTINE WMAX(A,S1,S2)
  Real A(5,5) !// 添加此句
    S1=A(1,1)[/mw_shl_ ...

对,应该加上那句。解决了,谢谢了

13

帖子

4

主题

0

精华

入门

F 币
74 元
贡献
43 点
5#
 楼主| 发表于 2015-10-17 16:12:34 | 只看该作者
fcode 发表于 2015-10-15 14:51
我将你的代码改了一下,你看看这里面的一些代码习惯。会比你自己的代码可读性、可修改性好一些。(例如要改 ...

多谢了,我在学Fortran,可以的话,以后还请多多指教

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

6#
发表于 2015-10-17 16:17:03 | 只看该作者
Harry 发表于 2015-10-17 16:12
多谢了,我在学Fortran,可以的话,以后还请多多指教

建议lz还是先把彭国伦那本书好好翻翻,前面代码当中的低级错误以及被扬弃的Fortran史前语法完全可以避免
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-22 19:30

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表