fortran第10章.ppt
《fortran第10章.ppt》由会员分享,可在线阅读,更多相关《fortran第10章.ppt(47页珍藏版)》请在三一文库上搜索。
1、Visual Fortran 90 程序设计,第10章 模块与接口,Visual Fortran 90 程序设计,10.1模块的定义,6.5 模块的应用举例,10.2 USE语句,10.3 接口,10.4 超载和定义操作符,10.1 模块的定义,1功能:提供大量共享符号常量、变量、派生类型定义和过程;即公用的信息可放入模块单位,各单位共享信息的途径: 虚实结合 模块单位,2模块单位写法:一般形式 MODULE 模块名 !模块单位定义语句 类型说明部分 CONTAINS 内部过程子程序1 内部过程子程序n END MODULE 模块名,注意:1. 模块是独立的程序单位(个数:0n个) 即模块名为
2、全局名:不与已有 的全局名同名 2. 模块名常以_MODULE作为后缀,提供共享符号常量、变量、派生类型定义,提供共享过程,例: MODULE MY_ MODULE REAL,PARAMETER:PI=3.1415926 CONTAINS SUBROUTINE SWAP(X,Y) REAL:TEMP,X,Y TEMP=X; X=Y; Y=TEMP END SUBROUTINE SWAP END MODULE MY_ MODULE,模块和子程序之间的区别: (1)模块应先定义。 (2)模块中无可执行语句 (3)模块不给其它单位调用, 而用USE语句引用,非执行单位 编译时完成 可执行语句只能在内
3、部子程序内,先输入,不能放在其它单位的底部,引用格式 1:引用模块中所有对象 use 模块名1,模块名2, 2:模块中对象更名共享 use 模块名,别名=模块内对象名 例:use exam, x=a,y=b x,y引用单位的局部名 a,b模块中的名 3:引用模块中部分对象 use 模块名,only:变量名表 例:use exam,only:a,b,各单位用USE语句共享模块中的信息,复制共享 (按名共享存储单元),10.2 USE语句,、USE语句位置: 单位定义语句之后,IMPLICIT NONE语句之前,程序单位的第二句,只能在模块内使用,5、可以对模块内说明的变量、派生类型及其成员的使用
4、范围进行限制。 加PRIVATE(专用)属性,模块以外的程序单元不能使用。 否则为PUBLIC (公用)属性。,通过虚实结合传递数据: FUNCTION AVER3(A,B,C) RESULT(AVER_VALUE) IMPLCIT NONE REAL :A,B,C REAL :AVER_VALUE AVER_VALUE=(A+B+C)/3.0 END FUNCTION FUNCTION MAX3(A,B,C) RESULT(MAX_VALUE) IMPLCIT NONE REAL :A,B,C REAL :AVER_VALUE MAX_VALUE=A IF(BMAX_VALUE)MAX_VA
5、LUE=B IF(CMAX_VALUE)MAX_VALUE=C END FUNCTION,例6-8读入3个数,调用函数AVER3求平均值,调用函数MAX3求最大值,!主程序 PROGRAM AVER_MAX_1 IMPLICT NONE REAL:A,B,C REAL AVER,MAX3 READ *,A,B,C PRINT *,AVER3(A,B,C),MAX3(A,B,C) END PROGRAM,数据传递:由虚实按顺序共享存储单元,各单位共有的信息,MODULE EXAM_MODULE IMPLICIT NONE REAL:A,B,C END MODULE EXAM_MIDULE FUN
6、CTION AVER3() RESULT(AVER_VALUE) USE EXAM_MODULE REAL :AVER_VALUE AVER_VALUE=(A+B+C)/3.0 END FUNCTION FUNCTION MAX3() RESULT(MAX_VALUE) USE EXAM_MODULE REAL :AVER_VALUE MAX_VALUE=A IF(BMAX_VALUE)MAX_VALUE=B IF(CMAX_VALUE)MAX_VALUE=C END FUNCTION,利用模块实现数据的共享:,共享信息 先定义,USE语句引用,USE语句引用,!主程序 PROGRAM AVE
7、R_MAX_1 USE EXAM_MODULE IMPLICIT NONE REAL AVER,MAX3 READ *,A,B,C PRINT *,AVER3(),MAX3() END PROGRAM,USE语句引用、 位置:第二句,数据传递:由模块按名共享存储单元,模块的内部过程也可供引用模块的各程序单元使用。 MODULE EXAM_MODULE IMPLICIT NONE;REAL:A,B,C CONTAINS FUNCTION AVER3() RESULT(AVER_VALUE) REAL :AVER_VALUE AVER_VALUE=(A+B+C)/3.0 END FUNCTION
8、FUNCTION MAX3() RESULT(MAX_VALUE) REAL :AVER_VALUE MAX_VALUE=A IF(BMAX_VALUE)MAX_VALUE=B IF(CMAX_VALUE)MAX_VALUE=C END FUNCTION END MODULE EXAM_MIDULE PROGRAM AVER_MAX3 USE EXAM_MODULE READ *,A,B,C PEINT *,AVER(),MAX3() ENDPROGRAM,!定义模块,!定义主程序,共享的内部过程,共享的变量,引用模块,内部过程优先,调用模块过程,程序阅读:先读模块单位及各单位的USE, 画共
9、享表(按名结合),再读主程序.,MODULE A1 COMPLEX:X,Y ENDMODULE SUBROUTINE COMP(A,B) USE A1 COMPLEX A,B A=X+Y B=X-Y END SUBROUTINE,PROGRAM MAIN USE A1 X=(3.0,4.0) Y=(4.0,3.0) CALL COMP(X,Y) CALL COMP(X,X) CALL COMP(Y,X) PRINT*,X,Y END (-3.000000,-4.000000) (10.00000,11.00000),编译时完成,两种数据传递方式可混合使用,使主调程序编译时能通过接口块了解到被调
10、外部过程的名字、虚元名字及它们的类型等信息,简单接口块的作用,10.3 接口(Interface Block ),各独立程序单位分开编译 内部子程序无接口,最简接口块结构形式,INTERFACE 被调程序的单位定义语句 说明语句 单位结束语句 END INTERFACE,写在主调程序的类型说明语句之前,IMPLICIT语句之后,接口块的位置,1、功能简单的程序,不必写接口块。 2、如有接口,主调程序不必再说明外部函数名的类型。,有关接口块的说明,例如:利用外部函数完成X3的计算。 FUNCTION Func(X)Result(F) REAL: X,F F=X*3 END FUNCTION PR
11、OGRAM TEST IMPLICIT NONE REAL:X,Func PRINT *,ENTER x: READ *,x WRITE(*,*) Func(x) END PROGRAM TEST,可不写接口块, 但主调程序需说明函数名类型,例如:利用外部函数完成X3的计算 FUNCTION Func(X)Result(F) REAL: X,F F=X*3 END FUNCTION PROGRAM TEST IMPLICIT NONE INTERFACE FUNCTION Func(X)Result(F) REAL:X,F END FUNCTION END INTERFACE REAL:X P
12、RINT *,ENTER x: READ *,x WRITE(*,*) Func(x) END PROGRAM TEST,有接口块无需说明函数名类型,否则错误,1、接口块的位置 2、接口块的组成,补充:下例情形必须使用接口块,1、实元用关键字变元 2、实元对应缺省的可选变元。 3、用一个类属名调用过程。 4、外部过程扩展了赋值号的使用范围(超载赋值)。 5、一个外部函数使系统中的内在操作符扩展了原有的功能(超载运算)。 6、一个外部函数使系统中的内在函数扩展了原有的功能(超载函数)。 7、调用的外部过程是一个函数,且函数结果是一个数组;或被调用过程中的虚元是一个假定形状数组、一个指针变量、一个
13、目标变量。,补充: 实元用关键字变元,INTERFACE FUNCTION F(X,Y,Z)RESULT(F_RESULT) INTEGER:F_RESULT,X,Y,Z END ENDINTERFACE READ*,M,N K=F(X=M,Z=L,Y=N) PRINT*,K,L END FUNCTION F(X,Y,Z) RESULT(F_RESULT) INTEGER:F_RESULT,X,Y,Z F_RESULT=X+Y;Z=X-Y END,调用形式为关键字变元 虚元名=实元表达式,优点: 不需考虑虚元的次序,INTERFACE FUNCTION F(X,Y,Z)RESULT(F_RES
14、ULT) INTEGER:F_RESULT,X,Y,Z END ENDINTERFACE READ*,M,N K=F(M, N, Z=L) K=F(M, Z=L,Y=N) PRINT*,K,L END FUNCTION F(X,Y,Z) RESULT(F_RESULT) INTEGER:F_RESULT,X,Y,Z F_RESULT=X+Y;Z=X-Y END,混合使用:关键字变元前面的所有实元都必须与相应的虚元一一对应,一旦使用一个关键字变元,其后面的变元也必须使用关键字变元,补充: 通过接口块更改虚元名称,PROGRAN MAIN INTERFACE SUBROUTINT S(XX,YY,
15、ZZ) INTEGER:XX,YY,ZZ END ENDINTERFACE READ*,M,N PRINT*,S(XX=M,YY=N,ZZ=L) END,SUBROUTINR S(X,Y,Z) INTEGER:X,Y,Z Z=X+Y END,用接口块改变虚元的名称。必须保持新、旧虚元名的对应位置不变。,补充: 可选择变元,可选择变元: 虚元有OPTIONAL属性,便是可选变元, 虚元没有OPTIONAL属性,是必选变元。,可选变元作用:调用时可选变元可以有对应的实元, 也可以无对应的实元。,PRESENT(虚元名):用来检查虚元是否结合到对应的实元,结合到则返回为“真”。,PROGRAM MA
16、IN INTERFACE SUBROUTINE S(Y,X) INTEGER :X INTEGER,OPTIONAL:Y END ENDINTERFACE INTEGER:A,B A=2;B=3 CALL S(X=B) CALL S(X=B,Y=A) END,SUBROUTINE S(Y,X) INTEGER:C,X INTEGER,OPTIONAL:Y IF(PRESENT(Y)THEN C=X+Y ELSE C=X ENDIF PRINT*,C END,虚元y有OPTIONAL可选属性, 调用时可无对应的实元,用来检查虚元y是否在程序执行时结合到实元。,3 5,例:编写一个函数子程序。根据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fortran 10
链接地址:https://www.31doc.com/p-2892097.html