Fortran95第三篇 计算任务的剖分与组合 第12章 程序的单位
- 格式:docx
- 大小:131.95 KB
- 文档页数:22
第14章固有过程固然,我们已经能够做到运用FORTRAN 95来描述任何的计算任务,因为FORTRAN 95所提供的数据类型,固有运算,派生类型,自定义运算,以及构造函数与子例行程序的方法,都足以使得我们应付任何的计算问题。
不过FORTRAN 95标准还提供了大量的科学计算的常规计算与函数,都可以作为固有过程直接使用,而不需要我们自己来编写源码。
这就好像对于一个汽车装配师,除了给他提供螺栓,轴承之类的标准零件,还给他提供更高层次的标准配件,例如各种型号的发动机,电机之类。
因此熟练掌握固有过程,将给我们带来如虎添翼的感觉。
FORTRAN 95把固有过程作为标准来提出,就意味着任何的FORTRAN 95的编译器实现版本,都必须能够提供它们:115个固有过程,其中包括109个固有函数和6个固有子例行程序。
当然不排除很多的编译器还提供额外的固有过程。
正是由于固有过程是属于FORTRAN 95的标准内容,因此和固有运算,例如+,一样,总是“随叫随到”,无论在哪个程序单位内部,只要使用某个固有过程的名称,就等于调用了该固有过程。
不过,如果它的名称被用户定义的函数或子例行程序所“侵占”,那么在下面的情况下,被调用的将是用户自定义的函数或子例行程序而不是固有过程:●该自定义函数或子例行程序的界面是显式的;●该自定义函数或子例行程序出现在EXTERNAL语句当中;●该自定义函数属于语句函数。
当然上述的名称被侵权的有效范围只是该自定义函数或子例行程序的作用域。
相应的,固有过程也就只能在下面的情形下夺回被侵占的名称:●不存在使用该名称的语句函数;●它的名称出现在INTRINSIC语句当中;●相应的用户定义的过程的界面是隐式的。
例如在一个模块或一个内部过程里面,由于它的界面是显式的,那么固有过程的名称就能够被侵占,除非固有过程的名称出现在一个有效的INTRINSIC语句当中。
下面我们主要讨论固有过程的按照功能的分类,以及每个种类的固有过程所能够完成的计算任务。
fortran95程序设计
Fortran95一门面向应用的编程语言,用于开发科学和工程应用软件,它继承了Fortran77的优点,又增添了很多新特性。
这些特性大大改善了编程效率,使Fortran95程序设计更加灵活、更具有扩展性。
首先,Fortran95可以使用动态数组和变量名数量(变量名的长度从6个字符提高到32个字符),这样就可以更加清楚地定义问题和程序功能。
此外,Fortran95中允许使用数据类型,它允许开发者使用自定义数据类型,这样可以更加清楚地描述程序的结构和功能。
其次,Fortran95支持更多的编程模型,如结构化编程,面向对象编程,组件设计,它使程序设计变得更具灵活性,能够更有效地编写程序代码,从而提高程序的执行效率。
此外,Fortran95还提供了许多存储器管理的功能,以更好地实现内存的动态分配和释放,使程序运行更快。
它还提供了一些语言特征,如变量的定义和数组的声明,能够更好地维护程序的可读性和可维护性。
另外,Fortran95还具有跨平台功能,允许用户在不同的操作系统之间迁移程序,以及在不同的系统上并行运行程序,这些特性也可以提高程序的性能。
总之,Fortran95拥有许多功能,可以提升程序设计的效率,使软件开发变得更具可移植性和可扩展性。
正因为有了这些优点,Fortran95有着广泛的应用,为科学和工程软件开发提供了强大的技
术支持。
Fortran95简介-全文版Fortran95簡介-全文版By陳鯨太FORTRAN的演進FORTRAN的起源,要追溯到1954年IBM公司的一項計畫。
由JOHN BACKUS 領導的一個小組,嘗試著在IBM 704電腦上面發展一套程式,它可以把使用接近數學語言的文字,翻譯成機械語言。
這個計畫在剛開始並不被大家看好,但他們在1957年交出了成果,也就是第一套FORTRAN編譯器,FORTRAN語言也就因此誕生了。
FORTRAN語言的執行效率普遍的令各界滿意,它證明了這項計畫的可行性,也成為第一個被廣泛使用的高階語言。
FORTRAN的名字來自於英文的FORMULA TRANSLATOR這兩個字,而這兩個字恰是數學公式翻譯器的意思。
舊版的FORTRAN77是在1978年由美國國家標準局(ANSI)所正式公布的,之後改版有1992年提出的FORTRAN90以及1997年的FORTRAN95,本文是為了FORTRAN 95所撰寫。
編譯器簡介1、VISUAL FORTRANVISUAL FORTRAN一開始是起源於MICROSOFT的FORTRAN POWERSTATION 4.0,這套工具後來賣給DIGITAL公司來繼續發展,下一個版本稱為DIGITAL VISUAL FORTRAN 5.0,DIGITAL後來被COMPAQ合併,所以接下來的6.0及6.5版就稱為COMPAQ VISUAL FORTRAN。
而COMPAQ目前又跟HP合併,也許下一個版本會稱為HP VISUAL FORTRAN。
VISUAL FORTRAN被整合在一個叫作MICROSOFT VISUAL STUDIO的圖形介面開發環境中,VISUAL STUDIO提供一個統一的使用介面,這個介面包括文書編輯功能,PROJECT的管理、除錯工具等等,所以在使用上其實跟上學期的VISUAL C++滿類似的,同學們上課用過VISUAL C++,對VISUAL FORTRAN應該不會陌生。
fortran 95程序设计
Fortran 95程序设计是一门针对科学计算和工程学科的高级编程语言。
这门语言的设计目的是为了提供一种简洁、高效、易于实现和易于维
护的编程环境,以便于开发出更高质量的科学计算和工程解决方案。
Fortran 95的特点之一是其输入输出,因为它可以使用多种方式输入
和输出数据,使程序的编写更加简单而不失灵活性。
另一个特点是其
令人宜人的书写风格,使得代码的可读性和可维护性得到了更好的保障。
此外,Fortran 95还支持模块化编程,由于模块被编写为独立的
实体,因此可以更好地调试和修改源代码。
在Fortran 95代码中,程序员使用各种算法和数学技术来解决问题。
这门语言不仅提供了一些基本的算法和数据结构,还支持数组操作、
字符串操作、位操作等高级操作。
它的函数式编程能力也很强,可以
使程序更加高效、简洁和易于维护。
虽然Fortran 95在以往的几十年中已经被不断地改进和扩展,但是它仍然存在一些问题。
例如,它只支持有限的异常处理机制,无法处理
不同层级的异常。
此外,一些新的编程语言,如Python和R,已经逐渐取代了Fortran在科学计算和工程学科中的地位。
总之,Fortran 95程序设计是一门高级编程语言,具备简洁性、高效性、易实现性和易维护性的特点。
虽然它可能存在一些缺陷和限制,但是对于需要高效可靠的科学计算和工程解决方案的行业和领域,Fortran 95仍然是一个很好的选择。
fortran952003程序设计Fortran 95是Fortran编程语言的一个版本,它在1997年被正式发布。
它继承了Fortran语言的数值计算能力,并引入了许多现代编程特性,使得Fortran 95成为一个功能强大的科学计算语言。
以下是Fortran 95程序设计的一些基础要点:1. 程序结构Fortran 95程序由一个或多个程序单元组成,这些单元可以是子程序、函数或模块。
程序的开始和结束分别由`program`和`end program`语句标记。
2. 变量声明在Fortran 95中,变量必须在使用前声明其类型。
Fortran 95支持多种数据类型,包括整数、实数、复数、逻辑和字符类型。
例如:```fortraninteger :: ireal :: xlogical :: flagcharacter(len=10) :: name```3. 常量和参数Fortran 95允许定义常量和参数,它们在程序中只能被赋值一次。
常量使用`parameter`关键字定义:```fortranparameter (pi = 3.14159)4. 控制语句Fortran 95提供了多种控制语句,包括条件语句(`if`)、循环语句(`do`、`while`)和选择语句(`select case`)。
```fortranif (x > 0) thenprint *, 'x is positive'elseprint *, 'x is non-positive'end ifdo i = 1, 10print *, 'Iteration ', iend doselect case (ch)case ('A', 'B', 'C')print *, 'Grade A, B, or C'case defaultprint *, 'Other grade'end select```5. 数组Fortran 95支持多维数组,并且可以声明数组的维度。
第三篇计算任务的剖分与组合从前,有两个表匠,一个叫霍拉,一个叫坦普斯。
两人都很受顾客的欢迎,他们各自的工场中的电话总是响个不停,因为老有新主顾上门。
不过,霍拉发了大财,坦普斯却越来越穷,最后连店铺都给亏没了。
这是为什么呢?他们做的表都是由1000个零件组成。
坦普斯做表的方式是连续地把一只表从头做到尾,如果尚未装完一只表就不得不中途放下(比如说要去接客户电话了),那么装了一半的表就会立刻散掉,又得从头装起。
顾客们越喜欢他的表,他的电话就越多,也就越难得到足够的不被打断的时间来装成一只表。
霍拉做的表并不比坦普斯的简单。
但他经过设计,用十个零件装成一个组件。
十个组件又可装成更大的组件。
十个大组件构成的系统就是整只表。
因此,当霍拉不得不放下装了一部分的表去接电话时,他只损失了一小部分活儿,他装表所用工时只是坦普斯所用工时的一个零头。
…在这个寓言里面,我的中心思想是,具有复杂性的系统最好是采取层级结构的形式,而层级结构有一些与系统的具体内容无关的共同性质。
我将论证说,层级结构是构造复杂事物的建筑师们所使用的主要结构方式之一。
----H.Simon[1]《The Sciences of the Artificial》一个计算任务可以很简单,使用几个语句进行描述,执行之后就可以得到结果,但是如果说我们人类使用计算机只是进行那种简单的计算,显然是浪费。
而复杂的计算任务,则和任何复杂事物一样,具有非常庞大的内部结构,人类解决复杂问题的一般思路,就是把一个大的结构分解为相对比较小的结构,如果可能就一直分解到非常简单的结构,分别解决了那些简单结构的问题,按照我们分解大问题的逻辑,也就解决了开始的复杂问题。
如何运用程序语言来表达这个解构的思路,就是本篇我们要讨论的主要论题。
首先我们讨论一个FORTRAN程序所可以具有的结构,按照这个语言对程序结构模本的规定,我们就可以规划相应的针对计算任务的问题解构方式。
所谓FORTRAN程序的结构,就是一个FORTRAN程序可以包含那些程序单位,然后这些单位又必须如何组装在一起。
所以我们分类讨论了FORTRAN的程序单位之后,就需要讨论数据流与指令流是如何进行不同程序单位之间的通讯的,通过这种通讯,一个由许多程序单位组成的FORTRAN 程序就构成了一个有机的整体,恢复了被支解的问题的本来结构。
特别的,我们还需要讨论最为重要的程序单位,就是过程,它的可执行程序单位的主体。
其中FORTRAN语言以标准形式给出的固有过程,相当于为解决常见计算问题而准备的常用工具,熟练使用它们可以达到事半功倍的效果。
[1]Herbert A. Simon,1916-2001,20世纪所谓“认知科学革命”的核心人物,人工智能的巨擘,在计算机科学和心理学领域都作出了开创性贡献。
1975年获得图灵奖,1978年以决策理论荣膺诺贝尔经济学奖,1993年美国心理学协会授予他终生杰出成就奖,1994年获选中科院外籍院士,生前多次访华。
第12章程序的单位一个FORTRAN程序可以由那些单位组成,在第一篇以及第4章都已经简单涉及过,在这里我们要详尽地讨论这个问题,特别是给出每种程序单位的结构与功能。
12.1 程序单位FORTRAN的程序单位分为两大类:●可执行程序单位;●不可执行程序单位。
其中可执行程序单位,用来执行一个完整的功能,包括:●主程序;●外部函数子程序;●外部子例行程序子程序。
不可执行程序单位,用来为其他程序单位提供定义,包括:●模块程序单位;●数据块程序单位。
因此上面的五种类型的程序单位构成了FORTRAN程序的基本单位,不过在后面我们会看到,数据块程序单位属于早期版本的遗留物,完全是多余的。
一个完整的FORTRAN程序至少需要一个主程序,而且也只能有一个主程序。
一般说来,要完成一个完整的计算任务,除了一个主程序之外,往往还需要有函数以及子例行程序作为辅助,这时,主程序的作用就还包括驱动与管理这些作为过程的外部子程序,使得它们构成一个整体,从而完整地解决相关计算问题。
模块程序单位主要是提供给编程者用来组织程序元素的。
一个模块程序单位包含了如下几个方面的内容:●数据声明;●派生类型定义;●过程界面信息;●供其他程序单位使用的子程序定义。
因此这样一个程序单位本身不是可执行程序单位。
数据块程序单位用于给出命名公用块里面的变量的初始值,因此同样不是可执行程序单位。
由于FORTRAN的现代版本引入了模块结构,而模块能够提供全局的数据初始化,因此数据块程序单位几乎可以说是多余的。
由于在第13章我们将专门讨论过程以及过程的应用,因此属于过程的外部函数子程序和外部子例行程序子程序,在本章都只是简略说明,需要详细讨论的是主程序和模块。
各种程序单位里面并不是能够使用任何FORTRAN语句,语句类型与程序单位之间的兼容性在下面的表中予以说明。
*几种声明语句包括:PARAMETER语句,IMPLICIT语句,类型声明语句以及说明语句。
#语句函数语句属于过时语言成分。
一个FORTRAN程序总是从主程序的第一个可执行语句开始运行,在第三章我们已经讨论过一个完整FORTRAN程序的结构。
在下面的图12-1中,我们再给出一个完整FORTRAN程序的示意图,它包含了一个主程序,一个模块,以及两个子例行程序。
图12-1 钟表制作程序的结构在上面的例子里面,我们假设在装配一块钟表时,零件装配与工具配套分别由两个徒弟完成,那么等负责工具配套的徒弟把零件都放置在适当的工具旁边的时候,就可以让钟表匠开始总的钟表装配工作了。
因此模块ACCESSORY_BOX(附件箱)里面包含了子例行程序PARTS(零件)与TOOL(工具)所需要的一切数据与过程信息。
主程序调用了子例行程序TOOL,而主程序本身不需要模块ACCESSORY_BOX里面的信息。
12.2 主程序主程序说明了整个FORTRAN程序的逻辑结构,同时整个程序的运行就是从主程序的第一个可执行语句开始的。
不过从形式上看,一个主程序和外部子程序其实的非常类似的。
一个主程序包括如下三个基本部分:●说明部分。
这个部分定义了程序的数据环境。
●运行部分。
整个程序从这个部分的第一个可执行语句开始,该部分给出了整个程序运行的逻辑结构。
●内部子程序部分。
处于主程序内部的与主程序共享数据的过程。
下面我们分小节说明主程序的说明部分和运行部分,由于内部子程序部分由一个或多个内部过程组成,而内部过程的讨论见12.3,因此在12.2略过。
终止主程序运行的方式有如下两种:●在程序的任意位置执行STOP语句,就能即刻终止整个程序。
所谓任意位置,包括组成程序的任意程序单位的任意位置。
●程序的运行到达主程序的最后一个语句。
12.2.1 主程序的组织主程序的形式(R1101)如下:[PROGRAM program-name][specification-part][execution-part][internal-subprogram-part]END [PROGRAM [program-name]]下面是一个最最简单的FORTRAN程序:【例12-1】END下面是一个稍微有意思一点的最简单程序:【例12-2】PROGRAM HIPRINT*,“HELLO”END主程序的一般规则如下:● PROGRAM语句作为主程序的程序头是可选的,但是其他的程序单位都必须具有程序头。
● 如果程序名称出现在END语句当中的话,那么该名称必须和PROGRAM语句里面的名称一样,并且放置在关键词的后面。
不能单独出现END语句当中。
● 主程序不提供哑元。
● 主程序不能在任何位置被引用,也就是说,主程序不能被直接或间接地递归运行。
● 主程序不能包含RETURN语句和ENTRY语句,不过主程序里面的内部过程可以包含RETURN语句。
12.2.2 主程序的说明部分主程序的说明部分主要就是用来描述程序的数据环境。
主程序里面所能够包含的语句类型见表12-1,具体列出如下表12-2:主程序的说明部分的一般规则如下:● OPTIONAL以及INTENT属性或语句都不能在主程序的说明部分出现,因为它们都只能应用于哑元。
● 可访问性说明PUBLIC以及PRIVATE都不能出现于主程序,因为它们都只能应用于模块内部。
● 在主程序里面,动态对象没有意义。
● 尽管在主程序里面可以使用SAVE属性或语句,但它们在主程序里面并没有实际的作用。
12.2.3 主程序的运行部分主程序的运行部分由可执行语句构成,能够出现在主程序的运行部分的语句列出如下表12-3所示:12.3 内部过程内部过程和外部过程的主要差别就在于它们的的位置不同:内部过程必须封装在主程序或其他过程子程序内部,这就导致以下后果:●内部过程的名称是局部的而不是全局的;●内部过程只能被包含了它的定义的程序单位所引用;●内部过程能够访问它的宿主的数据对象;●内部过程可以递归,不能包含ENTRY语句,也不能作为实元传递。
构造内部过程的主要原因如下:●内部过程提供了能够很方便地访问宿主环境的过程。
●内部过程提供了一种具有语句函数功能的多语句形式。
●便于模块设计以及具有更好的软件工程效能。
内部过程之所以能够提高安全性以及灵活性,是因为其界面非常清晰。
宿主的内部过程部分的形式(R210)为:CONTAINSinternal-subprogram[internal-subprogram]…其中的内部子程序由一个或多个内部过程组成,而内部过程或者是由如下形式(R1216)的函数组成:function-statement[specification-part][execution-part]END FUNCTION [function-name]或者是由如下形式(R1221)的子例行程序组成:subroutine-statement[specification-part][execution-part]END SUBROUTINE [subroutine-name]【例12-3】PROGRAM WEATHER…CONTAINSFUNCTION STORM(CLOUD)…END FUNCTION STORMEND其中的过程STORM就是主程序WEATHER里面的一个内部过程。
内部过程的一般规则如下:● 内部过程内部不能再包含内部过程,即内部过程不能嵌套。
● 内部过程不能包含ENTRY语句。
● 内部过程不能包含PUBLIC和PRIVATE属性或语句● 内部过程不能作为实元传递。
● 内部过程的说明部分除了可以包含主程序的说明部分所许可的语句之外,还可以包含INTENT语句以及OPTIONAL语句。
● 内部过程的运行部分除了可以包含主程序的运行部分所许可的语句之外,还可以包含RETURN语句。