这个fortran程序集表示什么意思

扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Fortran 程序设计基础 第四章
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口&& 查看话题
【求助】用fortran怎么描述下面这样的情况,我是新手,请大家帮忙
已经知道直线向量a上面的2个点(x1,y1,z1), (x2,y2,z2)和直线向量b上面的2个点(x3,y3,z3), (x4,y4,z4),求直线a,b的夹角。(0~180degree)
夹角公式是cos=/*.
其实我最大困难是在fortran中怎么定义这个新的函数-直线向量(恩,这个向量类似一个2组数组)。本人是 对fortran用的不熟。
& &请大家帮忙写写这段程序,重点就是这个向量的定义,最好能注明清楚~~谢谢。
Originally posted by tpp001 at
已经知道直线向量a上面的2个点(x1,y1,z1), (x2,y2,z2)和直线向量b上面的2个点(x3,y3,z3), (x4,y4,z4),求直线a,b的夹角。(0~180degree)
夹角公式是cos= Originally posted by maomao1210 at
写了一个简单的小程序,可以满足你使用的要求:
输入文件的含义如下:
[ ... 真的不好意思,我的看懂了您上面的代码,可是我还是不会用来写我这个复杂点的情况,可能我有点笨了,不知道能不能麻烦您看看我这个情况,谢谢。。。。
总共有29条直线向量,每条直线向量上都知道2个点的坐标,A(a1,a2,a3),B(b1,b2,b3),【所以输入文件中有58个点的坐标】而我要得出他们任意2条直线向量的夹角。。。
输入文件的格式是这样的
b1 b2 b3 #这是第一条直线向量上面的2个点坐标
d1 d2 d3 #这是第2条直线向量上面的2个点坐标
(n-1)1 (n-1)2 (n-1)3
n1 n2 n3 #这是第n条直线向量上面的2个点的坐标
一共58行数据 Originally posted by tpp001 at
真的不好意思,我的看懂了您上面的代码,可是我还是不会用来写我这个复杂点的情况,可能我有点笨了,不知道能不能麻烦您看看我这个情况,谢谢。。。。
总共有29条直线向量,每条直线向量上都知道2个点的坐 ... 按照你的要求,写的如下程序,可以符合你的要求:
下面是我用四条线的简单测试结果:
那个黑色的方阵 是计算结果,两两LINE之间的,构成了一个对称矩阵。
C& &====================================================
C& && && && &&&www.emuch.net
C& &====================================================
& && &Implicit None
& && &Integer Idicp,Jdicp,Kdicp,Ldicp
& && &Integer Num_Max,Num_Line
& & & & Real*8 X1,Y1,Z1,X2,Y2,Z2
& & & & Parameter(Num_Max=1000)
& & & & Real*8&&A(3,Num_Max)
& && &Real*8 Theta(Num_MAx,Num_MAx),Output
& & & & Open(10,File='input',Status='Old')
& & & & Open(20,File='Output',Status='Unknown')
C& && &Read necessary data
& & & & Read (10,*) Num_Line
& & & & Do Idicp =1, Num_Line
& & & & Read(10,*) X1,Y1,Z1
& & & & Read(10,*) X2,Y2,Z2
& && &A(1,Idicp)= X2-X1
& & & & A(2,Idicp)= Y2-Y1
& & & & A(3,Idicp)= Z2-Z1
& & & & EndDo
C& && &Find the theta between every possible combin two lines
& && &Do Idicp=1, Num_Line
& & & && &Do Jdicp=1,Idicp
& && && & Theta(Idicp,Jdicp)= 0.0D0
& & & & & & & & Call Sub(A(1,Idicp),A(1,Jdicp),Output)
& & & & & & & & Theta(Idicp,Jdicp)= Output&&
& && && & Theta(Jdicp,Idicp)= Theta(Idicp,Jdicp)
& & & && &EndDo
& & & & Enddo
C& &&&Output the matrice
& && &Do Idicp=1, Num_Line
& & & &&&Write(*,'(30f12.3)') (Theta(Idicp,Jdicp),Jdicp=1,Num_Line)
& & & &&&Write(20,'(30f12.3)') (Theta(Idicp,Jdicp),Jdicp=1,Num_Line) & & & &
& & & & Enddo
& & & & End
& && &Subroutine Sub(A,B,Output)
& && &Implicit None
& & & & Real*8 A(3),B(3)
& & & & Real*8 Dicp,AA,BB,AB,Output
& & & & AB=A(1)*B(1)+A(2)*B(2)+A(3)*B(3)
& & & & AA=A(1)*A(1)+A(2)*A(2)+A(3)*A(3)
& & & & BB=B(1)*B(1)+B(2)*B(2)+B(3)*B(3)
& & & & Dicp = AB / ( Dsqrt(AA) *&&Dsqrt(BB) )
& && &Output= Acos(Dicp)*180.0d0/3.
& & & & Return
& & & & End
Enjoy It !!!! Originally posted by maomao1210 at
按照你的要求,写的如下程序,可以符合你的要求:
http://pic.emuch.n ... 非常感谢版主您的帮忙,回复的也非常及时。我有一点疑问向您请教。
在调用子程序的时候,在主程序中式这样的写的:
Call Sub(A(1,Idicp),A(1,Jdicp),Output)
而在子程序中:
&&Subroutine Sub(A,B,Output)
& && &Implicit None
& && &&&Real*8 A(3),B(3)
& && &&&Real*8 Dicp,AA,BB,AB,Output
& && &&&AB=A(1)*B(1)+A(2)*B(2)+A(3)*B(3)
& && &&&AA=A(1)*A(1)+A(2)*A(2)+A(3)*A(3)
& && &&&BB=B(1)*B(1)+B(2)*B(2)+B(3)*B(3)
在子程序中需要用到的自变量A(3)是一个一维数组,大小是3。
而您在主程序中设定的自变量A(1,Idicp)是一个二位数组。我就是这一点想不通,因为:这个A(1,Idicp)在主程序中我认为它对应了一个具体的数据:A(1,Idicp)= X2-X1。而在子程序中会用到A(1),A(2),A(3),这3个数据的,所以我老是觉得它们对应不上去。:)
还有一个问题是:在输出结果的时候,我希望输出的时候,没有重复的夹角出现比如line 1与 line2 之间的夹角,和line 2 与line 1之间的夹角是一样,只要输出一个就行。还有就是 同一直线的夹角也不用输出来。因为我后面还个程序输出的数据进行一些分析的。谢谢 Originally posted by tpp001 at
非常感谢版主您的帮忙,回复的也非常及时。我有一点疑问向您请教。
在调用子程序的时候,在主程序中式这样的写的:
Call Sub(A(1,Idicp),A(1,Jdicp),Output)
而在子程序中:
&&Subroutine Sub(A,B,Output ...
把上述几句话把原来的输出给覆盖了就可以了。
至于第一个问题,实参与虚参是如何传递的,建议你找本FORTRAN书看一下,里面都应该会有的。呵呵。 Originally posted by maomao1210 at
把上述几句话把原来的输出给覆盖了就可以了。
至于第一个问题,实参与虚参是如何传递的,建议你找本FORTRAN书看一下,里面都应该会有的。 ... 您好,首先谢谢您上面的程序,最近我才用这个程序来处理我的数据。出现了一些问题,我不太清楚是我的数据的问题还是在数学模型中出现了问题。当然程序肯定是没有问题的。
我把我的数据(输入文件和程序)传上来。请您帮我分析一下是什么问题。
我的输入文件中有27条直线,因为每条直线有2个点,所以我的输入文件中有54个点。当我设定只是计算开头的2条直线的夹角时,程序可以正常运行。可是当我计算开头的4条直线中任意2条直线的夹角时,程序出现错误。。。会是什么问题呢,我搞不懂?我在下面还把我的出错信息给贴出来
Originally posted by tpp001 at
您好,首先谢谢您上面的程序,最近我才用这个程序来处理我的数据。出现了一些问题,我不太清楚是我的数据的问题还是在数学模型中出现了问题。当然程序肯定是没有问题的。
我把我的数据(输入文件和程序)传上来 ... 问题应该不难的,建议你自己思考思考,找一下答案吧,如何? Originally posted by maomao1210 at
问题应该不难的,建议你自己思考思考,找一下答案吧,如何? 您好,我还是没有找到怎么解决问题的方法。我如果把
Output= Acos(Dicp)*180.0d0/3.换成Output= Dicp,就是不进行反三角函数的转换了,直接输出夹角公式计算的数值。这样这个程序就可以进行运行,可是只要加上进行acos这个计算,程序就是出错。我实在搞不明白?在网上查了有人说是有些数据可能不在acos的自变量范围内,可是我查看了Out=Dicp这个程序运行以后生产的数据都在-1~1之间,没有问题啊。Fortran中变量命名规则
变量是指在程序运行期间其值是可以变化的量。系统为程序中的每一个变量开辟一个存储单元,用来存放变量的值。
常量是分为类型的,而变量是用来存放常量的,因此变量也相应地区分为整型变量INTEGER、实型变量REAL、双精度变量DOUBLE
PRECISION、复型变量COMPLEX、逻辑型变量LOGICAL、字符型变量CHARACTER。在程序中应当说明哪些变量是整型变量,哪些变量是实型变量。变量在内存中所占的字节数和数据存储形式与相应类型的常数相同。例如,实型变量一般占4个字节,按指数形式存放。在程序中规定变量的类型可以用以下几种方法。
隐含约定:Fortran规定,凡以字母I,J,K,L,M,N六个字母开头的变量名,如无另外说明则为整型变量。以其它字母开头的变量为实型变量。可以将这个隐含约定称为“I—N规则”
,表示用I到N之间的字母开头的变量为整型。例如:I,J,IMAX,NUMBER,LINE,JOB,Kl为整型变量,而A,Bl,COUNT,AMOUNT,TOTAL,BOOK为实型变量。
类型指定:如果想改变“I—N规则”对变量类型的约束,可以用类型说明语句专门指定某些变量的类型。Fortran中有六个类型说明语句:
(1)INTEGER语句(整型说明语句)
(2)REAL语句(实型说明语句)
(3)DOUBLE PRECISION语句(双精度说明语句)
(4)COMPLEX语句(复型说明语句)
(5)LOGICAL语句(逻辑型说明语句)
(6)CHARACTER语句(字符型说明语句)
IMPLICIT语句(隐含说明语句)指定:可以用IMPLICIT语句将某一字母开头的全部变量指定为所需的类型,还可以用一个IMPLICIT语句同时指定几种类型。例如:
IMPLICIT INTEGER (A,C,T-V)
IMPLICIT REAL (I,J)
IMPLICIT INTEGER (A,B),REAL(I,K),INTEGER (X-Z)
以上三种方法中,以类型说明语句最优先,IMPLICIT语句次之,“I—N规则”的隐含约定级别最低。如下程序中IMAX变量为整型,而其它以I、J开头的变量为实型:
IMPLICIT REAL(I,J)
INTEGER IMAX
(2) 类型说明语句和IMPLICIT语句是非执行语句。
(3) 类型说明只在本程序单位内有效。
IMPLICIT语句和类型说明语句应该出现在本程序单位中的所有执行语句之前,其中IMPLICIT语句又应在所有的类型说明语句之前。
变量名使用的英文名是由(F77:6;F90:31)个字符(包含英文字母A-Z、数字0-9、F90:下划线
_)构成,且第一个字符必须是字母。其英文名的有效使用范围原则上限于一个程序单位之内(内部过程除外)。如下面的语句是错误的:
INTEGER ::
1A&&&&&&&&&&
! 不是以字母开头
INTEGER ::
A_name_made_up_of_more_than_31_letters&&
INTEGER ::
China:0&&&&&
! 含有不允许的字符
INTEGER ::
A-3&&&&&&&&&
! 减号在此是无意义的
Fortran没有规定保留字,即可以用函数名或语句定义符作变量名。但为了避免混淆,建议不要使用Fortran中已有特定含义的字作变量名。如SIN是正弦函数的名字,如果有以下语句:
PRINT *,SIN
则语句中的SIN是变量名而不代表正弦函数。系统会根据它后面有无自变量而作出判断,又如:
READ *,PRINT
此时PRINT是一个变量名而不代表“打印输出”的操作。系统会认定语句的第—个字READ为代表操作的语句定义符,而把PRINT作为READ语句中读数的变量。但在同一个程序单位(主程序或子程序分别是一个程序单位)中,变量名和函数名或语句定义符不能同名。以下是错误的:
A=SIN*SIN(2.0)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Fortran程序中的语句解析 精心收集的各类精品文档,欢迎下载!
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Fortran程序中的语句解析
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口跪求这个程序的提示是什么意思啊~ — 编程爱好者社区
主题:跪求这个程序的提示是什么意思啊~
[专家分:0]
D:\软件(二)\Fortran90\fortran&90\Projects\319\Text1.f90(2):&error&FOR2934:&lexical&error:&Invalid&characterD:\软件(二)\Fortran90\fortran&90\Projects\319\Text1.f90(5):&error&FOR3852:&syntax&errorD:\软件(二)\Fortran90\fortran&90\Projects\319\Text1.f90(5):&error&FOR1768:&missing&END&statement&or&missing&program&unit&(possibly&free-form&source&in&fixed-form&file)Error&executing&fl32.exe.li.exe&-&46&error(s),&0&warning(s运行一个fortran程序&&出现这种错误&是什么意思啊?&&我改如何修改呢?
本帖地址:&
回复列表 (共6个回复)
[专家分:23030]
错误1,不认识这个字符,可能是文件中出现了奇怪的字符。错误2,语法错误。要看这行的代码是什么了错误3,什么提示也没有46个错误,并不一点就是46个,你先解决第一个错误吧。前面的错误解决了,后面的错误很可能就没有了。先解决第一个错误。另外,fl32&貌似是很早的编译器了,应该不能支持中文路径,也就是D:\软件(二)\Fortran90\fortran&90\Projects\319\Text1.f90这里不能有中文的“软件(二)”,要么把这个文件夹改名,要么移动到其他路径下。
[专家分:14390]
这段时间偶尔上来看到有两个帖子提到fl32,&这个是什么编译器,&比powerstation4.0还要古老的编译器?
[专家分:23030]
FL32&就是&PowerStation&的核心
[专家分:0]
你好。我很久没有用过fortran了,我记得以前用fortran,会提示你错误出现在哪一行,可是我现在运行部提示了,这是什么原因啊?真心的谢谢你。
[专家分:23030]
双击错误提示
[专家分:20]
Fortran里面不应该出现中文,将你的&&软件&&改名,多用英文
您尚未登录,请登录后再回复。

我要回帖

更多关于 fortran简单程序 的文章

 

随机推荐