分享
分享赚钱 收藏 举报 版权申诉 / 56

类型fortran课件 第10章_11.ppt

  • 上传人:gnk289057
  • 文档编号:7928467
  • 上传时间:2019-05-30
  • 格式:PPT
  • 页数:56
  • 大小:872.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    fortran课件 第10章_11.ppt
    资源描述:

    1、1,第 十 章 Module及其面向对象,2,11-1 结构化与面向对象,结构化与面向对象是目前程序设计中最常使用的两种编写概念,3,11-1-1 结构化程序设计概念,结构化程序代码分成不同的程序模块 做“层次分析”。 循环、流程控制形成下一个层次。相同层次的程序代码视为属于同一的程序模块。 同一模块的程序代码,执行顺序都是由上至下,一行行来进行。遇到循环时,以模块为单位重复执行。 下一个层次的语句向后错位编写,以提高可读性。,4,Program main 第一层程序代码Do while(.true.) 循环形成下一个层次、另外一个模块End do 离开循环后回到第一层的程序代码If () t

    2、hen 条件成立的程序模块Else 条件不成立的程序模块End if 离开if后,回到if外面的模块,5, 在select外面的程序模块Select case (a)Case (1) 第一个case的程序模块 Case (2) 第二个case的程序模块 End select 回到select外面的程序模块 第一层次的程序代码 End program,6,11-1-2 面向对象程序设计概念,将程序代码封装:为用户提供接口,使用上会比较安全;有公开和不能被外界使用的程序代码及数据(比如银行的内部帐目)便于继承和重复使用程序代码。,7,11-2 再论Module,第8章中介绍过的部分功能: Modu

    3、le里面可以声明的变量,经常用来声明程序中所需要的常量、全局变量 Module里面可以声明自定义类型,再经过use命令让程序中的每个函数都能使用这个类型Module里面可以编写函数,通常会把功能相关的函数放在同一个Module中。在Module外调用这些函数,使用Use命令。 Module里面的函数,可以使用同一个module中所声明的变量。所以Module里面的函数,可以通过Module里面的变量来传递数据。调用时可以减少需要使用的参数的数目。,8,11-2-2 PUBLIC, PRIVATE,Module 中的数据和函数,通过PUBLIC 和 PRIVATE,区分成公开使用及私下使用的。

    4、例: 模拟银行提款机,可以存取和查询,但是不能从外部改变库存金额。,!库存金额,只能在Module bank里被使用,9,10,11,例: 较实用的银行操作程序: private数据和函数,内部帐目和账本,12,13,14,1)通过Pivate来保护内部的数据和函数,只能在module内部使用, 确保不会因为用户的误用而出错 2)没有特别声明的数据和函数默认为Public,15,11-2-3 USE,1)Module中可以使用另外的Module,并继承了其中的公开部分。Module A Implicit noneInteger : a, b End moduleModule BUse A !使

    5、用另外的Module End moduleSubroutine sub()Use B !函数中要经过use才能使用编写好的module,16,2) 可以使用多个Module 3)使用多个Module,遇到变量名称或函数名称重复时,use命令后可以临时把Module里面的变量或函数名称改名。 Module AImplicit none Integer va End moduleModule BImplicit noneInteger va End module,Program mainUse A, aa=va ! 把module A 中的变量va改名 !为aa来使用Use BImplicit n

    6、one,17,4)可以只使用Module中的部分,应用于多个变量重复的情况,Module AImplicit noneInteger va, vb, vc End moduleModule BImplicit noneInteger va, vb End module,Program mainUse A, only: vc !只用Module A 中的变量vc !only 也可以用来与临时改名操作同时用 !use A, only: c=vcUse BImplicit none,18,例题:求解ax+b=0; ax2+bx+c=0, 分别用两个module MA, 和Module MB,modu

    7、le MB包含module MA.,!继承了module A 中变量a和bd=b*b-4*a*c,19,!继承了module A 中变量a和b,并扩充了功能,20,有无c,所采用的计算函数不同,用户需要知道getx( )和getx2( )名称和作用。为了更加方便用户,其中interface的重载功能,由程序来根据输入参数来选择相应的函数,21,11-3再论INTERFACE,INTERFACE 与MODULE : 函数接口说明, 说明函数参数及返回值的类型 11-3-1同名函数的重载(overload)在程序代码中同时拥有多个名称相同,但是参数类型、数目不同的函数,程序会自动根据输入参数,来决

    8、定要调用哪一个函数。在Module 中使用Interface ,可以用来定义一个虚拟的函数名称。,22,例:输出整数或字符串,23,24,例题:求解ax+b=0和 ax*2+bx+c=0, 参数分别为a, b, 或a, b, c,25,26, 11-3-1同名函数的重载(overload),重载固有函数。 例,自定义固有函数sqrt( i), 使之参量可以是整型,27,28, 11-3-2自定义操作符,在Module中,通过interface ,可以使用操作符(+,-, *, /, , =, /=, =等),对自定义的类型进行虚拟操作。 例: Interface operator(+) ! 在

    9、程序代码中,使用a+b时,若a和b的参数符合以下任何 ! 函数中两个参数类型,会调用其中的一个函数来执行Module procedure add1Module procedure add2 End interface,29,1)以运算符号作虚拟函数名称时,interface后面要先加上OPERATOR,在用()将运算符号包起来。 2)在INTERFACE中等待候选的函数,必须明确显示每个参数的属性INTENT 3) 对于虚拟运算操作,操作符函数的参数类型不能是内部定义的参数类型,即不能与语言的内部操作相冲突。, 11-3-2自定义操作符,30,31,program mainuse MAimpl

    10、icit nonetype(ta) : a,binteger : i=4, j=5, ca%a=1b%a=2c=a+bwrite(*,*) cc=i+jwrite(*,*) c end program,32,例:黄先生在这月的5日及20日分别约许律师谈了1小时45分,2小时18分。请问黄先生这个月花了多少时间和他的律师进行了讨论。,33,34,制作加减乘除的INTERFACE方法如下:,Interface operator(+) or (-) or (*) or (/)Module procedure End interface 待选的函数有两个参数,一个返回值,参数不一定都要是自定义类型,例

    11、如a+1.5, a为自定义的时间类型,1.5是浮点数。,35,制作逻辑判断的INTERFACE方法如下:,Interface operator() or (=) or (=) or (/=)Module procedure logical_function_nameModule procedure End interface* 在逻辑判断的interface中,所有的候选函数,返回值都是逻辑值,36,制作等号“=”的interface比较不同,Interface assignment (=)Module procedure End interface定义等号=的Interface中,Modul

    12、e Procedure所列出的候选函数都必须是子程序,而不是函数。每个子程序都会接收两个参数,第一个参数是等号左边的变量,第二个参数是等号右边的变量。当程序执行代码a=b, 就等于call sub(a,b), 子程序要重新设置第一个参数a.,37,自定义类型并不一定需要自定义等号的虚拟函数,在程序代码中就可以使用等号。默认的等号会把等号右边的变量内容完全复制一份给等号右边的变量。但是某些情况下仍然需要:1)当类型不一致时,仍需定义。如令自定义时间类型变量a, a=1.5. 2)当自定义类型中含有指针变量,默认的=是将两个自定义类型的变量指向同一个内存,即=。如果希望的是,等号两边的指针先配置有

    13、内存,而将等号右边指针所指的内存地址中的数据复制到左边指针的内存中,38,39,40,任意制作Fortran 标准中不存在的操作符,Interface operator(.new_operator.)Module procedure func1Module procedure func2 End interface例如在制作向量类型的点乘,使用interface operator(.dot.) , 来定义一个.dot.操作符,则程序中可用:A=b .dot. c,41,interface operator(.dot.)module procedure func1end interfacecon

    14、tainsfunction func1(a,b)type(vector), intent(in):a,btype(vector) func1func1=vector(a%a*b%a,a%b*b%b,a%c*b%c)end function,42,例: ex1108.f90 较完整的对时间类型操作的实例程序,43,44,45,bug,46,47,48,例: 自定义操作符的应用,计算分数(2/3)的运算,49,50,51,52,53,54,55,56,作业 :,1、用INTERFACE定义虚拟函数area,当仅输入一个参数时(整数或浮点数),把参数作为半径,求圆的面积;如果是两个参数(整数或浮点数)把参数作为矩形的两个边,求矩形面积。2、课本11.4,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:fortran课件 第10章_11.ppt
    链接地址:https://www.docduoduo.com/p-7928467.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开