Fortran Coder

查看: 17704|回复: 11
打印 上一主题 下一主题

[数值问题] 关于数组越界的问题!!

[复制链接]

14

帖子

2

主题

0

精华

入门

F 币
79 元
贡献
39 点
跳转到指定楼层
#
发表于 2017-8-16 09:17:32 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
Subroutine ran3(idum, rand)
  Implicit Real *8(A-H, M, O-Z)
  Parameter (mbig=4000000., mseed=1618033., mz=0., fac=1./mbig)
  Dimension ma(55)
  Data iff/0/
  If (idum<0 .Or. iff==0) Then
    iff = 1
    mj = mseed - dble(iabs(idum))
    mj = dmod(mj, mbig)
    ma(55) = mj
    mk = 1
    Do i = 1, 54
      ii = mod(21*i, 55)
      ma(ii) = mk
      mk = mj - mk
      If (mk<mz) mk = mk + mbig
      mj = ma(ii)
    End Do
    Do k = 1, 4
      Do i = 1, 55
        ma(i) = ma(i) - ma(1+mod(i+30,55))
        If (ma(i)<mz) ma(i) = ma(i) + mbig
      End Do
    End Do
 ! End If
    inext = 0
    inextp = 31
    idum = 1
 End If
  inext = inext + 1
  If (inext==56) inext = 1
  inextp = inextp + 1
  If (inextp==56) inextp = 1
  mj = ma(inext) - ma(inextp)                                          !!!调试时 显示在这行出错误,
  If (mj<mz) mj = mj + mbig
  ma(inext) = mj
  rand = mj*fac
  Return
End Subroutine ran3

属于第三种错误   运行错误               
错误提示:Subscript #1 of the arrat MA has value -858993459 which is less than the lower bound of 1
显示ma矩阵越界   一直在找错误 还没想明白修改哪里   想请问大神怎么修改才能让程序正确运行,解除错误?
十分感谢!!!!!


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

14

帖子

2

主题

0

精华

入门

F 币
79 元
贡献
39 点
11#
 楼主| 发表于 2017-8-17 12:43:43 | 只看该作者
chiangtp 发表于 2017-8-16 18:42
小老弟, 網站教學視頻好好研習, 你這個樣子是不行的
最起碼, 你要知道"為什麼?"加了之后问题解决了 ...

恩恩   好的  我会好好学习的  之前因为事情太紧急了    现在开始慢慢学
再次感谢您的帮助

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

10#
发表于 2017-8-16 18:42:21 | 只看该作者
小老弟, 網站教學視頻好好研習, 你這個樣子是不行的
最起碼, 你要知道"為什麼?"加了之后问题解决了

评分

参与人数 1贡献 +5 收起 理由
fcode + 5 赞一个!

查看全部评分

14

帖子

2

主题

0

精华

入门

F 币
79 元
贡献
39 点
9#
 楼主| 发表于 2017-8-16 16:56:49 | 只看该作者
chiangtp 发表于 2017-8-16 16:20
Data iff/0/
SAVE
If (idum

哦哦  好的 加了之后问题解决了   十分感谢您!!!!!!!!!!

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

8#
发表于 2017-8-16 16:20:07 | 只看该作者
Data iff/0/
SAVE
If (idum<0 .Or. iff==0) Then

這樣會錯???

14

帖子

2

主题

0

精华

入门

F 币
79 元
贡献
39 点
7#
 楼主| 发表于 2017-8-16 16:01:34 | 只看该作者
chiangtp 发表于 2017-8-16 15:55
怎樣的"语法错误"?

加入save后的错误
error #5082: Syntax error, found '[' when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM MODULE TYPE INTEGER REAL ...
然后我用您的那个mudule 出现这个问题
[Fortran] 纯文本查看 复制代码
Do i = 1, n
      Do
        x = int(ran3(idum)*d) + 1
        If (raw_order(x)<>-1) Goto 10
      End Do

1>d:\documents\visual studio 2010\Projects\17081601\17081601\Source1.f90(203): error #5082: Syntax error, found '>' when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT> ...

14

帖子

2

主题

0

精华

入门

F 币
79 元
贡献
39 点
6#
 楼主| 发表于 2017-8-16 15:58:57 | 只看该作者

好像不会发图片  您等等   不好意思哈

评分

参与人数 1F 币 +1 收起 理由
fcode + 1 请当做附件上传,点击“别针”图标.

查看全部评分

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

5#
发表于 2017-8-16 15:55:54 | 只看该作者
wy123 发表于 2017-8-16 15:42
[/img]
大哥您好 出现了下面的语法错误
另外您给我的这个module拿去算的时候也出现点问题

怎樣的"语法错误"?

14

帖子

2

主题

0

精华

入门

F 币
79 元
贡献
39 点
地板
 楼主| 发表于 2017-8-16 15:47:36 | 只看该作者
li913 发表于 2017-8-16 11:11
不满足if条件,变量初始化未执行。

您好   但是我单独把这个程序放到VS里算的时候正常运行
但是放到一个完整的程序中去算的时候就会报错(数组越界)
十分感谢您的回答

14

帖子

2

主题

0

精华

入门

F 币
79 元
贡献
39 点
板凳
 楼主| 发表于 2017-8-16 15:42:24 | 只看该作者
chiangtp 发表于 2017-8-16 13:38
1 加一個敘述: SAVE
[mw_shl_code=fortran,true]Data iff/0/
SAVE ! save local variables inext, inextp, ...

大哥您好 出现了下面的语法错误
另外您给我的这个module拿去算的时候也出现点问题
我现在在用这个程序算,ma这个程序单独拿出来算没事 但是一放到整个程序中就会报错(数组越界)
十分感谢您的回答

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

沙发
发表于 2017-8-16 13:38:06 | 只看该作者
1 加一個敘述: SAVE
[Fortran] 纯文本查看 复制代码
Data iff/0/
[b]SAVE[/b] ! save local variables inext, inextp, and ma
If (idum<0 .Or. iff==0) Then


2. http://www.indiana.edu/~clcl/Q550_WWW/Number_Generators.f95
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 15:29

Powered by Tencent X3.4

© 2013-2024 Tencent

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