作者laa7352 (Laa)
看板Fortran
标题Re: [问题] 副程式的写法与档案写入
时间Fri Jun 12 20:22:21 2009
※ 引述《BREAKBEAT (几何科技)》之铭言:
: 请问副程式(计画)以CALL的方式来写的话
: 大约架构是要如何写?是否能提供例题说明
: 还有就是输入是open(10,file='input.dat',statvs='123')这种的
: 它是什麽原理?statvs是代表什麽?
: 要开启的档案如何编写?
: 以上有待高手解惑 感谢
先说明open的部分
open(10,file='input.dat',status='unknown')
^^^^^^
这里应该是status
首先第一个10,是把这行open指定的档案给定一个编号
如果要对这档案做读、写、查询、改变档案中目前的位置
就直接用这编号去指定
例如:
如果要把字串"hello"写入到档案中,指令如下
write(10,*)"hello"
如果要把变数写入到档案
write(10,*)变数名称
第二个 file ,是指定要开启的档案名称
档案名称可以是字串,也可以是变数
如果是字串,在字串的左右要加引号
如果是变数,变数的形态要为字串变数,左右不用加引号
例如:
档案名称是字串
open(10,file='test,txt')
档案名称是变数
character*50 filename !宣告字串变数
filename='test.txt'
open(10,file=filename)
第三个status,是指定档案的状态,有三种
1 已存在 old
2 不存在 new (开新档案的意思)
3 未知 unknown
在状态的左右要加引号
例如:
open(10,file='test,txt',status='unknown')
------------------------分隔线----------------------
副程式的用法
首先,一定要有一个主程式
以下举个例子,从萤幕输入
再输出到萤幕
program main_program !主程式开始
integer input
read(*,*)input
print*, input
stop
end !主程式结束
现在要加入一个副程式,在副程式里计算输入值的平方,再回传给主程式
program main_program !主程式开始
integer input,answer
read(*,*)input
call
sub_program(input,answer)
print*, answer
stop
end !主程式结束
subroutine
sub_program(input,answer) !副程式开始
integer input,answer
answer=input**2
return !返回主程式
end !副程式结束
注意黄色字部分,副程式的名称(subroutine後面的黄色字)
要跟主程式里call後面的一样
主程式里call了副程式,代表主程式将红色字的变数传给副程式
副程式开始那行里的红色字的变数,就会接收主程式里传来的值
传递变数时对应的是位置
例如
call sub_program(input,answer)
subroutine sub_program(input2,answer2)
虽然副程式主程式给第一个变数名称的是input,而副程式给第一个变数名称是input2
在传递变数时,副程式的input2值会等於主程式的input值
例如
call sub_program(input,answer)
subroutine sub_program(answer,input)
call副程式时,第一个变数是input
而副程式接收时,第一个变数是answer
此时,副程式的answer接收到的,是主程式input的值
而副程式的input接收到的是主程式的answer
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.149.127
1F:推 BREAKBEAT:感谢 06/15 10:45