八文_文档搜索
 
设为首页   |  加入收藏夹
 八文网 - 汇聚八方文档 - 做最优秀的免费文档下载网站
 

函数与过程

文档类型: Microsoft Word 文档 文档大小:1.63M
函数与过程子程序的概念常用的pascal内置函数和过程函数的定义及其调用过程的定义及其调用变量及其作用域参数的传递
七、 练习题通常、在程序设计中、我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方、只要简单地写上其标识符即可.这样的程序段,我们称之为子程序.
子程序的使用不仅缩短了程序,节省了内存空间及减少了程序的编译时间,而且有利于结构化程序设计.因为一个复杂的问题总可将其分解成若干个子问题来解决,如果子问题依然很复杂,还可以将它继续分解,直到每个子问题都是一个具有独立任务的模块.这样编制的程序结构清晰,逻辑关系明确,无论是编写,阅读,调试还是修改、都会带来极大的好处.
在一个程序中可以只有主程序而没有子程序(本章以前都是如此),但不能没有主程序,也就是说不能单独执行子程序.
在pascal语言中、函数和过程是实现子程序设计的主要手段之一(1)自变量必须为整型的标准函数:
(A)前趋函数:Pred(x),函数结果类型为整型,如:Pred(4)=3(B)后继函数:Succ(x),函数结果类型为整型,如:Succ(4)=5(C)奇函数:odd(x),结果为布尔型.如字符函数:Chr(x)其中x为ASCII码、函数结果为字符型.如:Chr(65)=A(2)自变量为整型(或实型),但函数值类型为实型的标准函数;
(A)平方根函数:Sqrt(x)
(B)整数函数:Int(x) 取整数部分,如:INT(3.85)= 3.0(C)小数函数:Frac(x)
(D)正弦函数:Sin(x)
(E)余弦函数:Cos(x)
(F)反正切函数:Arctan(x),单位为弧度Pascal中无正切函数,用Sin(x) Cos(x)代替(G)指数函数:Exp(x),即求ex(H)对数函数:Ln(X),即求x的自然对数logex幂运算∵xy=eylnx , ∴xy =Exp(yln(x)
注意:在FreePascal中、幂的表示: xy=power(x,y) 或xy=xy(I)随机函数无x时,函数值取[0,1)之间的随机小数;有x 且为Word类型时,函数值取[0,x)之间的随机整数.前面加上:Randomize语句.
(J)圆周率函数PI=(3)自变量为整型(或实型),但函数值类型与x一致的标准函数(A)Abs(x):绝对值函数,如:Abs(-2)=2 平方函数如,如:Sqr(4)=16 Sqr(4.0)=(4)自变量为整型(或实型),但函数值类型为整型的标准函数(A)Trunc(x):取整数部分,如四舍五入,如:Round(2.8)=3 Round(-2.8)-3
文件函数:
(1) Eof(f)或Seekeof(f)未读到文件结束符Chr(26) 或CtrlZ时,函数值为false;
读到文件结束符时,函数值为true;
(2) Eoln(f)或SeekEolf(f)未读到行结束符Chr(13) 时,函数值为false;读到行结束符或文件结束符时,函数值为true;字符函数(1)小写字母转为大写字母Upcase(x) ,如:Upcase (a)=A(2)前趋函数:Pred(x),函数结果为字符型,如:Pred(4)=3(3)后继函数:Succ(x),函数结果为字符型,如:Succ(A)=B(4) 序数函数:Ord(x), 函数结果为整型,求字符对应的ASCII码
如:Ord(A)=65(5)字符函数:Chr(x) ,x为整型,函数结果为字符型,求ASCII码对应得字符
如:Chr(65)=A字符串函数(1)求长度length
定义:function Length(S: String): Integer;
(2)复制子串copy
定义: function Copy(S: String; Index: Integer; Count: Integer): String;
注意:S 是字符串类型的表达式.Index和Count是整型表达式.Copy 返回S中从Index开始,Count个字符长的一个子串.
(3)插入子串insert
定义:procedure Insert(Source: String; var S: String; Index: Integer);
注意:Source 是字符串类型的表达式.S是任意长度字符串类型变量.Index 是整型表达式.Insert 把Source插在S中Index处.如果结果字符串的长度大于255,那么255之后的字符将被删除.
(4)删除子串delete
定义:procedure Delete(var S: String; Index: Integer; Count:Integer);
注意:S 是字符串类型变量. Index和Countare是整型表达式.Delete 删除S中从Index开始的Count个字符.如果Index大于S的长度,则不删除任何字符;如果Count大于S中从Index开始的实际字符数,则删除实际的字符数.
(5)字符串转为数值val
定义: procedure Val(S; var V; var Code: Integer);
在这里:S 是由一系列数字字符构成的字符串类型变量.V 是整型或实型变量;Code 是Integer型变量
注意:Val将S转为它的数值形式.
(6)数值转为字符串str
定义: procedure Str(X : Width : Decimals ; var S:string);
注意:将数值X转成字符串形式.
(7)求子串起始位置pos
定义:function Pos(Substr: String; S: String): Byte;
注意:Substr和S字符串类型表达式.Pos在S中搜索Substr并返回一个integer值.这个值是Substr的第一个字符在S中的位置.如果在S中没有找到Substr,则Pos返回0.
(8)字符完全串连
定义:操作符把两个字符串联在一起.
(9)字符串压缩空格串连-
定义:操作符-去掉第一个字符串最后的空格后,将两个字符串联在一起.
三、函数的定义及其调用
例题1:编程找出由键盘任意输入五个整数中的最大整数.
解:设输入的五个整数为为了便于处理,引入一个中间变量t1,按如下步骤处理:
①令t1=n1;
②将t1与n2比较、将两者中较大的数放入t1;
③将t1与n3比较、将两者中较大的数放入t1;
④将t1与n4比较、将两者中较大的数放入t1;
⑤将t1与n5比较、将两者中较大的数放入t1;
⑥经过以上5步处理后,t1即为5个数中最大者.从上面规划的步骤看来,从步骤②到步骤⑤需处理的目标是相同的,因此我们可以设计一段子程序Max(x1,x2),以找出x1和x2中最大的值并返回.
Pascal程序:Program Exam41_a;
Function max(x1,x2 : integer) : integer;
BeginEnd; : );
Writeln(Max number : ,t1);End.从上例看出、引入函数实际上是将一个复杂的问题划分成若干个易于处理的子问题,将编程化简的一种有效办法,而化简的方法是多种多样的,如前面已经做过求三个数中的最大数,所以可定义一个专门求三个数中最大数的函数(Max).第一次用这个函数求出n1,n2,n3三个数中的最大数t1;第二次调用这个函数求出t1与n4,n5三个数中的最大数,也就是前三个数的最大数(已在t1中)和后面二个数再求一次,就得到五个数的最大数.因此,需要两次使用求三个数中的最大数,步骤如下:
①调用函数Max ( n1, n2, n3), 求出n1,n2,n3中的最大者t1;
②调用函数Max ( t1, n4, n5 ),求出t1, n4, n5中的最大者t2;
③输出最大数t2.Program Exam41_b;function Max(x1,x2,x3: integer): integer; {自定义函数Max}
Var XX: integer; {函数内部变量说明}begin {函数体}Max=XXend;Begin {主程序}
;; {输入五个数}; {用函数求n1, n2, n3的最大数}; {用函数求n4, n5, t1 的最大数}Writeln(Max Number , t1);Readln函数的定义
通过例一、自定义函数的格式为:
function 函数名(形式参数表): 类型; {函数首部}局部变量说明部分;begin语句系列;函数名=表达式; {函数体}函数中的形式参数接受调用函数时所传入的值,用来参与函数中的运算.
说明:
①函数由首部与函数体两部分组成.
②函数首部以关键字function开头.
③函数名是用户自定义的标识符.
④函数的类型也就是函数值的类型,所求得的函数值通过函数名传回调用它的程序.可见、函数的作用一般是为了求得一个值.
⑤形式参数简称形参,形参即函数的自变量.自变量的初值来源于函数调用.在函数中、形参一般格式如下:
变量名表1:类型标识符1;变量名表2:类型标识符2;变量名表n:类型标识符n可见形参表相当于变量说明,对函数自变量进行说明,但应特别注意:此处只能使用类型标识符,而不能直接使用类型.
⑥当缺省形参表(当然要同时省去一对括号)时,称为无参函数.
⑦函数体与程序体基本相似,由说明部分和执行部分组成.
⑧函数体中的说明部分用来对本函数使用的标号,常量,类型,变量,子程序加以说明,这些量只在本函数内有效.
⑨函数体的执行部分由begin开头,end结束,中间有若干用分号隔开的语句,只是end后应跟分号,不能像程序那样用句号.
⑩在函数体的执行部分,至少应该给函数名赋一次值,以使在函数执行结束后把函数值带回调用程序.
函数的调用我们可以在任何与函数值类型兼容的表达式中调用函数,或者说,函数调用只能出现在允许表达式出现的地方、或作为表达式的一个因子.
函数调用方式与标准函数的调用方式相同.
函数调用的一般格式:或(实在参数表)
说明:①实在参数简称实参.实参的个数必须与函数说明中形参的个数一致,实参的类型与形参的类型应当一一对应.
②调用函数时,一般的,实参必须有确定的值.
③函数调用的步骤为:计算实参的值,赋给对应的形参;例题二求正整数A和B之间的完全数(Ac then swap (a,c);
程序中Procedure Swap是定义过程名、从作用来看,过程与函数是相似的,都能将复杂的问题划分成一些目标明确的小问题来求解,只不过函数有值返回而过程则没有.自定义过程的一般格式如下:Procedure 过程名(形式参数表); {过程首部}语句部分; {过程体部分}[例4.4]如果一个自然数除了1和本身、还有别的数能够整除它、 这样的自然数就是合数.例如15,除了1和15,还有3和5能够整除,所以15是合数是三个连续的合数,试求连续十个最小的合数.
解:从三个连续合数中可看出、它们正好是两个相邻素数13和17 之间的连续自然数,所以求连续合数问题可以转化为求有一定跨度的相邻两个素数的问题.因此,求连续十个最小的合数可用如下方法:
①从最小的素数开始,先确定第一个素数A;
②再确定与A相邻的后面那个素数B;(作为第二个素数);
③检查A,B的跨度是度否在10 以上,如果跨度小于10,就把B 作为新的第一个素数A,重复作步骤②;
④如果A,B跨度大于或等于10,就打印A,B之间的连续10个自然数,即输出A1, A2, A3 , A10.
Program exam44;
var a,b,s,n: integer;
yes: boolean;
procedure sub(x: integer;var yy: boolean); {过程:求x是否为素数}
var k,m: integer; { 用yy逻辑值转出}for m=3 tokdoif odd(m) thenifxmod m=0 then yy=false;begin {主程序}repeata=b; {a 为第一个素数}yes=true;inc(b,2); {b是a后面待求的素数}sub(b,yes); {调用SUB过程来确认b是否为素数}if yes then s=b-a; {如果b是素数,则求出跨度s }until yes;writeln;readlnend.程序中的过程SUB,用来确定b是否为素数.过程名后面圆括号内的变量是形式参数,简称为形参.过程SUB(x: integer; Var yy: boolean) 中的x是值形参,而前面冠有Var的yy是变量形参.值形参只能从外界向过程传入信息,但不能传出信息;变量形参既能传入又能传出信息.本程序过程SUB中的x是由调用过程的实在参数b传入值,进行处理后,不需传出;而yy是把过程处理结果用逻辑值传出、供调用程序使用.
试把[例4.3]程序中的过程SWAP(Val x,y: integer),将x,y前面的Var去掉、就变成了纯粹的值形参,就不能将过程所处理的结果传出去,也就无法得到处理后的结果,通过运行程序比较、可以非常明显地看到值形参和变量形参的区别.
调用过程的格式为: 过程名(实在参数表) ;调用过程名后面圆括号内的实在参数与定义过程的形参表必须相对应、调用过程相当于一个独立语句,可单独使用.
[例4.5]将合数483的各位数字相加(483)=15,如果将483分解成质因数相乘: 483=3723,把这些质因数各位数字相加(3723),其和也为15.即某合数的各位数字之和等于它所有质因数的各数字之和.求500以内具有上述特点的所有合数.
解:①设n为所要求的合数,让n在1~500间循环做以下步骤;
②用t1,t2分别累计合数n及n的质因数的各位数字之和、初值均为0;
③调用过程SUB3进行非素数判定,以布尔变量yes的真假值判定是否,yes的初值为true,如果为(not true)非素数,就做步骤④,⑤,⑥;否则取新的n值,重复步骤③;
④调用SUB1,求n的各数字之和、传送给t1;
⑤调用SUB2,求n的各质因数,对于每个质因素都通过SUB1求它各位数字之和、将所有各质因数字传送给t2.
⑥如果t1=t2(各位数字之和等于它所有质因数的各数字之和)、则输出此n.
PASCAL程序:program exam45;
var n,t1,t2,tatol: integer;
procedure sub1(x:integer; var t:integer); {过程:分离x的各位数字}begin {并求各位数字之和}until x=0
procedure sub2(x: integer; var t: integer); {过程:分解质因数}
var xx,tt:integer;while x>1 doifxmod xx=0 thent=ttt;x=x div xxendelse inc(xx)
procedure sub3(x: integer;var yy: boolean); {过程:判断x是否为素数}
var k,m: integer;for m=2 ; {调用过程求素数}if not yes then {如果非素数就}sub1(n,t1); {调用过程求n的各位数字之和}sub2(n,t2); {调用过程求n的各质因数的数字之和}if t1=t2 then write(n:6); {打印合格的合数}全程变量和局部变量全程变量在程序开头的说明部分说明的量称为全程变量,其作用域分两种情况:在全程变量和局部变量名字不同时,其作用域是整个程序在全程变量和局部变量同名时,其全程变量的作用域不包括同名局部变量的作用区域;
局部变量在过程体和函数体内说明的量成为局部变量,其作用域只在其子程序,当该子程序被调用时,局部变量才分配有效的存储单元、当返回调用的程序时,局部变量所在的单元将被释放.
例:全程变量的作用域Program p7;
Var m:integer;Procedure test1;Writeln(before the test1 call,themis ,m);
Test1;Writeln(after then test1 call ,thems ,m);
运行结果:
Before the test1 call,themis :5After then test1 call,themis :100
再请看下面的程序:Procedure test2;Writlen(before the test2 call,themis ,m);
Test2;Writeln(after the test2 call,themis ,m);
运行结果是:
Before the test2 call,themis :5After then test2 call,themis :5
引入局部变量的:作用:节省内存空间,给结构化程序设计带来便利.在某些时候,为了使变量之间不相互干扰,一般使用局部变量.当变量之间需要某种联系,可以选择全程变量.
形参和实参
函数和过程的调用一般步骤归纳如下:实参和形参结合-》执行函数或过程体-》返回到调用处我们重点学习形参中的值参和变参值参和变参值参,是指在形参表前面没有var的这类参数,如
Function ;
其中的x类似局部变量,仅为过程和函数的调用提供初值,而不影响实际参数的值.在调用过程和函数时,值参所对用的实际参数可以是表达式,如fac(24)
例:值参数分析
Var a:integer;
Procedure sum(b:integer);运行结果变量参数,是指在形参表中前面有var说明的参数,如果需要过程向调用程序返回值时,应当采用变量形参,需要指出的是,函数不允许使用变量形参,变量形参要求调用他的实参是同一类型的变量而不是表达式.在过程的执行过程中、遇到对变量形参的应用或者赋值,就是对相应的实参的应用或赋值.因此对变量形参的操作就是对实参本身的操作.
变量形参的分析
Procedure sum(var b:integer);Writeln(a,a);值参和变参的分析
Var x,n:integer;
Procedure chan(x:integer;var y:integer);
执行结果部分程序阅读1)某部队举行一次军事演习,A,B两队约好在同一时间从相距100公里的各自驻地发相向运动,A队的速度为10公里小时,B队的速度为8公里小时.一通讯员骑马从地同时出发为行进中的两队传递消息,速度为60公里小时.每遇一队立即折回驶向另一队,当两队距离小于0.5公里时,停下来不再传递消息.求此时通讯员跑了多趟(从一队到另一队为一趟)
分析:在通讯员传递的过程可以分为两种状态:A-B,B-A,我们分别来分析这两中情况;(我们假定S代表A,B之间的距离,三个速度分别为va,vb,vc跑一趟的时间为t)
A-B:经过的时间为t=s(vbvc),这时候距离变成s=s-(vavb)t,趟数total=total1
B-A:经过的时间为t=s(vavc),这时候距离变成s=s-(vavb)t, 趟数total=total1
源代码:constvar
total:integer;
procedure js(x:real,var s:real);
total=total1;vr=vavb;until s
doc文档的标签: 过程 函数
更多推荐标签: 数学统计   华联物流配送   婴宁读后感   软件工程知识   超市销售流   数学课件制作   农业技术用纸   数据清洗   考点加盟书   公开密钥技术   产品专利申请   世界汽车课件   军事思想   幕天席地   医古文基础   广告发展状况   活塞制造工艺   寒假实践活动   吊装委托合同   饲料实习总结   雪花人   思想道德论文   运算测试   物流外委标书   新长征突击手   软件售后服务   制造业培训   好词名句   输送带市场   长沙导游考试  
相关文档推荐
函数的定义
项目管理的几大过程
坚持全过程审计
总体设计的过程
获取信息的基本过程
教育科学研究过程
1心理过程
游戏过程中的反思
营销与营销过程
PHP常用库函数
资讯系统开发过程-
火力发电厂生产过程
软件过程
常用函数
程序开发过程
PHP函数清单
软件测试策略与过程
网站项目的需求过程
PHP的函数
培训过程控制
推荐文档下载
火电厂蒸汽伴热与电伴热方案的技术经济比较
财务代理协议书
梦工场简介
自我介绍
广东移动优号联盟商家合作协议书
广东省重点中等职业学校评估实施细则
人力资源事务代理协议书
设计艺术学专业攻读硕士学位研究生培养方案
战略发展报告
多媒体基本知识
代理(财务)记帐协议书
关于统一换发并规范药品批准文号格式的通知
关注心理弱势
善德生化科技股份有限公司
专题研究报告主题:学习自在做自己--热量
实物项目(车辆)转让上市申报书
新编的莱茵河与淮河的案例分析题
财务管理课堂案例分析之五
活动精彩不断
解决方案
 
文档下载提示:
·最新免费文档下载、毕业论文免费下载、Word文档下载、Excel表格下载、PDF电子书下载、PowerPoint提案下载
·所有文档均为网友上传,仅供学习参考,用作其它用途时请征得相关权益人许可.
·八文网只提供文档共享平台,不对文档内容的正确性及相关内容所引发的后果负责.
·如此文档"函数与过程"涉及您的权益,请附上网址来信告知web_8wen(#)126.com,本站将认真配合并改正。
Copyright ©2005-2008 八文网-  8Wen.com . All rights reserved.