63子程序过程自定义函数Word文档下载推荐.docx
- 文档编号:15377440
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:16
- 大小:126.67KB
63子程序过程自定义函数Word文档下载推荐.docx
《63子程序过程自定义函数Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《63子程序过程自定义函数Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
方法是:
在调用程序需要调用的地方使用DO<
子程序名>
[WITH<
参数表>
]
说明:
WITH<
可以在调用子程序时,把当前程序的一些参数传递到被调用的子程序中去。
子程序可以嵌套调用,但不得超过128层。
3.例1:
计算S=5!
+7!
+20!
+26!
算法:
在求和的过程中,多次需要计算一个数的阶乘,即N!
所以可以把N!
编写成子程序JC.PRG需要求某数的阶乘的时候调用JC.PRG就可以了。
方法:
同以前编写程序一样,建立一个供主程序调用的子程序JC.PRG,功能是实现求一个数的阶乘,编写完之后保存下来。
再编写一个主程序(S.PRG),主程序中如果需要计算某个数的阶乘时,直接调用JC.PRG即可。
4.参数传递
子程序、过程或自定义函数在被调用时常常需要进行参数传递。
比如:
内存变量起着存储和传递的作用。
内存变量的数据传递属性:
1.内存变量的作用域
程序分主程序和子程序,程序中的变量也有不同的级别和作用范围。
即内存变量的作用域。
内存变量的作用域可以分为三种:
全局变量、私有变量、本地变量。
(1)全局变量(公有变量)
定义后能在各级程序段中使用的变量,其值可以随意调用和修改。
使用前必须说明其是公有变量。
说明方法:
PUBLIC<
内存变量表>
功能:
说明内存变量表中的变量或数组为全局变量,并为它们赋初值.F.
例:
PUBLICX,Y
说明:
①全局变量一旦建立就一直有效,即使程序运行结束也不会消失。
只有执行清除内存变量的命令才会释放。
②命令窗口中定义的变量和系统自动隐含建立的变量也是全局变量。
③子程序中使用的内存变量要想提供给上一级或其它并列模块,必须将其定义为全局变量。
(2)私有变量
在程序中直接使用而由系统自动隐含建立的变量都是私有变量。
它的作用域是在当前模块程序及其下级各层模块。
一旦程序返回到上级模块,则自动清除。
一般也要先定义,在子程序中出现的没有定义的变量,默认为是私有变量。
默认是私有变量,为什么还要定义?
当子程序用到的变量是主程序已经建立并使用过的,再次的使用会影响主程序中此变量的值。
这时用PRIVATE定义其为私有的,不仅可以说明其性质,还可以隐藏主程序中可能存在的变量,使这些变量在子程序中暂时无效。
举例:
定义格式:
PRIVATE<
声明私有变量,隐藏上层模块定义的同名变量。
以使当前模块运行结束回到上层模块时,隐藏的变量自动恢复,并保持原值。
PRIVATEV1
V1={^2004/11/9}
V2=100
?
V1,V2
RETURN
SETTALKOFFSUB.PRG
V1=10
V2=15
DOSUB
?
V1,V2
(3)本地变量(局部变量)
只能在建立它的模块中使用,不能在上层或下层模块中使用。
当建立它的模块程序运行结束时,会自动释放。
必须先建立后使用。
格式:
LOCAL<
由于LOCAL和LOCATE前四个字母相同,所以不能缩写。
子程序P1.PRG
主程序PLP.PRG
三种变量作用域示例:
CLEAR
PUBLICX1,X2,X4(3,2)
STORE0TOX4
LOCALX3
STORE5*8TOX5
[执行子程序之前结果:
]
LISTMEMOLIKEX*
DOP1
[执行子程序之后结果:
?
[X1=],X1,[X2=],X2,[X3=],X3,[X5=],X5
PRIVATEX2
X2={^2004-08-15}
X3=X2+5
X5=3*X5/4
[子程序结果:
P2.PRG
P1.PRG
LOCAL建立局部变量的同时也具有隐藏与上层模块同名变量的作用。
它只能在它所在的本地模块内隐藏,一旦到了下层模块,这些同名变量就会重新出现。
PRIVA&
&
隐藏同名变量,建立私有变量A
A=80
LOCALB&
隐藏同名变量,建立局部变量B
DOP2
A,B
RETU
A=[ATCM]
B=[(0551)5169268]
PUBLICA,B
A=50
B=100
2.参数传递
(1)调用程序把参数传递给子程序
DO<
文件名>
WITH<
实际参数表>
(2)被调用程序接收参数
子程序接收调用程序传递过来的参数,对参数进行处理。
接收参数的命令:
格式:
PARAMETERS<
形式参数表>
实际参数:
简称实参。
可以是常量,变量或表达式
形式参数:
简称形参。
只能是变量。
用DO语句调用程序时,系统会自动把实参传递给形参,接收参数的语句PARAMETERS就可以接收实参了。
实参个数<
形参个数多于的形参取逻辑值.F.
实参个数>
形参个数运行错误!
①接收参数的命令应该是模块程序的第一条可执行的命令。
②参数个数不能超过27个
③PARAMETERS<
中的形参被看作私有变量。
(3)参数传递方式:
如果实参是常量或表达式,系统会把实参的值计算出来并且赋给相应的形参,称为‘按值传递’。
如果实参是变量,那么传递给形参的不是值,而是变量的地址。
即形参和实参其实是一个存储区域,只是叫了两个名字。
这种情况称为‘按引用传递’。
这种情况子程序中如果改变了形参变量的值,主程序中实参值也会改变。
如果实参是变量,又想按值传递,可以把变量放在圆括号内,使之成为表达式。
DOSUB1WITH3,4
STORE50TOX1,X2
DOSUB1WITHX1,(X2)
X1,X2
DOSUB1WITHX1,x1+x2
RETURN
*SUB1.PRG
PARAMETERSA,B
A=A+5
B=B+2
6.3.2过程
1内部过程和过程文件
将一些功能相对独立的公用模块编写成一个个程序段,称之为过程。
子程序:
作为一个磁盘文件单独存储在磁盘上,又称外部过程。
子程序局限:
每调用一次子程序,系统就要打开一次磁盘文件,消耗内存,影响效率。
如果一个程序调用很多子程序的话,还要受系统允许打开文件数的限制。
内部过程:
是作为程序中一个独立单元出现的,通常放在主程序的最后,供主程序调用
过程文件:
将多个子程序(功能模块)组成一个大的程序文件(.PRG),只要对该文件读取一次,就可以调用它所包含的所有的功能模块,就能提高系统运行速度,称之为过程文件。
过程文件就是包含若干个过程的程序文件。
2.内部过程的格式:
(通常放在主程序的最后)
PROCEDURE<
过程名1>
[PARAMETERS<
形参表>
<
语句序列>
[RETURN[<
]]
ENDPROC
功能:
定义一个过程。
①PROCEDURE:
表示一个过程的开始,并命名过程名。
过程名的命名规则。
②ENDPROC:
表示一个过程的结束。
③RETURN表示控制返回到调用程序(或命令窗口),并返回表达式的值。
④“有参过程”,“无参过程”
例1:
SETTALKOFF
CLEA
WAIT‘输入一个字符:
’TOC
INPUT‘输入字符的个数:
’TON
DOLINEWITHC,N
SETTALKON
CANCEL
PROCEDURELINE
PARAMETERSCH,M
FORJ=1TOM
CH
ENDFOR
ENDPROC
例2求多边形的面积(实际上是已知各边,求各个三角形的面积的和)
SETTALKOFF
PUBLICS
A=0
DODUOWITH6.1,6.2,8.6
A=A+S
DODUOWITH8.6,7.8,2.4
DODUOWITH7.8,4.4,5
’多边形面积是:
’,A
CANCEL
PROCDUO
PARAX,Y,Z
P=(X+Y+Z)/2
S=SQRT(P*(P-X)*(P-Y)*(P-Z))
RETURNS
3.过程文件的构成(单独作为一个程序(命令)文件保存下来)
建立方法同普通的程序文件相同:
MODICOMM<
扩展名也是.PRG
过程文件里只包含过程,必须按如下格式写:
[PARA<
语句序列1>
PROCEDURE<
过程名2>
语句序列2>
……
过程名N>
语句序列N>
ENDPROC
将N个过程存储在一个过程文件中(.PRG)。
4.过程文件的打开和关闭.
在调用过程文件中的过程之前首先要打开过程文件.
(1)过程文件的打开.
SETPROCEDURETO[过程文件1[,过程文件2,…]][ADDITIVE]
打开一个或多个过程文件,一旦一个过程文件被打开,那么该过程文件中的所有过程都可以被调用。
(2)过程文件的关闭
格式1:
SETPROCEDURETO
格式2:
CLOSEPROCEDURE
关闭所有打开的过程文件
格式3:
RELEASEPROCEDURE[过程文件1[,过程文件2,…]]
关闭指定的过程文件
5.过程的调用
过程名>
MAN4.PRG
例1:
将求阶乘,求圆面积,输出结果编制成3个过程。
合成一个过程文件GC1.PRG
*GC1.PRG
PROCEDUREPROC1&
求半径为R的圆的面积S
S=3.14159*R*R
"
面积是:
"
S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 63 子程序 过程 自定义 函数