Fortran Coder

查看: 16213|回复: 11
打印 上一主题 下一主题

[文件读写] 关于循环输出文件,和循环改变初值的提问

[复制链接]

26

帖子

8

主题

0

精华

熟手

F 币
123 元
贡献
78 点
跳转到指定楼层
楼主
发表于 2015-4-14 20:13:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主程序如下:
[Fortran] 纯文本查看 复制代码
program main   
 use m_rk_ods    
implicit real*8(a-z)    
integer::N    
real*8::px0,py0,pz0,x0,yy0,z0   
real*8:: y(6),y0(6)
 open (unit=11,file='dat1.txt')    
open (unit=12,file='dat2.txt')    
N=6    
px0=5.    
py0=0.    
pz0=50.    
x0=-2500.    
yy0=0.    
z0=-25000.    
t0=0.    
tt=100000.    
y0=(/px0,py0,pz0,x0,yy0,z0/)    
call solve(fun1,t0,tt,y0,N)
end

各位大神们,作为初学fortran循环这部分确实很难做,尤其是循环输出到文件。
对我来讲第一个技术难点:我希望达到的目标是这样的,就是初值条件z0从-25200到-24800以步长为0.5变化,而z0=-25200时,x0从-2520到-2500,而z0+1的时候,x0从-2519到-2499以此类推,当z0循环到-24800时,x0的循环从-2500到-2480.这个样子。然后求助这个循环需要怎么做??一共做800*20=16000次计算。
第二个比较重要的问题是,我希望每一个初值的结果对应输出到一个文件,一共输出16000个文件。。?这个循环输出的指令要怎么写?



分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

沙发
发表于 2015-4-14 21:05:57 | 只看该作者
文件名可以用字符串表示。
字符串可以由整数或浮点数转换。
这都不是问题。

问题是,我看不懂你的循环规则。
z0 在 -25200到-24800,400个数值之间变化。
而 x0 从 -2520到-2500,直到 -2500到-2480。只有20个变化。

26

帖子

8

主题

0

精华

熟手

F 币
123 元
贡献
78 点
板凳
 楼主| 发表于 2015-4-14 21:22:22 | 只看该作者
楚香饭 发表于 2015-4-14 21:05
文件名可以用字符串表示。
字符串可以由整数或浮点数转换。
这都不是问题。

循环规则是,z0做外层循环,z0循环范围从-25200到-24800,这个范围内每次变化增加1,即z0从-25200,-25199,-25198……这样子。
然后z0=-25200时,内层循环由x0完成,x0从-2520到-2500,然后z0+1变成-25199,内层循环x0从-2519到-2499.。。
然后z0再加1,变成-25198,这是x0循环从-2518到-2498

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

地板
发表于 2015-4-14 21:30:09 | 只看该作者
对啊。那当 z0 变化到 -24800 时,x0 应该循环从 -2120 到 -2100 啊。
怎么可能还从 -2500到-2480 ?

26

帖子

8

主题

0

精华

熟手

F 币
123 元
贡献
78 点
5#
 楼主| 发表于 2015-4-14 21:31:52 | 只看该作者
楚香饭 发表于 2015-4-14 21:30
对啊。那当 z0 变化到 -24800 时,x0 应该循环从 -2120 到 -2100 啊。
怎么可能还从 -2500到-2480 ? ...

哦,那估计是我X0的后面范围写错了。。。应该是x0从-2120到-2100.。。。。。规则应该是我之前写的那种。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

6#
发表于 2015-4-14 21:39:16 | 只看该作者
[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  Implicit None
  character(len=10) :: c1 , c2
  integer z0 , x0 , k
  k = -2520
  Do z0 = -25200 , -24800
    write( c1 , '(g0)' ) z0
    Do x0 = k , k + 20
      !//计算代码
      write( c2 , '(g0)' ) x0
      Open( 12 , File = trim(adjustl(c1))//"-"//trim(adjustl(c2))//".txt")
      !// 输出代码
      Close( 12 )
    End Do
    k = k + 1
  End Do
End Program www_fcode_cn

26

帖子

8

主题

0

精华

熟手

F 币
123 元
贡献
78 点
7#
 楼主| 发表于 2015-4-14 21:53:13 | 只看该作者
楚香饭 发表于 2015-4-14 21:39
[mw_shl_code=fortran,true]Program www_fcode_cn
  Implicit None
  character(len=10) :: c1 , c2

Open( 12 , File = trim(adjustl(c1))//"-"//trim(adjustl(c2))//".txt")
这句编译的时候提示trim函数没有值~~

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

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

8#
发表于 2015-4-14 21:56:41 | 只看该作者
我给代码都是自己亲自验证过的,可以编译链接的。

如果你提示有错误,请给出英文的,原版的错误提示,而不是自己翻译的。

26

帖子

8

主题

0

精华

熟手

F 币
123 元
贡献
78 点
9#
 楼主| 发表于 2015-4-14 21:59:59 | 只看该作者
楚香饭 发表于 2015-4-14 21:56
我给代码都是自己亲自验证过的,可以编译链接的。

如果你提示有错误,请给出英文的,原版的错误提示,而不 ...

我手打敲错了,不好意思啦。。。添麻烦啦。问题基本解决了,谢谢您~~

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

10#
发表于 2015-4-15 08:24:02 | 只看该作者
写入16000个文件可不是好主意,为啥不是一个文件一次性写入16000个计算结果?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-28 10:17

Powered by Tencent X3.4

© 2013-2024 Tencent

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