Fortran Coder

楼主: kif117
打印 上一主题 下一主题

[求助] 一个计算相关的编程思路/方法讨论

[复制链接]

46

帖子

8

主题

0

精华

熟手

F 币
211 元
贡献
131 点
31#
 楼主| 发表于 2015-3-29 04:06:30 | 只看该作者
chiangtp 发表于 2015-3-29 01:38
接力14-20樓的討論, 請kif117參考

我单纯地汇报一下在我的计算机上运行的时间:

fcode帮助修改我自己写的‘土程序’的运行时间: 2.87s
您帮我写的例题程序的运行时间: 1.14s

我想请教一下,语句REWIND(),如果我需要修改成批量打开文件TRIM(ADJUSTL(testdata))'.dat'这样,这里要怎么处理? 它定义是'statement positions the file associated with the specified unit'...批量打开的时候,比如我写do i=1,num,是rewind(unit=i)这样吗?

以及请您看一下26楼里的这句‘  Write (a(1), '(3f8.3)') c(2:4)’请问a(1)是指什么? 我没有太看懂这里。所以越改越错.....

谢谢!
------
在遇到同学们以后这几日我每天都花费一两个小时在编程上,感觉像玩LEGO积木那样‘越玩越想玩’。可见,在有指导的情况下学习是很愉快的! 非常感谢大家诚恳的帮助!

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1341 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

32#
发表于 2015-3-29 07:59:00 | 只看该作者
修改为 TRIM(ADJUSTL(testdata)) // '.dat'

rewind(文件通道号) 就可以了,文件通道号需要事先 Open 语句里指定。

Write (a(1), '(3f8.3)') c(2:4) 写法不对,是你先在22楼给出来的。

46

帖子

8

主题

0

精华

熟手

F 币
211 元
贡献
131 点
33#
 楼主| 发表于 2015-3-30 03:40:52 | 只看该作者
fcode 发表于 2015-3-29 07:59
修改为 TRIM(ADJUSTL(testdata)) // '.dat'

rewind(文件通道号) 就可以了,文件通道号需要事先 Open 语句 ...

Program Www_fcode_cn
  Implicit None
  Character *5 Filename
  Character *4 Filename1
  Integer :: I, J
  Integer :: A(6)
  Open (10, File='D:\a\year.txt')
  Do J = 1961, 2013
    Read (10, *) Filename1
    Open (J, File='D:\c\'//Filename1//'.txt') !// 11 改为 j
  End Do
  Open (12, File='D:\a\tem.txt')
  Do I = 1, 525
    Read (12, *) Filename
    Open (13, File='D:\a\'//Filename//'.txt')
    Do J = 1961, 2013
      Read (13, *) A(:)
      Write (A(5), *) A(:)
    End Do
    Close (13)
  End Do
  Close (12)
  Do J = 1961, 2013
    Close (J)
  End Do
  Close (10)
End Program Www_fcode_cn

这个是您帮助另一个同学改写的,我拿来参考(我们遇到的问题是几乎一样的,她是提取特定的年份,我是提取特定的坐标作为result文件的名字):

      Program main
      Implicit None
      Character(160) :: Filename
      Character(160) :: fn1,fn2,fn3,tmp
      Integer :: I, J,num
      real :: A(4), B(4), C(4)
      integer ios

      fn1='c6c8_ID_'
        fn2='c6_'
        fn3='c8_'

        num=160  ! total number of result files

      print*, 'Running'
      do J = 1, num
        write (tmp,*)J
C        print*, J
      open (j,File="D:\c6c8\"//trim(adjustl(fn1))//trim(adjustl(tmp))//'.dat',status='unknown')   ! save result here
        write (j,'(3f8.3)') 0.0,0.0,1.0
        enddo

      open (20, File='IDlist.dat',status='old') ! 里面存放的是10的倍数
      do I = 1, 9200
      read (20, *,iostat=ios) Filename
      if (ios /=0) then
      exit
      endif
c        print*, filename
      open (200,File="D:\C6\"//trim(adjustl(fn2)) //trim(adjustl(filename))//'.dat')
      open (300,File="D:\C8\"//trim(adjustl(fn3)) //trim(adjustl(filename))//'.dat')

      Do J = 1, num
      Read (200, *) A(:)  ! first row=ID number, then x,y,z
        Read (300, *) B(:)  ! first row=ID number
        C(:)=B(:)-A(:)
c        print*, c(:)
      Write (c(1), '(3f8.3)') C(2:4) ! first row=ID number
c      End Do
      Close (300)
        Close (200)
      enddo
      enddo
      Close (20)
      Do J = 1, num
      Close (J)
      End Do
      End Program

从周五开始我已经连续改了三天,不知道是什么错误。非常想学习如何不使用(if ID=特定数)的判定语句的情况下达成同样result的程序的写法,特别向您请教程序问题的所在!

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1341 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

34#
发表于 2015-3-30 08:43:59 | 只看该作者
我建议你单独开一个帖子来讨论这个问题。

给出你的输入文件(范例,比如里面只有两行),然后你的输出文件应该是怎么样的?重点说明你的需求。表达明确。

我很努力的从你的代码里看出你的意图,但我感觉比较昏乱,而且可能存在逻辑错误。所以,我对你的需求还不了解。

46

帖子

8

主题

0

精华

熟手

F 币
211 元
贡献
131 点
35#
 楼主| 发表于 2015-3-30 19:01:12 | 只看该作者
fcode 发表于 2015-3-30 08:43
我建议你单独开一个帖子来讨论这个问题。

给出你的输入文件(范例,比如里面只有两行),然后你的输出文件 ...

好的,我另外发了一个新的帖子,麻烦您指导一下。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-24 12:20

Powered by Tencent X3.4

© 2013-2024 Tencent

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