Fortran Coder

查看: 17164|回复: 6
打印 上一主题 下一主题

[求助] 程序出问题

[复制链接]

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

楼主
发表于 2014-2-19 11:10:05 | 显示全部楼层
是的,你的代码其实可以很简单的用循环来实现。

一会吃完午饭我空闲的,可以帮你重写这个程序。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-2-19 11:36:09 | 显示全部楼层
本帖最后由 chuxf 于 2014-2-19 11:37 编辑

你是想统计对应整数的数据的平均值。那么就不能统一除以 6,因为某些整数只出现了2次。

我为你重写了整个程序,并添加了注释

[Fortran] 纯文本查看 复制代码
module typedef
  type sm
    real(kind=4) :: v !// 值
    integer :: n !// 出现次数
  end type
end module typedef

program www_fcode_cn
  use typedef
  implicit none
  Integer , parameter :: N_File = 6 !// 6 个文件
  Integer , parameter :: N_Rec  = 50 !// 最多 50 个记录
  character( len = 30 ) ::file( N_File + 1 ) = (/"length1.txt","length(2).txt","length(3).txt","length(4).txt","length(5).txt","length(6).txt","length(7).txt"/)
  !// 上面是 6 个输入文件。加上一个输出文件 length(7).txt
  Type ( sm ) :: d( N_Rec )
  integer :: i , j , ierr
  real :: rv
  d( : )%v = 0.0 !// 所有值一开始为 0.0
  d( : )%n = 0 !// 所有出现次数一开始为 0
  Do i = 1 , N_File !// 循环读取 6 个文件
    Open( 12 , File = Trim(file(i)) , status="old" ) 
    Do !// 循环读取每个文件的每行
      Read( 12 , * , ioStat = ierr ) j , rv
      if( ierr /= 0 ) exit
      d(j)%v = d(j)%v + rv  !// 值叠加上去
      d(j)%n = d(j)%n + 1 !// 出现次数加1
    End Do
    Close( 12 )
  End Do
  open(17,file=Trim(file(N_File+1)))
  Do i = 1 , N_Rec
    if ( d(i)%n == 0 ) then !// 如果从未出现
      rv = 0.0  !// 平均值取 0.0
    else
      rv = d(i)%v / d(i)%n !// 否则,叠加值除以出现次数
    end if
    write(17,*) i , rv ! , d(i)%n !// 可以输出 d(i)%n 出现次数确认没有问题
  End do
end program www_fcode_cn
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-6 15:01

Powered by Tencent X3.4

© 2013-2024 Tencent

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