24小时热门版块排行榜    

查看: 2296  |  回复: 8

li_clifff

银虫 (正式写手)

[求助] 请教一个read的用法,谢谢

请教一个问题,我要搞清楚程序中这两个语句的结果:

INTEGER:: k, nr,i, nodof=3,nn=96
INTEGER,ALLOCATABLE:: nf(:, : )
ALLOCATE nf(nodof,nn)
READ(10,*)nr,(k,nf(:,k),i=1,nr)

其中文件10为:
81
1 1 0 0   2 1 0 0   3 1 1 0   4 1 0 0   5 1 1 0   6 1 0 0
7 1 1 0   8 1 0 0   9 1 1 0  10 1 0 0  11 1 1 0  12 0 0 0
13 1 0 1  14 1 0 1  15 1 0 1  16 1 0 1  17 0 0 0  18 0 1 0
19 1 0 1  21 1 0 1  23 1 0 1  25 1 0 1  27 1 0 1  28 0 1 0
29 0 0 0  30 1 0 1  31 1 0 1  32 1 0 1  33 1 0 1  34 0 0 0
35 0 1 0  36 1 0 1  38 1 0 1  40 1 0 1  42 1 0 1  44 1 0 1
45 0 1 0  46 0 0 0  47 1 0 1  48 1 0 1  49 1 0 1  50 1 0 1
51 0 0 0  52 0 1 0  53 1 0 1  54 1 1 1  55 1 0 1  57 1 0 1
59 1 0 1  61 1 0 1  62 0 1 0  63 0 0 0  64 1 0 1  65 1 0 1
66 1 0 1  67 1 0 1  68 0 0 0  69 0 1 0  70 1 0 1  72 1 0 1
74 1 0 1  76 1 0 1  78 1 0 1  79 0 1 0  80 0 0 0  81 1 0 1
82 1 0 1  83 1 0 1  84 1 0 1  85 0 0 0  86 0 1 0  87 0 0 0
88 0 1 0  89 0 0 0  90 0 1 0  91 0 0 0  92 0 1 0  93 0 0 0
94 0 1 0  95 0 0 0  96 0 1 0
在debug模式下,nr值为81,k为96(?),nf是3*96的数组,i等于82(?)

能帮我解释下为什么会这样吗?非常感谢
其中nf数组前面几个值为:




[ Last edited by li_clifff on 2011-10-15 at 00:57 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mchen10

金虫 (正式写手)

★ ★
余泽成(金币+2): 谢谢参与应助,欢迎常来程序语言版! 2011-10-15 19:13:10
ben_ladeng: 专家考核存档 2011-10-17 11:51:35
读入第一个数据, 为nr (number of rows?)
然后 4个一组地读入 到k, nf(1,k), nf(2,k), nf(3,k); 一共读 nr次
更痛苦的是梦没醒路已经不能走了
2楼2011-10-15 03:08:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-10-15 19:13:21
li_clifff(金币+10): 恩,明白了,谢谢 2011-10-15 23:22:40
ben_ladeng: 专家考核存档 2011-10-17 11:51:44
ALLOCATE nf(nodof,nn) 这句话是错误的吧?
ALLOCATE(nf(nodof,nn))
如果在这之后加一句:
nf = 100000
然后在程序结束之前加上:
CODE:
do i=1,96
   write(*,*) nf(1:3,i)
end do

你就知道你的程序是在做什么了……
3楼2011-10-15 14:30:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

引用回帖:
3楼: Originally posted by snoopyzhao at 2011-10-15 14:30:40:
ALLOCATE nf(nodof,nn) 这句话是错误的吧?
ALLOCATE(nf(nodof,nn))
如果在这之后加一句:
nf = 100000
然后在程序结束之前加上:
CODE:
do i=1,96
   write(*,*) nf(1:3,i)
end do

你就知道你 ...

恩,再请教一个小问题,如果在主程序里定义了变量数组nf是3*9的,即nf(3,9),而且主程序里的 call subroutine(nf,...),对应的subroutine里面对nf定义为nf(2,9),会有什么问题吗?运行时候到底是nf(3,9),还是nf(2,9),刚想到有这个问题,就顺便问一下,谢谢
4楼2011-10-15 23:26:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

引用回帖:
4楼: Originally posted by li_clifff at 2011-10-15 23:26:37:
恩,再请教一个小问题,如果在主程序里定义了变量数组nf是3*9的,即nf(3,9),而且主程序里的 call subroutine(nf,...),对应的subroutine里面对nf定义为nf(2,9),会有什么问题吗?运行时候到底是nf(3,9) ...

你确定你这种做法可以编译通过吗?呵呵……

如果可以的话,给个示例看看……
5楼2011-10-16 13:01:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

引用回帖:
5楼: Originally posted by snoopyzhao at 2011-10-16 13:01:30:
你确定你这种做法可以编译通过吗?呵呵……

如果可以的话,给个示例看看……

program  ex0804
implicit none
  integer :: a(2)
  DATA  a /1,2/
  integer :: b(2)
  data b  /2,3/
  call add(a,b)  ! 把变量a及b交给子程序add来处理
  stop
end


subroutine add(first, second)
implicit none
  integer :: first, second ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end
6楼2011-10-16 22:51:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-10-17 02:32:35
li_clifff(金币+10): 谢谢你的评论,如果数组参数在主程序和多个子程序都出现,是不是也是这样一步步传递,读入子程序,运行子程序出来新的数组,再读入下一个子程序。。。 2011-10-17 09:44:20
引用回帖:
6楼: Originally posted by li_clifff at 2011-10-16 22:51:30:
program  ex0804
implicit none
  integer :: a(2)
  DATA  a /1,2/
  integer :: b(2)
  data b  /2,3/
  call add(a,b)  ! 把变量a及b交给子程序add来处理
  stop
end


subroutine add(first, se ...

由于 Fortran 是 call by reference,所以,关键还是要看子程中相关变理的声明了……

在你的这个例子中,很显然,只取其中的一个数值。

对于你前面说的,其实,传递给子程的只是数组对应的第一个数值的地址,后面到底如何取值,还要看子程中的定义……这种情况下,一定要注意 Fortran 中是列优先的存贮方式……

» 本帖已获得的红花(最新10朵)

7楼2011-10-17 00:11:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

送鲜花一朵
引用回帖:
7楼: Originally posted by snoopyzhao at 2011-10-17 00:11:07:
由于 Fortran 是 call by reference,所以,关键还是要看子程中相关变理的声明了……

在你的这个例子中,很显然,只取其中的一个数值。

对于你前面说的,其实,传递给子程的只是数组对应的第一个数值的地址 ...

program  ex0804
implicit none
integer :: a(3)
DATA  a /1,2,3/
integer :: b(3)
data b  /4,5,6/
call add(a,b)  ! 把变量a及b交给子程序add来处理
call add1(a,b)

  stop
end

subroutine add(first, second)
implicit none
  integer :: first(2), second(2) ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end

subroutine add1(first, second)
implicit none
  integer :: first, second ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end

为什么运行的结果是
     5      7
     5
8楼2011-10-17 09:59:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

没有问题,我自己弄错了

program  ex0804
implicit none
!integer:: a=1
integer :: a(3)
DATA  a /1,2,3/
!integer:: b=2
integer :: b(3)
data b  /4,5,6/
call add(a,b)  ! 把变量a及b交给子程序add来处理
call add1(a,b)

stop
end


subroutine add(first, second)
implicit none
  integer :: first(2), second(2) ! first,second的内容会从CALL时得到
! write(*,*)  first+second
  first = first + second
  second =2*second
  return
end


subroutine add1(first, second)
implicit none
  integer :: first(2), second(2) ! first,second的内容会从CALL时得到
  write(*,*) first+second
  return
end

运行结果是

       13               17
9楼2011-10-17 10:36:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 li_clifff 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 265求调剂 +6 梁梁校校 2026-03-17 6/300 2026-03-20 08:59 by ZHANG0tao
[考研] 295材料求调剂,一志愿武汉理工085601专硕 +3 Charlieyq 2026-03-19 3/150 2026-03-20 08:53 by xingguangj
[考研] 26调剂/材料/英一数二/总分289/已过A区线 +8 步川酷紫123 2026-03-13 8/400 2026-03-20 08:47 by xingguangj
[考研] 294求调剂材料与化工专硕 +14 陌の森林 2026-03-18 14/700 2026-03-19 22:38 by 学员8dgXkO
[考研] 本科郑州大学物理学院,一志愿华科070200学硕,346求调剂 +4 我不是一根葱 2026-03-18 4/200 2026-03-19 09:11 by 浮云166
[考研] 【同济软件】软件(085405)考研求调剂 +3 2026eternal 2026-03-18 3/150 2026-03-18 19:09 by 搏击518
[考研] 295求调剂 +3 一志愿京区211 2026-03-18 5/250 2026-03-18 17:03 by zhaoqian0518
[考研] 收复试调剂生 +4 雨后秋荷 2026-03-18 4/200 2026-03-18 14:16 by elevennnne
[考研] 0703化学336分求调剂 +6 zbzihdhd 2026-03-15 7/350 2026-03-18 09:53 by zhukairuo
[考研] 293求调剂 +11 zjl的号 2026-03-16 16/800 2026-03-18 08:10 by zhukairuo
[考研] 301求调剂 +4 A_JiXing 2026-03-16 4/200 2026-03-17 17:32 by ruiyingmiao
[考研] 085601求调剂 +4 Du.11 2026-03-16 4/200 2026-03-17 17:08 by ruiyingmiao
[考研] 332求调剂 +6 Zz版 2026-03-13 6/300 2026-03-17 17:03 by ruiyingmiao
[考研] 材料与化工专硕调剂 +5 heming3743 2026-03-16 5/250 2026-03-17 14:03 by 勇敢太监王公公
[考研] 11408 一志愿西电,277分求调剂 +3 zhouzhen654 2026-03-16 3/150 2026-03-17 07:03 by laoshidan
[考研] 085601材料工程315分求调剂 +3 yang_0104 2026-03-15 3/150 2026-03-15 10:58 by peike
[考研] 本科南京大学一志愿川大药学327 +3 麦田耕者 2026-03-14 3/150 2026-03-14 20:04 by 外星文明
[考研] 297一志愿上交085600求调剂 +5 指尖八千里 2026-03-14 5/250 2026-03-14 17:26 by a不易
[考研] 一志愿哈工大材料324分求调剂 +5 闫旭东 2026-03-14 5/250 2026-03-14 14:53 by 木瓜膏
[考研] 招收0805(材料)调剂 +3 18595523086 2026-03-13 3/150 2026-03-14 00:33 by 123%、
信息提示
请填处理意见