作者laa7352 (Laa)
看板Fortran
标题Re: [请益] 阵列读档的问题
时间Sun Dec 20 11:52:49 2009
※ 引述《cisboy (阿Q)》之铭言:
: 我有一个(8,8)的阵列
: 我每次都只要读(3,3)的阵列
: 例如第一次读(1:3,1,3)
: 第二次读(2:4,1,3).....(1:3,2:4),(1:3,3:5)
: 到最後读(6:8,6:8)
: 我用do loop写他一直说我阵列范围错误
: real::a(1:8,1:8)
: open(1,file='d:\c.txt')
: do n=1,6
: do m=1,6
: read(1,*)a(n:(n+2),m:(m+2))
: enddo
: enddo
: end
: 後来我用动态阵列也是一堆问题
: 请问是哪边错了,谢谢
先不论回圈读到的资料顺序排列正不正确
我想问题在於你提供的阵列不满足你回圈所需要的资料笔数
来算算看~~:p
你有一个8x8的阵列
所以资料笔数是8x8=64笔
你的回圈里一次需要的资料笔数是3x3=9笔
而回圈总需要的资料笔数是3x3x6x6=324笔
所以应在回圈第八次(n=2 m=2)的时候会出错
为什麽会这样呢?
因为你open里的叙述里只有给档名,所以档案应该是formatted 读写方向是sequential
简单的说,你程式读档案时是循序从头读到尾,不会因为你的回圈怎麽跑而跳着读
所以当回圈第七次的时候,你的回圈已经读了9x7=63笔资料
而回圈第八次时,只剩一笔资料外,就读到档案尾巴了
建议你,先一次把档案资料读完
read a(8,8)
open(11,file='d:\c.txt')
read(11,*)a
然後用a阵列依你的需求去设计你的回圈吧
do n=1,6
do m=1,6
....a(n:(n+2),m:(m+2))....
enddo
enddo
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.137.32.160
※ 编辑: laa7352 来自: 140.137.32.160 (12/20 11:54)
1F:推 cisboy:谢谢你的建议,我後来有发现我的问题点,谢谢 12/21 20:42