Fortran Coder

标题: 关于数组越界的问题!! [打印本页]

作者: wy123    时间: 2017-8-16 09:17
标题: 关于数组越界的问题!!
[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矩阵越界   一直在找错误 还没想明白修改哪里   想请问大神怎么修改才能让程序正确运行,解除错误?
十分感谢!!!!!



作者: li913    时间: 2017-8-16 11:11
不满足if条件,变量初始化未执行。
作者: chiangtp    时间: 2017-8-16 13:38
1 加一個敘述: SAVE
[Fortran] 纯文本查看 复制代码
Data iff/0/
SAVE ! 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
作者: wy123    时间: 2017-8-16 15:42
chiangtp 发表于 2017-8-16 13:38
1 加一個敘述: SAVE
[mw_shl_code=fortran,true]Data iff/0/
SAVE ! save local variables inext, inextp, ...

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

作者: wy123    时间: 2017-8-16 15:47
li913 发表于 2017-8-16 11:11
不满足if条件,变量初始化未执行。

您好   但是我单独把这个程序放到VS里算的时候正常运行
但是放到一个完整的程序中去算的时候就会报错(数组越界)
十分感谢您的回答
作者: chiangtp    时间: 2017-8-16 15:55
wy123 发表于 2017-8-16 15:42
[/img]
大哥您好 出现了下面的语法错误
另外您给我的这个module拿去算的时候也出现点问题

怎樣的"语法错误"?
作者: wy123    时间: 2017-8-16 15:58
wy123 发表于 2017-8-16 15:58

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

作者: wy123    时间: 2017-8-16 16:01
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> ...
作者: chiangtp    时间: 2017-8-16 16:20
Data iff/0/
SAVE
If (idum<0 .Or. iff==0) Then

這樣會錯???
作者: wy123    时间: 2017-8-16 16:56
chiangtp 发表于 2017-8-16 16:20
Data iff/0/
SAVE
If (idum

哦哦  好的 加了之后问题解决了   十分感谢您!!!!!!!!!!
作者: chiangtp    时间: 2017-8-16 18:42
小老弟, 網站教學視頻好好研習, 你這個樣子是不行的
最起碼, 你要知道"為什麼?"加了之后问题解决了
作者: wy123    时间: 2017-8-17 12:43
chiangtp 发表于 2017-8-16 18:42
小老弟, 網站教學視頻好好研習, 你這個樣子是不行的
最起碼, 你要知道"為什麼?"加了之后问题解决了 ...

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




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2