Fortran Coder

标题: 如何批量一次性输入全部参数? [打印本页]

作者: newboy198414    时间: 2014-8-17 19:26
标题: 如何批量一次性输入全部参数?
本帖最后由 newboy198414 于 2014-8-19 19:52 编辑

各位好:刚接触fortran不久,属于皮毛的皮毛,就是了解些基本概念那种。遇到个问题,手头上有个程序,编译执行后需要交互式的执行,提示输入某项内容然后用户输入,在提示下一个内容在输入,最后计算给出结果。
但现在的问题是,需要计算N多个这种内容,每次需要输入的内容是事先已经知道的。
那么,如何能够让程序一次性将这些内容全部读入计算呢?
比如有个例子:读入a=1.0 读入b=2.0 程序计算c=a+b=3.0  现在我需要读入N多项a、b的值来计算。
如何将这些需要计算的数值一次性输入一次性计算呢,现在没办法重新编写程序来改变算法,源程序内容太多了,上千行代码了,只能是这种一次计算一个结果。


作者: 珊瑚虫    时间: 2014-8-17 19:51
你的问题写了很多,但我的建议是如果你的程序不涉密的话 可以发上来,
这样可以直接告诉你怎么改。
否则 只能跟你说 你在程序里申请个数组,开一个文件把要输入的内容写到文件里面,再将文件内容读入数组,将程序中的read(*,*)改为用该数组赋值
作者: 楚香饭    时间: 2014-8-17 20:57
有多个解决办法:
1.把程序改成一个子程序,将输入都改成参数。然后循环调用这个子程序。
2.另外写一个调用程序,循环把输入参数写入文件(例如input.txt)。通过重定向调用该程序。(  a.exe < input.txt)
作者: newboy198414    时间: 2014-8-18 09:05
本帖最后由 newboy198414 于 2014-8-18 09:06 编辑
珊瑚虫 发表于 2014-8-17 19:51
你的问题写了很多,但我的建议是如果你的程序不涉密的话 可以发上来,
这样可以直接告诉你怎么改。
否则 只 ...

谢谢您的帮助。这个还真有些涉密(其实没什么东西可以保密的,但凡事要考虑周全,单位有规定),不方便将源代码上传。程序运行的界面如图,我需要依次输入N、3、60、4、15.10、7.2、2.12、1.32、39.74、120、3.441,然后程序计算结果为K1值和K1R值。继续输入N、N,然后就进入下一个计算过程,和上面的内容相同,只是输入数值不同而已。因为需要计算N多组数据,现在我想知道如何将这些需要计算的内容一次性读入,并完成计算。

运行图.jpg (130.99 KB, 下载次数: 461)

程序运行结果

程序运行结果

作者: newboy198414    时间: 2014-8-18 09:22
本帖最后由 newboy198414 于 2014-8-18 09:23 编辑
楚香饭 发表于 2014-8-17 20:57
有多个解决办法:
1.把程序改成一个子程序,将输入都改成参数。然后循环调用这个子程序。
2.另外写一个调用 ...

谢谢您的帮助。源程序共有22个文件、一个主程序的,其他全是函数和子程序。你的意思是我需要将主程序改写成子程序,然后调用子程序,将原来需要输入的变量作为子程序的变量传递是吗?然后循环调用N次子程序完成计算。最后的效果是,我只需要将原来输入的变量,写在一个输入文件如input.txt,然后用调用程序读入该输入文件完成计算是吗?    这个程序有验证文件,我见到其过程也是将输入变量写在了一个输入文件中,(比如截图内容),而且还将计算结果写到了XX.out输出文件中,只是无法知道具体是怎么实现的!

输入文件.PNG (26.93 KB, 下载次数: 466)

输入文件

输入文件

作者: vvt    时间: 2014-8-18 09:47
windows命令行重定向。

exe名称 < input.txt 既可
作者: newboy198414    时间: 2014-8-19 19:53
谢谢各位的帮助,问题已经解决了。是版主改状态吗?
作者: fcode    时间: 2014-8-19 20:36
是的,版主修改状态
作者: 百事可乐    时间: 2014-8-19 21:23
楼主采用了什么方法?何不说出来,与大家共勉?
作者: aliouying    时间: 2014-8-20 08:32
百事可乐 发表于 2014-8-19 21:23
楼主采用了什么方法?何不说出来,与大家共勉?

饭饭的方法啊~
作者: newboy198414    时间: 2014-8-21 00:40
本帖最后由 newboy198414 于 2014-8-21 07:36 编辑
百事可乐 发表于 2014-8-19 21:23
楼主采用了什么方法?何不说出来,与大家共勉?

正常情况下是要按照楚香饭的办法解决的。可我的程序有点特殊,是个死循环的程序,如果用户不主动终止,程序会一直运行,这和程序的计算目的是一致的。因此我这个只需要在命令行中定向输入input参数就可以得到正确的结果了[在下初学,之前不了解这种方式]。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2