实验室很多旧的程序是用Fortran语言编写的,因此,就学习了一下Fortran语言,下面是我的一些个人总结:
1.1 Hello world 程序
program main
implicit none
print *, 'Hello World'
end program main
(I-N规则)的使用有利有弊。
在FORTRAN77标准中,变量名不允许超过6个字符;在FORTRAN90标准中,变量名不允许超过31个字符;
DATA LINE/0/
第一种方法:
先声明一个变量,再利用PARAMETER命令将其声明为常量,例如:
real pi;
parameter (pi=3.14159) !注意此处要用括号括起来
第二种方法:(适用于FORTRAN 90)
Fortran90里,PARAMETER可以作为一个形容词,和变量的声明同时写在一起,例如:
real, parameter :: pi=3.141592653
Fortran 95使用end do来结束循环。
Fortran 77使用DO循环要麻烦一点,它不使用END DO来结束循环,而是使用行号来结束循环,程序代码要在DO的后面写清楚这个循环到哪一行程序代码结束。
Fortran 77中,经常会使用CONTINUE这个命令来结束循环。因为CONTINUE这个命令没有实际的用途,刚好可以拿来做封装使用。
循环中的cycle命令相当于c++里的continue命令,用于结束一次循环
循环中的exit命令好比c里面的break,用于结束循环
== /= > >= < <= !Fortran90用法
.EQ. .NE. .GT. .GE. .LT. .LE. !Fortran77用法(左右各有一个点)
5种逻辑运算符,新旧FORTRAN标准中的逻辑运算符没有任何区别,每个运算符的左右都有一个点“.”,书写时不能漏写。
.AND. .OR. .NOT. .EQV. .NEQV. !语法
逻辑与 逻辑或 逻辑非 逻辑等价 逻辑不等价 !意义
pause 暂停程序执行,按enter可继续执行
continue 貌似没什么用处,可用作封装程序的标志
STOP 命令用来结束程序,要谨慎使用
where命令形式上类似于if,但只用于设置数组 where.....elsewhere...elsewhere...endwhere (没有then)
FORALL是Fortran95添加的功能,只能用于数组操作
forall可以嵌套使用,还可以在forall中使用where,但where中不能使用forall
全局变量用来定义一块共享的内存空间;
全局变量不能声明成常量
全局变量不能直接使用data命令赋初值,要在block data模块中使用data来设置初值。
COMMON语句是说明语句,因此它应该出现在相应程序单元中的所有可执行语句之前。
取用全局变量时,是根据它们的相对位置关系来作对应,而不是根据变量名称来对应。由于全局变量是使用“地址对应”的方法在程序中共享数据,所以在程序设计时常常会有麻烦出现:比如要调用后面的变量就要从第一个开始,这种麻烦在全局变量多的情况下更为惊人。因此,可以把全局变量进行归类,放在彼此独立的COMMON区间中。l
common /group1/ a
common /group2/ b
24 传递参数与使用全局变量都可以在不同程序之间共享数据,那什么时候该使用参数,还有什么时候该使用全局变量呢?
简单地说,当需要共享的变量不多,而且只有少数几个程序需要使用这些数据时,那就使用参数,
需要共享大笔数据,或是有很多不同程序都需要使用这些数据时,就使用全局变量。
25 INCLUDE命令
1 INCLUDE命令可以写在任何地方,它只是单纯地用来插入一个文件的内容。
2 有时候也会应用在声明全局变量,先把声明全局变量的程序代码编写在某个文件中,需要使用全局变量的函数再去INCLUDE这个文件,这样可以减少程序代码。
26 如何换行
3.1 IF语句
1. 一个模块
IF (逻辑判断式) THEN
…..
…..
END IF
2. 可以包含ELSE模块
IF (逻辑判断式) THEN
…..
…..
ELSE
…..
…..
END IF
3. 多重判断
IF (逻辑判断式) THEN
…..
…..
ELSE IF (逻辑判断式) THEN
…..
ELSE IF (逻辑判断式) THEN
…..
END IF
3.2 DO 循环
3.2.1 FORTRAN77中的基本DO构造
FORTRAN77中的DO构造如下:
DO 语句标号 ,循环控制
循环体
语句标号 终止语句
3.2.2 FORTRAN90/95中的基本DO构造
在FORTRAN90/95中通过引入专用循环终止语句的方式来使得循环结构更为清晰。如下:
DO 循环控制( 循环变量=循环初值,循环终值,循环增量)
循环体
ENDDO
3.3 DO WHILE 循环
循环不一定要由计数器的增、减来决定是否该结束循环,它可改由一个逻辑运算来做决定,这就是DO-WHILE循环的功能
DO WHILE (逻辑判断式)
…..
…..
END DO
4.1 数组的说明
integer a(-3:1) !索引值为-3,-2,-1 ,0,1
Fortran 77中数组的声明,必须使用DIMENSION命令
Integer a; !先声明a是整型
Dimension a(10) !再声明a是大小为10的数组
Fortran 95中可以用简单的方法:
Integer a(10) real b(3,3) !最简单的方法
Integer,dimension(10):: a !另一种方法
Fortran77中还没有支持可变大小的数组,就只能先声明一个超大数组,然后往里面写数据。
而Fortran90的数组则可以声明可变大小的数组,然后根据需求实时改变它的大小。
使用可变大小的数组要经过两个步骤:
第一步当然是声明,这里的声明方法可能有些不同,声明时要加上allocatable,数组的大小也不用赋值,使用一个冒号“:”来代表它是一维数组就行了。
第二步,声明完成后,这个数组还不能使用,因为还没有设置它的大小。要经过allocate这个命令到内存中配置了足够的空间后才能使用数组。
如:
Integer :: students;
Integer,allocatable :: a(:) ; !声明一个可变大小的一维数组
Allocate(a(students)); ! 配置内存空间
除了一维数组外,其他维度的数组当然也可以使用。方法如下:
Integer,allocatable ::a2(:,:) ; !用2个冒号,代表二维数组
Integer,allocatable ::a3(:,:) ; !用3个冒号,代表三维数组
ALLOCATE命令是去求内存使用空间,而DEALLOCATE则是逆向运行,它是用来把用ALLOCATE命令所得到的内存空间释放掉,使用这两个命令可以用来重新设置数组的大小。
例子:声明一个3*3维的单位矩阵
REAL(kind=8) B(3,3);
DATA B / 1.0D+0, 3*0.0D+0, 1.0D+0, 3*0.0D+0, 1.0D+0/
原则是放低维的元素,再放高维的元素,此规则称为column major
矩阵输出时也是按列输出。。
4.2 数组的引用
在FORTRAN77标准中,数组只允许在输入输出语句中进行整体操作。在其他场合,只能对数组的元素通过下标索引的方式逐个进行操作。到了FORTRAN90标准,这一限制被大大放宽了。数组除了能够进行整体操作以外,还能对数组中的片段和数组的整体进行操作。(且其引用方式与MATLAB很相似)。
引用数组元素的语法如下:
数组名(下标,下标,….)
引用数组片段的语法如下:
数组名(下标范围,….)
数组片段的引用方式较为灵活,既可以通过三元下标来进行引用,也可以通过向量下标来进行引用。三元下标的格式如下:
[下界]:[上界]:[步长]
如: B(1,1:5) B(1,1:10:2)
4.3 数组的赋值
Fortran 77中数组的声明,可以使用DATA命令 或隐含式循环来赋初值;
Fortran 95中可以直接设置初值;如:integer ::a(5)=(/1,2,3,4,5/);此时,括号和除号之间不能有空格;
数组构造器是由括号和斜线之间的一系列值或隐DO循环组成。其一般形式为:(/取值列表/)。取值列表可以是标量,隐DO循环或任意秩的数组。其中的所有值的类型都相同,以逗号隔开。如果列表中出现了数组,它的值是按列来赋的。
例:INTEGER A(6)
A=(/1,2,3,4,5,6/) ! 斜杠与括号间不能有空格
例:
C1=(/4,8,7,6/) ! 标量表示
C2=(/B(I,1:5),B(I:J,7:9)/) ! 数组表示
C3=(/(I,I=1,4)/) ! 隐DO循环
C4=(/4,A(1:5),(I,I=1,4),7/) ! 混合表示
下面是一些数组构造器的替换格式:
1) 用方括号代替括号和斜线,例如下面两个数组构造器是等价的:
例:INTEGER C(4)
C=(/4,8,7,6/)
C=[4,8,7,6] 原来fortran赋值数组可以使用方括号
2) 冒号三元下标(代替隐DO循环)来指定值的范围和步长,例如下面两个数组构造器是等价的:
例:INTEGER D(3)
D=(/1:5:2/) ! 三元下标格式
D=(/(I,I=1,5,2)/) ! 隐DO循环格式
d) RESHAPE语句
可以用内在函数RESHAPE语句把一个一维数组改变形状后赋给另一已知形状的数组。由于Fortran的数组顺序不同于C,Fortran中左边第一维是变化最快的,RESHAPE语句可以用于当Fortran过程化为C过程时将Fortran数组改序成C数组序。它的一般形式为:结果=RESHAPE(源,形状[,补充][,顺序])。源可以是任意数据类型的数组,它提供结果数组的元素。当补充被省略或其大小为0时,源的大小必须大于PRODUCT(形状)。形状为7个元素以下的一维固定的整型数组,它决定了结果数组的形状,其大小为正元素非负。补充为与源数组相同类型和属性的数组,当源数组的大小比结果数组小时用来补充元素值。顺序必须是和形状数组有相同形状的整型数组,其元素为(1,2,...,n)的排列,n是形状数组的大小。当顺序被省略时,默认值为(1,2,...,n)。
因此,结果数组的形状与形状数组相同,与源数组的类型和属性相同,大小是形状数组元素值的乘积。结果数组的元素是源数组的元素按顺序数组指定的维别顺序排列的,当省略顺序数组时元素按通常的顺序排列。源数组元素用完后按序用补充数组的元素,必要时重复使用补充数组直至结果数组的所有元素均有其值。
例:RESHAPE((/3,4,5,6,7,8/),(/2,3/))的结果是 。
例:RESHAPE((/3,4,5,6,7,8/),(/2,4/),(/1,1/),(/2,1/))的结果是 。
例:INTEGER AR1(2,5)
REAL F(5,3,8),C(8,3,5)
AR1=RESHAPE((/1,2,3,4,5,6/),(/2,5/),(/0,0/),(/2,1/))
! AR1的取值为 [1 2 3 4 5]
! [6 0 0 0 0]
C=RESHAPE(F,(/8,3,5/),ORDER=(/3,2,1/)) ! 将Fortran数组序化为C数组序
END
例:INTEGER B(2,3),C(8)
B=RESHAPE((/1,2,3,4,5,6/),(/2,3/)) ! 赋值给形状为(2,3)的数组
C=(/O,RESHAPE(B,(/6/)),7/) ! 赋值给向量C之前先把B转换成向量
4.5 常用内在函数
4.5.1 内部基本函数
在FORTRAN语言的数组表达式中,允许将数组作为内部基本函数的参数。此时,内部基本函数的函数值就是一个同参数数组形状相同的数组,例如,B=SQRT(A),即对数组A的每一个元素开方。
4.5.2 矩阵乘积函数
C=MATMUL(A,B)
使用时,数组A和B只能是维数为1或2的数组;
数组A和B中至少要有一个的维数为2,也就是不能是两个向量相乘。
4.5.3 向量点乘函数
C=DOT_PRODUCT(A,B)
5.1 表控输入输出(即表控格式输入输出)
1 注意点:不同计算机系统对表控格式输出的规定不同,例如对一个整型数,有的系统规定输出占13列,有的系统规定输出占10列,也有的系统不规定固定的列数而按照数据的实际长度输出,再用一个空格作分隔符。
2 如果在输入数据行中出现”/”号,表示对READ语句的输入到此结束,未被赋值的变量将不予赋值。
5.2 WRITE命令
5.2.1 write命令语法
向屏幕输出字符串:
Write(*,*) “string” !一般用法
Write(6,*) “string” !严谨一些的用法
Write(UNIT=6,FMT=*) “string” !最严谨的用法
因为屏幕的输出UNIT位置就是6。
5.2.2 写入字符串
Write命令不仅可以写入屏幕与文件,而且还可以写入字符串,fortran轨道确定程序中的errout文件就用到了这一功能。
例如:
CHARACTER*6 :: NAME=’hahaha’;
CHARACTER*60 MESS;
INTEGER:: IERR=4;
WRITE (MESS,*) IERR, NAME !将IERR和NAME写入到字符串MESS中
5.3 FORMAT格式控制语句
语句格式:
标号 FORMAT(格式描述符)
例如: write(*,100) i,j,k;
100 FORMAT(1X,I3,I5,I7),其中,1X是换行控制符(走纸控制),I3表示i变量的值输出占3列,I5表示j变量的值输出占5列
主要介绍:I、F、E、X、纵向走纸、'(撇号)、r(重复系数)、/(斜杠)等
作用: 用于输出空格
一般形式: nX
作用: 用于整型数据的输出
一般形式: Iw 或 Iw.n
作用:用于实数的小数形式输出
一般形式: Fw.d
作用:用于实数的指数形式输出
一般形式:Ew.d
其中:E—实数的指数形式输出;
w—字段宽度;
d—数字部分的小数位数。
数值部分<1
作用:用于字符型数据的格式描述
一般形式: Aw或A ,其中w是字段宽度。
作用:用于输出字符常量,即把撇号内的字符串原样照打
例如:write(*,100) i,j
100 format(1x,'i=',i3,' j=',i4)
作用:它的作用与撇号描述符类似,也可以输出字符型常量
一般形式: nH
建议:建议最好不要使用H描述符,而是使用撇号描述符,避免错误
例如: I=123
WTRITE(*,100),I
100 FORMAT(1X,2HI=,I3);
反斜杠\描述符和美元$描述符的作用相同,都是在输出一个记录行后取消回车符,常用于输出字符串与输入数据显示于屏幕同一行的情形。
例如: write(*,'("please enter your name",$)');
Read(*,*) My_age
在format语句中,如果出现几个(或几组)相同的格式编辑符,则可以利用重复系数而只写一个(或一组)编辑符。
r——可重复使用的次数。
例:
write(*,100) n1,n2,x,y1,y2,y3
100 format (1x, i10, i10, f8.3, f7.2, f7.2, f7.2)
↓
Format (1x, 2i10, f8.3, 3f7.2)
6.1 语句函数
1 语句函数的定义
REAL(KIND=8) X, F
F(X)=X**2+X+1
2 语句函数的调用
语句函数一旦被定义后,就可以在本程序单元中被调用。调用的形式和调用内容函数形同,即:
语句函数名(实参)
语句函数定义语句是非执行语句,它应该放在所有可执行语句之前和所有的说明语句之后。
语句函数只能在本程序单元中被使用。
6.2 函数子程序
类型说明符 FUNCTION 函数名(形参表)
函数主体
函数名=表达式;
END
或者:
FUNCTION 函数名(形参表)
函数主体
函数名=表达式;
END
6.3 子例行程序
子例行程序定义的一般形式:
SUBROUTINE 函数名(形参表)
。。。
end
子例行程序的调用:
CALL 子程序名(实参)
6.4 函数子程序与子例行程序的区别
6.5 数据块子程序(BLOCK DATA)
1 数据块子程序是非执行程序单元,因而在其中不能出现任何可执行语句,也不能被别的程序调用。
2 它是专门用来给有名公用区(全局变量)中的项目赋初值的子程序。注意:COMMON变量不能直接在子程序或主程序中使用DATA命令来设置初值,要在BLOCK DATA程序模块中使用DATA命令来设置初值。
3 数据块子程序是一个完整的程序单元。它由BLOCK DATA语句开始,END语句结束。
4 BLOCK DATA只能用来设置全局变量的初值,而且在主程序执行前,全局变量的初值内容就会设置完毕,事实上这一段程序会在主程序执行前就会生效;
5 全局变量不能声明成常量,所以BLOCK DATA中不能出现PARAMETER。
6.6 MODULE
1 MODULE可以用来封装程序模块,通常是用来把程序中具备相关功能的函数及变量封装在一起。例如需要使用全局变量时,可以把全局变量都声明在MODULE中,需要使用这些变量的函数只要USE这个MODULE就可以使用它们。
2 MODULE中的变量如果不是声明成全局变量,这些变量被函数使用时,只会是函数中的局部变量。
Module module_name
……… !先写声明相关程序代码
………
contains !从contains后开始写作函数
subroutine sub_name
………
end subroutine [sub_name] !subroutine不能省略
function function_name
…………..
end function [function_name] !function不能省略
end
这个做法比较符合模块化概念,编写大程序时,可以把程序中属于绘图功能的部分放在module Graphics中,把数值计算的部分放在module Numerical中。Visual Fortran中所提供的一些扩充函数库就用这个方法来归类,像是数值函数库IMSL就放在module IMSL,3D绘图程序库OpenGL的函数就放在module OpengGL中。使用它们之前都要先use IMSL ,use OpenGL。
7.1 记录结构(什么是记录结构)
一个数据文件在磁盘上的存放格式确定了文件的记录结构。例如,在DOS或windows下用现有的编辑器建立一个文件S.DAT,其数据存放方式如下:
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
文件中存有4行数据,每行5个数据。在建立这些数据时,当每行最后一个数据输完后,打入了一个回车或换行标记(当然这是不可见标记)。以上文件有4行,每行末尾都有一个标记。因此,将每一行称为一个记录。可以这样说,一个记录包括多个数据,以回车或换行标记作为记录的结束。这就是记录的概念。
文件中的记录多少,每个记录的数据多少就是这个文件的记录方式—也称为记录结构。
由多个数据记录按一定的结构形式存入磁盘,就组成了文件。
7.2 open语句的使用:
OPEN语句的功能是打开一个文件,其语句的基本格式为:(前后位置可以变化)
OPEN(UNIT=number,FILE=filename,STATUS=status,ACCESS=access,…)
其中,
number必须是一个正整数,用来给后面的文件指定一个代码(这样方便使用write或read等命令在文件上读写),它可以使用变量或是常量来赋值。Number值最好避开1、2、5、6。因为2、6是默认的输出位置,也就是屏幕。1、5则是默认的输入位置,也就是键盘。
2 FILE=filename
这个字段用来指定所要打开的文件名称,文件名要符合操作系统规定。最好不要使用中文名
3 FORM=’FORMATTED’ OR ‘UNFORMATTED’
FORM字段只有两个值可以设置:’FORMATTED’ 或 ‘UNFORMATTED’
FORM=’FORMATTED’ 表示文件使用“文本文件”格式来保存
FORM= ‘UNFORMATTED’ 表示文件使用“二进制文件”格式来保存
这一栏不给定时,默认值为FORMATTED(潘师兄的程序大部分都没写这一栏)
4 STATUS=’NEW’或’OLD’,‘REPLACE’或’SCRATCH’或’UNKNOWN’
STATUS=’NEW’ 表示这个文件原本不存在,是第一次打开
STATUS=’OLD’ 表示这个文件原本就已经存在
STATUS=’REPLACE 文件若已经存在,会重新创建一次,原本的内容会消失。文件若不存在,会创建新文件。
STATUS=’ SCRATCH’ 打开一个暂存文件,暂存文件是临时文件,当关闭或终止程序时,文件将被删除。这时不需要指定文件名称,也就是FILE这一栏可以省略,因为程序本身会自动取一个文件名。
STATUS=’ UNKNOWN’ 缺省时的默认值, 文件存在则打开,不存在则创建,相当于NEW与OLD的综合利用。
5 ACCESS=’SEQUENTIAL’或’DIRECT’
这个字段用来设置文件读写的方法
ACCESS=’SEQUENTIAL’ 读写文件的操作会以顺序的方法来做读写,这就是“顺序读取文件”
ACCESS=’ DIRECT’ 读写文件的操作可以任意指定位置,这就是“直接读取文件”
不赋值时,默认值为SEQUENTIAL’
6. RECL=length
7 ERR=LABEL
这个字段用来设置当文件打开发生错误时,程序会跳跃到LABEL所指的行代码处来继续执行程序。
7.3 直接读取文件的操作
在FORTRAN语言中,读取文件的操作可以有“顺序读取”及“直接读取”两种方法。
所谓的直接访问文件,即将文件事先分区成好几个同样大小的小模块,(即指定记录号,且在每条记录中的数据还是按顺序的),再来进行读写的工作。
7.4 读写命令WRITE与READ语句的运用
WRITE/READ(UNIT=number,FMT=format,NML=namelist,REC=record,IOSTAT=stat,ERR=errlabel,END=ENDLABEL,ADVANCE=advance,SIZE=size)
7.5 REWIND的使用
Rewind语句将一个文件的操作位置重新定位在其第一条记录上。其语句格式为:
REWIND(u,ERR=LABEL,IOSTAT=iocheck)
u, 文件编号
ERR=LABEL 遇到错误转到LABEL语句
IOSTAT=iocheck 返回文件打开的状态,见OPEN语句。
7.6 BACKSPACE语句
Backspace语句用于在文件数据操作中,从当前数据位置回退到上一个数据位置。其语句格式为:
BACKSPACE(UNIT=number,ERR=errlabel,IOSTAT=iostat)
7.7 ENDFILE语句
把当前的文件位置变成文件的结尾。
7.8 INQUIRE语句
查询文件状态命令
调用通用名时,函数会根据参数的类型自动确定要调用的具体函数的专用名。
例如,求根函数的通用名是SQRT,专用名有三个:SQRT、DSQRT和CSQRT,分别用于求单精度实型、双精度实型和复型数据的根。当调用SQRT时,如果输入的参数为单精度实型,则会调用专用名SQRT;如果输入的参数为双精度实型,则会调用专用名DSQRT;如果参数为复型,则会调用专用名CSQRT。
之所以存在通用名与专用名共存的现象,是为了与早期的FORTRAN标准相兼容。很多早期的标准函数都是采用专用名的形式,例如在FORTRAN66中求实数相除的余数会调用AMOD函数而不是MOD函数。由于专用名一般仅限于FORTRAN子集中,在标准FORTRAN中,会通过接口将各种专用名写在同一个通用名的过程中,在代码执行时会自动调用与参数类型匹配的专用函数。因此在编写程序时,直接使用通用名就可以了。
8.2.1 绝对值函数
函数原型如下:
C=ABS(X)
其中,ABS是FORTRAN中绝对值函数的通用名。除了这个通用名之外,绝对值函数还有四个专用名,如下所示:
ABS,专用于求默认种别的实型数据的绝对值,返回值也为默认种别的实型数据。
IABS ,专用于求默认种别的整型数据的绝对值,返回值也为默认种别的整型数据。
DABS ,专用于求双精度的实型数据的绝对值,返回值也为双精度的实型数据。
CABS ,专用于求默认种别的复型数据的绝对值,返回值也为默认种别的复型数据。
8.2.2 正弦函数
1 函数原型如下:
C=SIN(X) (函数中参数的单位是弧度而不是度,注意!)
其中,SIN是FORTRAN中正弦函数的通用名。除了这个通用名之外,正弦函数还有三个专用名,如下所示:
SIN ,专用于求默认种别的实型数据的正弦值,返回值也为默认种别的整型数据。
DSIN ,专用于求双精度的实型数据的正弦值,返回值也为双精度的实型数据。
CSIN ,专用于求默认种别的复型数据的正弦值,返回值也为默认种别的复型数据。
2 函数原型如下:
C=SIND(X) (函数中参数的单位是度而不是弧度,类似MATLAB,注意!)
其中,SIND是FORTRAN中正弦函数的通用名。除了这个通用名之外,正弦函数还有三个专用名,如下所示:
SIND ,专用于求默认种别的实型数据的正弦值,返回值也为默认种别的整型数据。
DSIND ,专用于求双精度的实型数据的正弦值,返回值也为双精度的实型数据。
CSIND ,专用于求默认种别的复型数据的正弦值,返回值也为默认种别的复型数据。
8.2.3 余弦函数
1 函数原型如下:
C=COS(X) (函数中参数的单位是弧度而不是度,注意!)
其中,COS是FORTRAN中正弦函数的通用名。除了这个通用名之外,余弦函数还有三个专用名,如下所示:
COS ,专用于求默认种别的实型数据的余弦值,返回值也为默认种别的整型数据。
DCOS ,专用于求双精度的实型数据的余弦值,返回值也为双精度的实型数据。
CCOS ,专用于求默认种别的复型数据的余弦值,返回值也为默认种别的复型数据。
2 函数原型如下:
C=COSD(X) (函数中参数的单位是度而不是弧度,类似MATLAB,注意!)
其中,COSD是FORTRAN中正弦函数的通用名。除了这个通用名之外,余弦函数还有三个专用名,如下所示:
COSD ,专用于求默认种别的实型数据的余弦值,返回值也为默认种别的整型数据。
DCOSD ,专用于求双精度的实型数据的余弦值,返回值也为双精度的实型数据。
CCOSD,专用于求默认种别的复型数据的余弦值,返回值也为默认种别的复型数据。
8.2.4 反正弦函数
1 函数原型如下:
C=ASIN(X) (函数中返回值的单位是弧度而不是度,注意!)
其中,ASIN是FORTRAN中正弦函数的通用名。除了这个通用名之外,正弦函数还有两个专用名,如下所示:
ASIN ,专用于求默认种别的实型数据的反正弦值,返回值也为默认种别的整型数据。
DASIN ,专用于求双精度的实型数据的反正弦值,返回值也为双精度的实型数据。
2 函数原型如下:
C=ASIND(X) (函数中返回值的单位是度而不是弧度,注意!)
其中,ASIND是FORTRAN中正弦函数的通用名。除了这个通用名之外,正弦函数还有两个专用名,如下所示:
ASIND ,专用于求默认种别的实型数据的反正弦值,返回值也为默认种别的整型数据。
DASIND ,专用于求双精度的实型数据的反正弦值,返回值也为双精度的实型数据。
8.2.5 DMOD
语法:result=DBLE(a)
作用:把数据转换为双精度实数,比如 dble(Fre) 相当于 Fre*1.0D0,也就是把 Fre 转换成双精度的数据
参数类型:ALL
函数值类型:real(8)
在想获取日期和时间时,date,time,ctime,ltime都不标准,推举使用的是date_and_time,
这是一个 2000 年安全的 Fortran 95 内例程。
date_and_time子例程返回实时时钟的数据和日期。返回本地时间以及本地时间与通用协调时间 (UTC)(也称为格林威治标准时间,GMT)之间的时差。
1 USE DFPORT
为了使用portability library(DFPORT),可以使用这个语句。链接时会在DFPORT.LIB中查找需要的函数。
比如为了返回命令行参数就需要这个库。
在文件夹 D:\源文件\Visual Fortran 6.6(33106-060-1186591-00003)\X86\DF\LIB 中可以找到该库。
2 USE DFLIB
使用Visual Fortran的绘图功能时需要module dflib.
Visual Fortran 的绘图功能不完全是以扩充函式的形态存在,使用它的绘图功能必須在选择Project 型态时,选择Standard Graphics 或QuickWin模式。
Visual Fortran提供的绘图方法,跟SGL(笔者提供)比较起來算是各有利弊。SGL使用比較簡單的參數介面,使用效率比較好的DirectX,支援Double Buffer 動畫功能,而且並不限制只能在Visual Fortran 中使用。Visual Fortran 的QuickWin及Standard Graphics 模式在簡單的绘图使用上會比較方便,不像SGL 必須自行處理一些視窗訊息。它的绘图函式功能比較多樣,不過效率會比較差,而且不支援動畫功能。
Standard Graphics 和QuickWin 模式在繪圖方面的使用方法完全相同,它們都是呼叫相同的函式來繪圖。差別在於Standard Graphics 只能開啟一個視窗來繪圖、QuickWin 模式則可以開啟多個視窗來繪圖。QuickWin模式下可以有選單及對話窗的功能,StandardGraphics 則不行。Standard Graphics 模式的程式碼可以原封不動直接轉換到QuickWin模式下使用,但是QuickWin的程式碼並不一定可以直接拿到Standard Graphics 模式下使用。
编译程式时,请选择Fortran Standard Graphics or QuickWin Application这个模式。这个程式可以在Standard Graphics 或QuickWin模式下使用。建好Project后,再把下面的程式加入Project 中來编译:
program Plot_Demo
! 使用Visual Fortran 的绘图功能時需要module dflib
use DFLIB
implicit none
type(xycoord) :: t
integer :: result
call MoveTo(10,10,t) ! 把目前绘图的位置移动到座標(10,10)
result=LineTo(100,50) ! 從(10,10)到(100,50)間绘一条直线
! 画一个左上角為(110,10), 右下角為(150,50)的实心方形
result=Rectangle( $GFILLINTERIOR, 110,10, 150, 50 )
! 画一个可以放入在(10,60)--(150,100)方形當中的空心椭圆
result=Ellipse($GBORDER, 10, 60, 150, 100)
end program Plot_Demo
www.gaokao150.com下载更多资料请点击www.gaokao150.com1伏安法测量实验中的误差分析北京新东方学校中学部物理教研组夏梦迪伏安法是高中物理电学实验中的一种非常重要的方法和实验思想。它以欧姆定律为原理,以伏特表(直流电压表)和安培表(直流电流表)为工具,向学生们提供了一种在测量电路中的一些重要电器元件的电学性质时的最为广泛使用、也最为行之有效的方法。同时,在高中电学中以伏...
RabbitMQ的发布确认发布确认的概念:生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker 回传给生产者的确认消息中 delivery-tag 域包含了确认消息的序列号,此
网上经常浏览到非常优秀的博客或其他技术文章和讨论,之前总是加入收藏夹,但一旦换电脑就无从查找,现在专门开一篇博客收集此类网址,以备后查
zeroDateTimeBehavior=convertToNull2010-09-19 17:16zeroDateTimeBehavior=convertToNullCannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP2008年09月22日 星期一 11:13
.linear{width:100%;height:100%;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#FAFAFA,endColorStr=#FFC800); /*IE*/background:-moz-linear-gradient(top,#FAFAFA,#FFC800);...
刚开始学习响应式Web开发项目教程(HTML5+CSS3+Bootstrap),简单写出两个网页第一段:员工信息登记表<!doctype html><html><head><meta charset="utf-8"><title>员工信息登记表</title> <script type="text/java...
使用Qt编写界面的时候,必然会使用QFileDialog来读取各种各样的文件。所以QFileDialog的使用方法就必须了解。一、获取某一个文件的路径 QString QFileDialog::getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & d
泛型:安全机制。编译过后会被擦除。 思考题不会报错。因为参数化类型可以和原始类型是兼容的。好处:1,将运行时期出现的ClassCastException,转移到了编译时期。方便与程序员解决问题。2,避免强制转换。泛型的使用:格式:通过使用java提供的对象时,什么时候使用泛型呢?通常集合常见,见到泛型类:当类中操作的引用数据类型不确定的时候。早期用Obj
你认识Dapr么?出自微软,面向社区,开源的云原生工具Dapr已经发布多时了,你了解Dapr的相关知识么?无论你是.NET程序员还是Python ,或者Java ,还有Go等都可以用Dap...
eclipse格式化代码快捷键为ctrl+shift+F,非常好用,但是可能会遇到快捷键失效的问题。罪魁祸首就是:搜狗输入法!解决办法:找到搜狗输入法设置点击高级下的“系统功能快捷键”干脆取消掉这个界面的所有定义的快捷键一切恢复正常啦...
一想到这两个的区别,大多数人第一反应就是,var 修饰的变量可改变,val 修饰的变量不可改变;但真的如此吗?事实上,var 修饰的对象引用可以改变,val 修饰的则不可改变,但对象的状态却是可以改变的。