Fortran 95内在过程
- 格式:doc
- 大小:130.50 KB
- 文档页数:7
第三篇计算任务的剖分与组合从前,有两个表匠,一个叫霍拉,一个叫坦普斯。
两人都很受顾客的欢迎,他们各自的工场中的电话总是响个不停,因为老有新主顾上门。
不过,霍拉发了大财,坦普斯却越来越穷,最后连店铺都给亏没了。
这是为什么呢?他们做的表都是由1000个零件组成。
坦普斯做表的方式是连续地把一只表从头做到尾,如果尚未装完一只表就不得不中途放下(比如说要去接客户电话了),那么装了一半的表就会立刻散掉,又得从头装起。
顾客们越喜欢他的表,他的电话就越多,也就越难得到足够的不被打断的时间来装成一只表。
霍拉做的表并不比坦普斯的简单。
但他经过设计,用十个零件装成一个组件。
十个组件又可装成更大的组件。
十个大组件构成的系统就是整只表。
因此,当霍拉不得不放下装了一部分的表去接电话时,他只损失了一小部分活儿,他装表所用工时只是坦普斯所用工时的一个零头。
…在这个寓言里面,我的中心思想是,具有复杂性的系统最好是采取层级结构的形式,而层级结构有一些与系统的具体内容无关的共同性质。
我将论证说,层级结构是构造复杂事物的建筑师们所使用的主要结构方式之一。
----H.Simon[1]《The Sciences of the Artificial》一个计算任务可以很简单,使用几个语句进行描述,执行之后就可以得到结果,但是如果说我们人类使用计算机只是进行那种简单的计算,显然是浪费。
而复杂的计算任务,则和任何复杂事物一样,具有非常庞大的内部结构,人类解决复杂问题的一般思路,就是把一个大的结构分解为相对比较小的结构,如果可能就一直分解到非常简单的结构,分别解决了那些简单结构的问题,按照我们分解大问题的逻辑,也就解决了开始的复杂问题。
如何运用程序语言来表达这个解构的思路,就是本篇我们要讨论的主要论题。
首先我们讨论一个FORTRAN程序所可以具有的结构,按照这个语言对程序结构模本的规定,我们就可以规划相应的针对计算任务的问题解构方式。
所谓FORTRAN程序的结构,就是一个FORTRAN程序可以包含那些程序单位,然后这些单位又必须如何组装在一起。
第14章固有过程固然,我们已经能够做到运用FORTRAN 95来描述任何的计算任务,因为FORTRAN 95所提供的数据类型,固有运算,派生类型,自定义运算,以及构造函数与子例行程序的方法,都足以使得我们应付任何的计算问题。
不过FORTRAN 95标准还提供了大量的科学计算的常规计算与函数,都可以作为固有过程直接使用,而不需要我们自己来编写源码。
这就好像对于一个汽车装配师,除了给他提供螺栓,轴承之类的标准零件,还给他提供更高层次的标准配件,例如各种型号的发动机,电机之类。
因此熟练掌握固有过程,将给我们带来如虎添翼的感觉。
FORTRAN 95把固有过程作为标准来提出,就意味着任何的FORTRAN 95的编译器实现版本,都必须能够提供它们:115个固有过程,其中包括109个固有函数和6个固有子例行程序。
当然不排除很多的编译器还提供额外的固有过程。
正是由于固有过程是属于FORTRAN 95的标准内容,因此和固有运算,例如+,一样,总是“随叫随到”,无论在哪个程序单位内部,只要使用某个固有过程的名称,就等于调用了该固有过程。
不过,如果它的名称被用户定义的函数或子例行程序所“侵占”,那么在下面的情况下,被调用的将是用户自定义的函数或子例行程序而不是固有过程:●该自定义函数或子例行程序的界面是显式的;●该自定义函数或子例行程序出现在EXTERNAL语句当中;●该自定义函数属于语句函数。
当然上述的名称被侵权的有效范围只是该自定义函数或子例行程序的作用域。
相应的,固有过程也就只能在下面的情形下夺回被侵占的名称:●不存在使用该名称的语句函数;●它的名称出现在INTRINSIC语句当中;●相应的用户定义的过程的界面是隐式的。
例如在一个模块或一个内部过程里面,由于它的界面是显式的,那么固有过程的名称就能够被侵占,除非固有过程的名称出现在一个有效的INTRINSIC语句当中。
下面我们主要讨论固有过程的按照功能的分类,以及每个种类的固有过程所能够完成的计算任务。
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的FORTRANPOWERSTATION 4.0,这套工具后来卖给DIGITAL公司来继续发展,下一个版本称为DIGITAL VISUAL FORTRAN 5.0,DIGITAL后来被COMPAQ合并,所以接下来的6.0及6.5版就称为COMPAQ VISUAL FORTRAN。
而COMPAQ目前又跟HP合并,也许下一个版本会称为HP VISUALFORTRAN。
VISUAL FORTRAN被整合在一个叫作MICROSOFT VISUAL STUDIO的图形接口开发环境中,VISUAL STUDIO提供一个统一的使用接口,这个接口包括文书编辑功能,PROJECT的管理、除错工具等等,所以在使用上其实跟上学期的VISUAL C++满类似的,同学们上课用过VISUAL C++,对VISUAL FORTRAN应该不会陌生。
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程序设计》学习笔记66RPG gg★目录★《FORTRAN 95程序设计》学习笔记 (2)基础知识(基础、字符串、FORMAT、隐式、TYPE)............................. 错误!未定义书签。
流程与控制(if、select、do) (8)数组(声明、隐式循环、整体操作、可变数组) (10)函数与子程序(子程序、函数、全局变量)13MODULE与面向对象(重载操作符、虚函数) (18)文件相关(OPEN、WRITE、READ) (20)指针(指向变量、数组、函数) (22)Visual Fortran 编译器(DLL,VB调用) (24)数值算法与IMSL(数值算法插件) (28)常用库函数(数学、数组、零碎、子程序) (30)◆10^10⏹复数:complex :: a=(2,3)◆实部:real(a) ;虚部:imag(a)⏹布尔型:Logical,.true. 和.false.★【语法与函数】字符串:character(20) string ⏹注意理解,fortran的弱智字符串就是一个长度不能变的一维的东西,极其猥琐,和Java、Ruby不能相提并论的⏹string(13:13) = “a”:对第13个字节的读、存⏹string(2:3) = “go”⏹string(6) = “我的妈呀”:从第6个位置开始设置为“我的妈呀”⏹a = string_a // string_b:用“//”连接两个字符串⏹【常用函数】char(num),ichar(char):ASCII码的转换相关功能⏹【常用函数】len(string),len_trim(string):长度,去掉尾部空格后的长度⏹【常用函数】index(string,key):找key在string首出现的位置⏹【常用函数】trim(string):返回去掉尾部空格的字符串(用途不大)⏹【函数】repeat(char,int):返回一个重复int次的char串⏹character(len=20) string 普通声明;character(len=*) string 接收的时候可自动长度★【规范格式】FORMAT格式化⏹e.g.◆w rite (*,100) A◆100 format(I4) ←这里是100号标识调用的格式⏹参数控制符(前面加数字为重复次数,如4I6或<a>I6。
第15章通讯计算的过程除了指令的序列之外,还有一个极端重要的部分,就是通讯。
试想一下人工的计算过程,几乎每做一个计算步骤,都有可能需要引用很多东西,例如其他计算的结果,问题的初始值,其他的现成公式,或已经推导出来的公式,或者引用别人的计算成果等等,这种引用在本质上就是通讯,即一个相对独立的计算步骤,或计算过程,都不可能是真正独立的,它总是需要得到来自外部的信息,无论是外部的数据,还是外部的计算,只要是叫得出名字的东西,都有可能被用到。
而该计算步骤或计算过程本身,不也是有可能被别的计算所使用吗!当然这一切都是通过草稿纸,通过我们的记忆,通过论文来进行的。
这就是计算当中的通讯,通过所有这些通讯才能使得计算成为一个整体,才能使得计算真正是面向了本来是一个整体的真实世界的问题。
相应的,当我们使用FORTRAN语言来描述计算任务的时候,它同样需要描述其中的通讯过程,而且还得是严格地把一切通讯过程都毫无遗漏地描述出来。
同样地,一个FORTRAN程序正是通过这些通讯而把所有程序单位,乃至所有的语句或指令单位,都连接起来,才能构成一个能够解决问题的计算过程。
那么这种通讯利用FORTRAN语言是如何进行的呢?还是让我们回到人工计算的过程,因为本质上,一个FORTRAN计算程序描述的就是一个人工计算过程。
首先我们需要对想使用的对象命名,才能称呼它们,然后才谈得上进行引用。
然而我们不能够指望给世界上的每一个具体对象都给予一个唯一的名称,那么做既不现实,也忽略了事物之间所具有的紧密联系。
因此在同一个名称可以称呼不同的对象的情况下,我们需要一个约定,就是一个名称必定跟随有关该名称的有效范围的说明。
在给所有的对象起了合适的名称之后,就需要考虑建立在不同的场合里面出现的对象之间的联系,例如在波函数里面出现的正弦函数与在交流电电流公式里面出现的正弦函数,因为它们的名称一样,就可以认为是同一个函数。
而波函数里面的振幅和交流电电流公式里面的振幅,尽管名称一样,却不能够应用于同样的公式,例如波函数里面的振幅可以引用到几率幅公式里面,而几率幅公式对于交流电却没有任何意义。
FORTRAN95程序设计实验指导[定稿] FORTRAN95程序设计实验指导第一节 Compaq Visual FORTRAN 6.5快速入门 1.1 安装Compaq Visual FORTRAN 6.51.1.1 系统要求)需要具备以下软硬件条件:安装Compaq Visual FORTRAN 6.5(以下简称为CVF, 80586或以上处理器,运行Windows 98//NT/2000或以上操作系统。
, 具有光盘驱动器。
, 64MB或以上内存。
, 足够的硬盘空间。
安装程序根据安装选项提示所需的硬盘空间。
专业版的典型安装需要约300MB硬盘空间。
, SVGA显示器。
, 鼠标。
1.1.2 安装步骤下面以Windows 2000操作系统为例,对于其他Windows 操作系统,安装过程与此类似。
首先,将含CVF的光盘插入光盘驱动器,在资源管理器中运行Setup程序,屏幕显示Compaq VisualFORTRAN Setup窗口;单击【istall Visual Fortran】按钮;当出现询问是否查看README.TXT文件的对话框时单击【否】按钮;安装程序自动搜索已有组件,单击【Continue】(继续)按钮,并按提示输入用户名、公司名、产品系列号后,安装程序会显示安装选项对话框(图1.1);如果要改变安装CVF的文件夹,单击【Change Folder...】(改变文件夹)按钮,选择或输入所需的文件夹名;如果输入的文件夹不存在,安装程序会自动生成该文件夹,并生成几个下级文件夹以存放相应的各类文件。
图1.1还显示了各安装选项的简短说明和安装时所需的硬盘空间。
选择下列四个安装选项之一继续安装:Typical(典型)Custom(定制)Run from CD-ROM(从光盘运行) Typical(典型)安装选项将安装最常用的部分,约需298MB硬盘空间。
Custom(定制)安装选项将允许用户选择安装自己需要的组件(约需350MB空间)。
FORTRAN95程序设计实验FORTRAN95程序设计实验本文档涉及附件。
本文所涉及的法律名词及注释。
⒈简介本文档旨在提供一个完整的FORTRAN95程序设计实验的指南。
它包括实验的背景、目的、实验步骤、程序代码和测试结果等内容。
⒉实验背景在本节中,将介绍该实验的背景信息。
这可能包括与程序设计相关的概念、算法、问题陈述等。
⒊实验目的在本节中,将明确说明该实验的目的。
这可以包括学习特定的FORTRAN95编程技术、理解特定算法的实现、解决特定问题等。
⒋实验步骤本节将详细说明完成该实验所需的步骤。
每个步骤都应该清晰明了,并包括必要的代码片段和解释。
⑴实验准备在本段中,将列出完成该实验所需的软件和硬件准备,例如安装FORTRAN95编译器、准备输入文件、设置运行环境等。
⑵实验步骤1:任务1在本段中,将详细介绍实验中的第一个任务。
这可以包括问题描述、算法设计、需要编写的FORTRAN95代码等。
⑶实验步骤2:任务2在本段中,将详细介绍实验中的第二个任务。
同样,包括问题描述、算法设计、FORTRAN95代码等。
⒌程序代码在本节中,将提供实验中使用的完整FORTRAN95程序代码。
代码应该经过清晰的注释,以便读者理解。
⒍测试结果本节将展示每个任务的测试结果。
这可能包括输入和输出示例,以及对结果的说明和分析。
⒎总结在本节中,将对整个实验进行总结。
包括实验过程中遇到的困难、得到的经验教训、对FORTRAN95编程的理解等。
⒏附件该文档包含以下附件:实验说明书、FORTRAN95代码文件、输入文件、输出文件等。
⒐法律名词及注释在本节中,将列出在文档中使用到的法律名词,并提供相应的注释。
这有助于读者更好地理解涉及法律方面的内容。
附录B Fortran 95内在过程
FORTRAN 95标准提供了115个内在过程,其中包括109个内在函数和6个内在子例行子程序。
很多编译系统还提供额外的内在过程。
按照形式,内在过程分为如下两类:通用过程;专用过程。
所谓通用过程是一个集合名称,通用过程与专用过程是一个集合与其元素的关系。
一个通用过程由两个或多个专用过程组成。
在所有的115个内在过程当中,除了如下4个内在函数外,其他都是通用过程:LGE、LGT、LLE和LLT。
专用过程针对具体类型与种别的变量。
例如,求一个变量的绝对值的通用过程为ABS(X),而求一个整型变量的绝对值的专用过程为IABS(X),求一个复型变量的绝对值的专用过程为CABS(X),如此等等。
所以,每个通用过程属下的专用过程都必定具有相应的类型,种别,甚至维的属性。
这些专用过程的名称的主要用途是作为实元来传递,这时就必须使用专用过程名称。
注意,在表中注明了少数专用过程不能作为实元。
按照功能,FORTRAN 95的内在过程主要分为如下5类:查询与数字操作函数;转换,置空以及传递函数;计算函数;数组函数;内在子例行程序。
如果从功能的角度来对内在过程分类,那么除了上面的比较具体的5类之外,还可以从内在过程对数组的作用方式的角度,把内在过程分为两大类:逐元过程和变换过程。
所谓逐元过程,就是从数学的观点来看,这些专用过程的计算对象并不是数组,但是可以运用一种自然的方式使得这专用过程能够作用于数组对象,并且得到相同形状的数组结果。
也就是使得该过程分别作用于数组的每个元素,把所有的过程结果再集合起来作为结果数组。
内在过程当中的大部分都属于逐元过程,包括:转换函数;计算函数(除了REPEA T,TRIM,DOT_PRODUCT,MA TMUL之外);子例行程序MVBITS。
其他的所有内在过程就都不是逐元过程了。
所谓变换过程,就是内在过程里面逐元过程之外的所有过程都称为变换过程,因为从它们的定义的实质上看,就是作用于一个数组数据对象,得到一个标量或者数组结果,也就是一个变换的过程,而不是单独地作用于每个元素。
因此除了函数NULL之外,所有的变换过程或者是具有一个取数组值的哑元,或者是具有一个取数组值的实元,它们对数组的作用都是某种整体变换作用。
例如对于向量的乘积,就不能逐个元素地进行。
内在过程的引用正如一般过程的引用一样,可以使用关键词变量。
由于某些内在过程的变量是可选项,因此使用关键词能够省略相应的实元。
常见的关键词哑元名称含义如下:
● DIM:DIM主要用于数组简化函数以及其他一些数组函数,表示在函数的作用对象不是整个数组的情况下,数组的哪个维被过程作用。
DIM取值为标量整型值,并且常常是可选变量。
●KIND:KIND一般用于转换函数,说明转换结果的种别参数。
KIND实元必须是一个标量整型初始化表达式,一般是可选的。
●BACK:BACK作为一个可选的逻辑型变量用来表示逆序过程,即它所出现的内在过程的对于数据对象的反方向操作。
例如,如果在内在过程INDEX当中出现了BACK=.TRUE.,那么INDEX的搜索操作就必须与正常方向相反,即从字符串的右端开始。
注意内在函数的非指针哑元都具有INTENT(IN)的属性,而指针哑元则不能改变其关联的实元或目标。
注1:该函数没有相应的通用过程名称,它的结果为默认整型。
注2:该函数没有相应的通用过程名称,它的结果为默认实型。
注3:标注星号*的函数不能用作实元。
注4:某些专用过程名称与其通用过程名称一样。
注:表B2中哑元名表示其类型:I 整型; R 实型; C 复型; S 字符型; L 逻辑型; X 多种类型; CH 单字符;
A 数组;M 矩阵; P 指针; V 向量; LA 逻辑型数组; IA 整型数组。