landaifeng 发表于 2014-6-11 17:34:22

FORTRAN中如何读入和输出数组(矩阵)

1.我写了一个读入矩阵的语句,程序没有报错,但是运行的时候就运行不了,请大家帮忙分析一下是什么原因?
2.如果想输出一个3*3的矩阵,应该怎么编译啊?
3.如果我想读入.txt文档里面的矩阵,应该怎么写程序啊?
dimension n(3,3)
integer i,j
read (*,1)((n(i,j),j=1,3),i=1,3)
write (*,1)n
1 FORMAT (2X,'n=',3I6.2/2(4X,3I6.2/))
end

安靖 发表于 2014-6-11 18:54:36

txt里数据格式怎么样的?

vvt 发表于 2014-6-11 19:21:30

不要用 dimension,不要用格式符read

integer :: n(3,3)
read (*,*) n
write (*,'(3(3i6.2/))') n
end

至于 write 的格式符,你想写就写,不写拉倒。

从文件读入也很简单

integer :: n(3,3)
Open( 111 , File = '文件名' )
read (111,*) n
write (*,'(3(3i6.2/))') n
end

landaifeng 发表于 2014-6-11 23:02:40

vvt 发表于 2014-6-11 19:21
不要用 dimension,不要用格式符read

integer :: n(3,3)


谢谢你的回复!我把你的程序输进去了,不输dimension a(3,3)程序会报错,而且输入integer :: n(3,3)
,也报错了!不知道是什么原因

landaifeng 发表于 2014-6-11 23:11:50

安靖 发表于 2014-6-11 18:54
txt里数据格式怎么样的?
我现在txt数据时这样的
4.5 0.2 -1.3 0 0 0 0
0 5.3 0 0 0 0 0
0 0 10.2 5.1 0 -1.7 0
0 0 0 8.4 0 0 0
0 0 0 0 0.6 0 0
0 0 0 0 0 3.1 0
0 0 0 0 0 0 5.6
我用这个程序
dimension a(3,3)
open (1,file='E\1.txt')
do 10 i=1,3
read(1,*)(a(i,j),j=1,3)
10 continue
write(*,*)((a(i,j),j=1,3),i=1,3)
100 FORMAT (2x,7f6.2/6(2x,7f6.2/))
end

是对的了!

楚香饭 发表于 2014-6-11 23:19:01

本帖最后由 chuxf 于 2014-6-11 23:20 编辑

第一,不要用 dimension
第二,请弄清楚数据的类型,是整型,还是浮点型。
整型用 integer 定义,用 I 格式符输出(你在主楼就这样写的,所以大家以为是整型)
浮点型用 real 定义,用 f 格式符输出(你在楼上就这样写的)
第三,出错,一定要给错误提示!!!!否则神仙也帮不了你
第四,请用 End Do,不要用 continue
第五,请扔掉手边的 FORTRAN77 的书,看一本 Fortran90 或 95 的书。
第六,你的数组不是 3*3 的。

landaifeng 发表于 2014-6-11 23:32:46

chuxf 发表于 2014-6-11 23:19
第一,不要用 dimension
第二,请弄清楚数据的类型,是整型,还是浮点型。
整型用 integer 定义,用 I 格式 ...

谢谢,你的意见很有帮助!
1和5. 我确实是在用Fortran77的书,呵呵,那上面教我用dimension,所以采用的,是不是因为Fortran90的书不让用啦?附:能不能介绍一本Fortran学习的书呢?
2和6. 对不起,我这个没说清楚,我一开始txt文档时用的整型数据,后来回复的时候我把数据改了,然后重新看一下对不对,所以改了一下
3.下次我会注意写清楚错误提示!

fcode 发表于 2014-6-11 23:37:13

《Fortran95 程序设计》【彭国伦】 http://fcode.cn/resource_ebook-1-1.html
为什么不提倡用 Dimension http://fcode.cn/guide-43-1.html
数据类型很重要~
页: [1]
查看完整版本: FORTRAN中如何读入和输出数组(矩阵)