Fortran Coder

如何按行进行数据操作

查看数: 18952 | 评论数: 14 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
wxy
发布时间: 2017-1-29 21:32

正文摘要:

我在做一个计算积温的小程序,根据彭国伦计算学生成绩的例子做的,已经实现一整年积温的计算 ,现在我想根据第一列的天数 1.实现输入起止日期即起止行数,灵活的计算两个指定行之间的数据而不是简单的一整列的计算, ...

回复

wxy 发表于 2017-2-2 12:17:48
vvt 发表于 2017-2-1 10:02
你欠缺一点对程序的理解。
文件的行数,必须运行的时候才能判断,然后才能知道数组的大小。
运行以后才知道 ...

我有个关于批量处理的问题发了个新帖 麻烦帮忙看一下吧
wxy 发表于 2017-2-1 18:56:41
vvt 发表于 2017-2-1 10:02
你欠缺一点对程序的理解。
文件的行数,必须运行的时候才能判断,然后才能知道数组的大小。
运行以后才知道 ...

嗯嗯 明白了 谢谢
vvt 发表于 2017-2-1 10:02:30
你欠缺一点对程序的理解。
文件的行数,必须运行的时候才能判断,然后才能知道数组的大小。
运行以后才知道大小的数组,就得用动态数组。
有两个时间很重要:编译时,和运行时

wxy 发表于 2017-2-1 08:55:39
vvt 发表于 2017-1-31 23:46
[mw_shl_code=fortran,true]PROGRAM MAIN
  USE typedef
  implicit none

谢谢,光照搬书上例子,把动态数组给忘了,还是要活学活用啊
vvt 发表于 2017-1-31 23:46:22
本帖最后由 vvt 于 2017-1-31 23:48 编辑

[Fortran] 纯文本查看 复制代码
module typedef
    type tdd
        integer :: stat=0
        real ::  tmax , tmin ,  total , average
    end type
end module

PROGRAM MAIN
    USE typedef
    implicit none
    real::dy,rain
    INTEGER,PARAMETER::temp=365
    type(tdd)::t(temp)! 保存气温值
    type(tdd):: total !日均温累加
    integer i

    open(7,file="GDNH94")
    read(7,*)

    do i=1,temp
        read(7,*)dy , t(i)%tmax , t(i)%tmin , rain

        t(i)%average=(t(i)%tmax+t(i)%tmin)/2    !日均温
        total%average=total%average+t(i)%average    !日均温累加=积温
    enddo
    print *,total%average    !
    STOP
end PROGRAM

wxy 发表于 2017-1-31 22:04:24
本帖最后由 wxy 于 2017-1-31 22:19 编辑
vvt 发表于 2017-1-31 21:52
把 print 放到循环外面不就可以了?

嗯嗯 太感谢了 然后就是请问一下 temp=366,366其实是行数 ,我想用获取行数的代码赋给temp,理论上是否是对的,temp=366是声明数组大小吧,获取行数代码放在后面赋值给temp 好像顺序反了,如果理论上可以 应该放在什么位置
[Fortran] 纯文本查看 复制代码
PROGRAM MAIN
  USE typedef
  implicit none
  real::rain
  type(tdd),allocatable::t(:)! 保存气温值
  type(tdd):: total !日均温累加
  integer i , m , dy , start , end
  character(len=3) :: line
  open(7,file="CN019067")
  I=0
  do
    READ(7,*,end=100) line
    i=i+1
  end do
  100 m = i - 1 !//你这个前面只多了一行
  rewind(7)
  allocate( t(m))  
  read(7,*)
  write(*,*)"start:"
  read(*,*) start
  write(*,*)"end:"
  read(*,*) end
  do i=1,m
    read(7,*)dy , t(i)%tmax , t(i)%tmin , rain
    t(i)%average=(t(i)%tmax+t(i)%tmin)/2    !日均温
  end do
  total%average = 0
  do i=start,end
    total%average=total%average+t(i)%average    !日均温累加=积温
  enddo
  print *, dy,total%average    !
end PROGRAM


vvt 发表于 2017-1-31 21:52:10
本帖最后由 vvt 于 2017-1-31 21:54 编辑

把 print 放到循环外面不就可以了?
[Fortran] 纯文本查看 复制代码
I=0
  do while (.true.)
    READ(8,*,end=100) line
    i=i+1
  end do
  100 CONTINUE
   m=i-4
  rewind(8)

如果你要全部365个都读完,然后再计算start到end的平均值,可以这样
[Fortran] 纯文本查看 复制代码
  do i=start,end
    read(7,*)dy , t(i)%tmax , t(i)%tmin , rain
    t(i)%average=(t(i)%tmax+t(i)%tmin)/2    !日均温
    total%average=total%average+t(i)%average    !日均温累加=积温
  enddo
  print *, dy,total%average    !

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

GMT+8, 2024-12-24 00:25

Powered by Tencent X3.4

© 2013-2024 Tencent

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