《Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx》由会员分享,可在线阅读,更多相关《Fortran95第三篇--计算任务的剖分与组合--第12章--程序的单位.docx(21页珍藏版)》请在优知文库上搜索。
1、第三篇计算任务的剖分与组合从前,有两个及匠,一个叫发拉,一个叫Ia普斯。两人都很受族客的欢迎,他们各自的工场中的电话总是响个不停,因为老有新主顾上门。不过,也拉发了大财,坦香斯却越来越穷,靛终连店铺裁给亏没了.这是为什么呢?他们做的表裁是由100O个家件蛆成“坦瞥斯做表的方式是连坡地把一只表从头做列足,tt尚表袋完一只次就不辞不中途放下(比如说要去接客户电话了),那么装了一半的我就会立即我掉,又得从我装起:Si客们越再爱他的哀,他的电话就越多,也就越难得列足移的不板打断的时网来装成一只木.笈拉做的火并不比妲普斯的角洁。但他及过设计,用十个事件笈成一个加件:十个姐件又可装成更大的炉件。十个大轨件
2、构成的系统就是按只衣。因此,当左拉不得不放下装了一部分的表去接电话时,他只领失了一小部分活儿,他装表所用工时只是坦普斯所用工时的一个零头。在这个寓言里面,我的中心w炒光.,具有用难控的系统就好是实行层圾.结构的型式而区嫉好构有一些与系统的具体内容无关的共用性质.我将论证说,层级结构是构造田中事物的战扰师们所运用的主要结构方式之*-IISimOnWTheSacnccsoftheArtificial一个计算任务可以很简洁.运用几个讲句进行描述,执行之后就可以得到结果,但是假如说我们人类运用计W机只是进行那种简洁的计算,明显是奢侈.而困难的计W任务,则和任何困难M物一样,具有特别浩大的内部结构,人类
3、解决困理问遨的一般思跖,就是把一个大的结构分解为相对比较小的结构,假如可能就始终分解到特别简洁的结构,分别斛决了那些简洁结构的何SS,依据我们分解大问遨的逻轲,也就解决了起先的困难问遨-如何运用程序语言来表达这个解构的思路,就是本篇我们要探讨的主要论胭。首先我们探讨一个FORTRAN程序所可以具有的结构,依据这个语言对程序结构模本的规定,我们就可以规划相W的针对计克任务的问跑解构方式.所谓FORTRAN程序的结构,就地个FORTRAN程序可以包含那些程序单位,然后这些单位又必需如何组装在起。所以我们分类探讨了FORTRAN的程序单位之后,就须要探讨数据流与指令流是如何进行不同程序班位之间的通讯
4、的,通过这种通讯,一个由很多程序雎位组成的FORTRAN程序就构成了一个有机的整体,或原了被支解的问册的原来结构,特殊的,我们还须要探讨最为重要的程序单位,就是过程,它的可执行程序单位.的主体.其中FORTRAN谙有以标准形式给出的固行过程,相当于为解决常见计算问遨而打算的常用J1.具.娴熟运用它们可以达到事半功倍的效果.第12章程序的单位一个H)RTRAN程序可以由那些单位组成,在第一篇以及第4章都巴经简洁涉及过.在这里我Q要详尽地探讨这个问题.特殊是给出每种程序单位的结构与功能.12.1程序单位FORTRAN的程序单位分为两大类: 可执行程序单位; 不行执行程序单位.其中可执行程序单位,用
5、来执行一个完整的功能,包括: 主程序: 外部南致子程序: 外部于例行程序子程序.不行执行程序单位,用来为其他程序单位供应定义,包括: 模块程序单位: 数据块程序单位.因此上面的五种类型的程序单位构成了ToRTRAN程序的基本单位,不过在后面我们会看到,数据块程序单位属于早期版木的遗留物,完全是多余的, 个完整的FORTRAN程序至少须要一个主程序,而且也只能有一个主程序.一般说来,要完成一个完整的计算任务,除了一个主程序之外,往往还须要有函数以及子例行程序作为协助,这时,主程序的作用就还包括驱动与管理这些作为过程的外部子程序,使得它们构成一个整体,从而完整地解决相关计修何物.模块程序单位主要是
6、供应应漏程者用来组织程序元素的,一个模块程序单位包含了如下几个方面的内容: 数据声明; 派生类型定义: 过程界面信息: 供其他程序单位运用的子程序定义,因此这样一个程序单位本身不是可执行程序单位。数据块程序单位用于给出命名公用块里面的变出的初始值,因此同样不是可执行程序单位。由于FORTRAN的现代版本引入了模块结构,而模块能够供应全局的数据初始化,因此数据块程序单位几乎何以说是多余的。由于在第13章我们构特地探讨过程以及过程的应用,因此属于过程的外部函数子程序和外部予例行程序f程序,在本章都只是简略说明,须耍具体探讨的地主程序利模块.谱句类型与旌序单位之间的各种程序单位里面并不是能够运用任何
7、FORTRAN谙句.兼容性在下面的衣中)以说明。121语句与程序单元的兼容性语句主程序模块说明部分数据块外部于程序模块子程序内85子程序界面体USE语句可可可可可可可ENlTiY用句否否否可可否否FORMAT语句可Sf.-可叫T否几种出明语句”可可可可灯1DATA语句可可可可可1否派生类型定义可可可BJ可可可界面块可可否可可可可语句函数”可否S可可可否CONTAINS可可三可可否否可执行语句可否否可可可否留意:*几种声明语句包括:PARAMETER语句,1MP1.laT语句,类型声明语句以及说明语旬. ifi句函数语句M于过时语成分.一个FORTRAN程序总是从主程序的第个可执行语句起先运行,
8、在第三章我们已经探讨过一个完整FORTRAN程序的结构.在下面的图12-1中,我们再给出一个完整FORTRAN程序的示意图,它包含了一个主程序,一个模块,以及两个子例行程序.PROGRAMtimekeeperUUQCtSSo*vgxCA1.1.TO0CTNEUF)ENDPROGRAMTIMEKEEPERSubroutinoparts&(PARTKOE1.PRCUSEACCWSsoRV_BoXENDSUBROUTlSttPARTSMOOU占ACCESSORYBOXDSOMOD1.1.EACCCSSORVgXSUBROUTINGTOOUSCVC三)USECCSSORVBOXCA1.1.RTS(FA
9、1.1.1T.*C.22ENDS1.ROUTNGTOO1.112-钟&M作树侪的结构在上面的例子里面,我们假设在装配一块钟表时.零件装配与工具配套分别由两个徒弟完成居么等负说工具配套的徒弟把零件都放式在适当的工具旁边的时候,就可以让钟衣匠起先总的钟表装配工作了.因此模块ACCESSORY_BoXM件箱)里面包含了于例行程序PARTs(零件)与ToO1.a具)所须要的一切数据与过程信息,主程序调用了子例行程序TOO1.而主程序本身不须要模块ACCESSORY_BoX里.面的信息。12.2主程序主程序说明白整个FORTRAN程序的逻轼结构,同时整个程序的运行就是从主程序的第一个可执行语句起先的。不
10、过从形式上看,一个主程序和外部子程序其实的特别类似的。一个主程序包括如下三个基本部分: 说明部分.这个部分定义了程序的数据环境。 运行部分.整个程序从这个部分的第一个可执行语句起先,该部分给出了整个程序运行的逻辑结构。 内部子程序部分。处于主程序内部的与主程序共享数擀的过程.下面我们分小节说明主程序的说明部分和运行部分,由于内部子程序部分由一个或多个内部过程组成,而内部过程的探讨见12.3,因此在12.2珞过。终止主程序运行的方式有如下两种: 在程序的随意位置执行STOP语句,就能即刻终止整个程序.所谓前意位置.包括组成程序的随意程序单位的随意位置。 程序的运行到达主程序的最终一个语句.12.
11、2.1主程序的组织主程序的形式(RUOl)如下:fPRCXjRAMpforanvwmcIspecification-partIcxccution-panItnlemul-ubpr(run-nrlENDIPKOGRAMpngran-!une卜面是一个,M响沽的FORTRAN程序:【例3】END下面是一个略微有意思点的最简沽程序:【例12-2】PR()GRAMHIMuNT,“HE1.1.O”END主程序的一殷规则如下: PRoGRAM语句作为主程序的程序头是可选的.但是其他的程序单位都必需具有科序头. 假如程序名称出现在END谱句当中的话.那么该名称必需和PRoGRAM-甸里面的名称一样,井且放置
12、在关键诃的后面.不能单独出现END语句当中. 主程序不供应呼元. 主程序不能在任何位置被引用,也就是说,主程序不能被干腌或间接地递归运行. 主程序不能包含RETURN语句和ENTRY语句,不过主程序里面的内部过程可以包含RETURN语句。12.2.2 主程序的说明部分主程序的说明部分主要就是用来描述程序的数据环境.主程序里面所能桃包含的谙句类型见表12-1.具体列出如下表12-2:*12-2主程序说明部分允许运用的语句A1.1.OCATAB1.EPARAMETERCOMMONPOINTERDATASAVEDIMENSIONTARGErEQUIVA1.ENCEUSEEXTERNA1.派生类型定义
13、H)RMA界面块IMP1.ICITi科句由数i句INTRINSIC类型泗明追句NAMtlJST主程序的说明部分的一般规则如卜。 OPTIONA1.以及INTENT屈性或谱句都不能在主程序的说明部分出现,因为它们都只能应用于喳元. 可访问性说明PUB1.IC以及PRlVATE都不能出现于主程序,因为它们都只能应用于模块内部。 在主程序里面,动态对象没有意义 尽管在主程序里面可以运用SAVE属性或语句,但它们在主程序里面并没有实际的作用。12.2.3 主程序的运行部分主程序的运行部分的可执行谙句构成,能蜂出现在主程序的运行部分的语句列出如下表12-3所示;表123主程序运行部分允许运用的语句A1.
14、1.OCATEoBACKSPACEIFCA1.1.IF玷构CASE结构INQUIREC1.OSENU1.1.IFYCONTINUEOPENCYC1.EPRINTDATAREADDEA1.1.OCATEREWINDDO结构STOPENDWHEREENDFI1.HWHERE”,构ENTRYWRITEEXIT算术IF语句FORI,I.从俗语句H)RA1.1.fft构计算GOToift句FORMAT指针Wttt15句12.3内部过程内部过程和外部过程的主要差别就在于它们的的位置不同:内部过程必需封袋在主程序或其他过程子程序内部,这就导致以下后果: 内部过程的名称是局部的而不是全同的: 内部过程只能被包含了它的定义的程序单位所引用: 内部过程能够访问它的宿主的数据时象: 内部过程可以递归,不能包含ENTRY语句,也不能作为实元传递。构造内部过程的主要绿由如下: 内部过程供应了能膨很便利地访问宿主环境的过程, 内部过程供应了一种具有语句函数功能的多语句形式。 便干模块设计以及具有更好的软件工程效能.内部过程之所以能峪提岛平安性以及敏播性,是因为我界面特别消她.宿主