




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 上章回顾: 理解数组的概念,含义与定义方法 掌握引用数组元素的方法 理解记录的概念,含义与定义方法 掌握使用记录常用方法第第5章章 过程与函数过程与函数 本章要点: 理解过程与函数的概念 掌握过程与函数的定义方法 掌握过程与函数中三种参数的传递的概念及特点 掌握过程与函数的调用方法5.0 循序渐进学理论 5.0.1 过程与函数的概念过程与函数的概念 1过程的概念 Delphi语言的过程有两种:标准过程与自定义过程。标准过程是系统内部定义好的过程 。自定义过程是用户自己编写代码定义的过程,它又分为事件过程与通用过程两种。2函数的概念 函数也是完成某一功能的程序段,与过程最重要的区别在于函数有返
2、回值而过程没有。Delphi的函数也有两类:标准函数和自定义函数。 5.1 过程过程 过程分为标准过程与自定义过程两种。标准过程是指系统内部定义的过程,无需编写代码,即可直接调用。 自定义过程则由用户自行编写代码以完成指定的操作,包括事件过程与通用过程两类。 5.1.1 事件过程的创建与调用事件过程的创建与调用 一个事件过程也可以被多个对象、多个事件共享。其方法是:首先为其中的一个对象事件建立事件过程,然后在创建其他对象的事件过程时,从事件名称右边的下拉列表中选择已经建立的事件过程名即可。1. 事件过程的创建 1)、在对象观察器(Object Inspector)中选择指定对象(控件),然后在
3、事件(Events)选项卡中选择指定的事件名称,并用鼠标双击其右边的空白区域,Delphi将自动产生一个默认的事件过程。 2)、可以手动添加事件过程。在事件选项卡中添加,在单元文件中编程。2. 事件过程的调用 可以在过程代码中调用已经创建的事件过程。如为按钮Button3创建独立的OnClick事件过程来调用已经存在的Button1Click事件过程:5.1.1 事件过程的创建与调用事件过程的创建与调用5.1.2 通用过程的语法格式通用过程的语法格式过程的定义包括过程原型、过程题的定义Procedure 过程名过程名(形参表形参表) 局部声明局部声明begin 语句列语句列;end;u注意事项
4、:注意事项: 形参说明的格式为: Var | Const形参名形参名:类型类型 其中保留字Var表示实参(变量)按传址方式传递到形参,形参在过程中所作的改变,退出过程后将影响实参的值,因此又称为变参。保留字Const表示该形参在过程中的值被当作常量而不能改变。 过程体是一个程序段,由局部声明部分与可执行部分组5.1.3 通用过程的创建与调用通用过程的创建与调用【例5-1】在一个窗口中包含3个按钮,当用户单击其中一个时,要求其他个别按钮不能使用,如程序所示。procedure Button(Sender: TObject);begin Case (Sender as TButton).Tag o
5、f 0 :form1. Button2.Enabled := False; 1 : form1.Button1.Enabled := False; 2 : Begin form1.Button1.Enabled := True; form1.Button2.Enabled := True; end; end; end;procedure TForm1.Button1Click(Sender: TObject);beginbutton(sender);end;【例5-2】计算阶乘5!,7!15!及其他们的和,如程序所示。procedure Fact(m : Integer; var total
6、: Int64); var i : Integer;begin total := 1; For i := 1 To m do total := total * i;end;procedure TForm1.Button4Click(Sender: TObject);var a : integer; tot, s : Int64;begin s := 0; a := 5; fact(a, tot); s := s + tot; a := 7; fact(a, tot); s := s + tot; a := 15; fact(a, tot); s := s + tot; Panel1.Capti
7、on := format(5!+7!+15!=%d, s);end;5.2 函数函数 函数是子程序的另一种形式,当子程序的执行返回一个值时,使用函数就比较简单。Delphi提供了许多内部函数,如Sqrt、Cos或Format。用户在编写程序时,只需写出函数名并给定参数就能得到函数值。当在程序中需要多次用到某一公式或要处理某一函数关系,而又没有现成的内部函数可以使用时,Delphi允许编写用户自定义的函数。5.2.1 函数的语法格式函数的语法格式 Function 函数名函数名(形参表形参表) :返回类型返回类型; 局部声明局部声明begin 语句列语句列;end;1. 函数首部类型。函数的返回
8、值通过函数名或预定义的Result(隐含变量)带回。2. 函数体 函数体与过程体相仿,也是一个程序段,由局部声明部分与可执行部分组成【例5-3】已知直角三角形两直角边,计算第三边(斜边)的函数:procedure TForm1.Button1Click(Sender: TObject);var i,j,k:real;begini:=strtofloat(edit1.Text);j:=strtofloat(edit2.Text);k:=sqrt(sqr(i)+sqr(j);showmessagefmt(三角形的第三边长度为:%1.4f,k);end; 5.2.2 函数的创建与调用函数的创建与调用
9、在“代码”编辑窗口中,把光标定位在已有过程或函数的前面,即可输入函数的声明。【例5-4】求1到10的阶乘之和如程序所示 Function fact(x : Integer) : int64;Var p : int64; i : Integer;begin p := 1; For i := 1 To x do p := p * i; fact := p;/ 赋值给函数名End;procedure TForm1.Button1Click(Sender: TObject);Var sum : Int64; i : Integer;begin sum := 0; for i := 3 To 10 do
10、 sum := sum + fact(i); panel1.Caption := format(1!+2!+.+10! = %d,sum);end;【例5-5】求输入三个任意整数,求其最大公约数。 如程序所示Function Hcf(m, n :Int64) : Int64;var r, c : Int64;begin If m n Then begin c := m; m := n; n := c; end; r := m Mod n; While r 0 do begin m := n; n := r; r := m Mod n; end; Hcf := n;end;procedure T
11、Form1.Button1Click(Sender: TObject);var l, m, n, t : int64;begin l := strtoint(Edit1.Text); m := strtoint(Edit2.Text); n := strtoint(Edit3.Text); If l * m * n 0 Then t := Hcf(Hcf(l, m), n); panel1.Caption := format(3个数的最大公约数是:%d,t);end;5.3 5.3 向子程序传递参数向子程序传递参数 调用子程序的目的,就是在一定的条件下完成某一工作或计算某一函数值。外界要把条件
12、告诉子程序,或者反过来,子程序要把某些结果报告给外界,这就是子程序与外界的通讯。 形式参数形式参数是指在定义过程或函数时,出现在过程或函数首部中的变量名,表示用于接收数据的变量。 实际参数实际参数是指在调用过程或函数时,传送给过程或函数的常量、变量或表达式。 实参表和形参表中对应的变量名不必相同,但是变量的个数必须相等,而且各实际参数的书写顺序必须与相应形式参数的类型相符。所谓类型相符,对于变量参数就是类型相同;对于值参数则要求实际参数对形式参数赋值相容。5.3.1 参数传递方式参数传递方式 按照参数传递方式的不同,Delphi中函数或过程的参数可分为变量参数、常量参数、值参数和外部(out)
13、参数。1. 变量参数 变量参数的传递方式为“按地址传递”,即将实参变量的地址传递给形参,这样形参与实参表示同一个存储单元。如果在过程或函数中改变形参变量的值,将同时影响实参变量的值。 2. 常量参数 在过程或函数首部形参表中的参数前面如果使用保留字Const,则表示该参数为常量参数。 无论实参是否变量,常量参数在过程中总是被当作常量,其值不能被改变。5.3.1 参数传递方式参数传递方式3. 值参数 在过程或函数首部形参表中的参数前面如果没有保留字,系统缺省该参数为值参数。 值参数的传递方式为“按值传递”,即将实参的值传递给形参,如果在过程或函数中改变形参变量的值,则所作变动不会影响实参变量。4
14、. 外部参数 在过程或函数首部形参表中的参数前面如果使用保留字out,则表示该参数为外部参数。5.使用缺省参数在声明过程或函数时,可以给形参指定一个缺省值,指定缺省值的方法是:在形参的类型后面使用“=”,并给出一个具体的值(常量)。如:Procedure MyProcedure(x : Real , y : Real = 10) ; begin end; 5.3.2 函数与过程的重载函数与过程的重载 在Delphi中,允许有名字相同而参数不同的过程或函数,这就是过程和函数的重载(Overload)。注意:在定义有默认参数的重载函数和过程时,必须让系统能从参数中区分出应该调用哪一个函数或过程,否
15、则该定义是非法的。5.4 子程序的嵌套与递归子程序的嵌套与递归 在一个子程序(过程或函数)中包含另外一个子程序(过程或函数),称为子程序的嵌套。 递归调用在处理阶乘运算、级数运算、幂指数运算等方面特别有效。5.4.1 子程序的嵌套子程序的嵌套1. 嵌套层次 在Delphi中,程序具有一定的层次结构。允许子程序的内部再定义新的子程序,即子程序可以嵌套定义。为了准确地表达嵌套层次,通常将嵌套从外向内进行编号,并把相应子程序的层号称为子程序的嵌套深度。 【例5-6】输入参数,求其组合数如程序所示 Function comb(n1, m1 : int64):real;var s, t, u : rea
16、l; Function fact(x : int64):real;/ 内部函数首部 var i : integer; p : real;/ 内部函数体开始begin p := 1; For i := 1 To x do p := p * i; fact := p; end;/ 内部函数体结束begin s := fact(n1); t := fact(m1); u := fact(n1 - m1); comb := s / (t * u);end;procedure TForm1.Button1Click(Sender: TObject);var n, m, c : int64;begin m
17、 := strtoint(Edit1.Text); n := strtoint(Edit2.Text); If m n Then showMessage(请保证参数的正确输入!)/ 参数输入时必须保证n = m else Edit3.Text := Format(%-10.0f, comb(n, m);end;5.4.2 子程序的递归子程序的递归 递归函数论是现代数学的一个重要分支,数学上常常采用递归的办法来定义一些概念,例如,自然数n的阶乘可以递归定义为:【例5-7】契比雪夫多项式定义如下:Function fnt(n : integer; x : Single) : Single;begi
18、n case n of 0 : fnt := 1; 1 : fnt := x; Else fnt := 2 * x * fnt(n - 1, x) - fnt(n - 2, x); end;end;procedure TForm1.Button1Click(Sender: TObject);var m : Integer; y : Single;begin m := strtoint(edit1.Text); y := strtofloat(edit2.Text); edit3.Text := format(%f,fnt(m, y);end;本章回顾: 理解过程与函数的概念 掌握过程与函数的定
19、义方法 掌握过程与函数中三种参数的传递的概念及特点 掌握过程与函数的调用方法上机练习上机练习1 1 :验证哥德巴赫猜想:验证哥德巴赫猜想 【实例题目】 德国著名数学家哥德巴赫提出:任何一个大于等于6的偶数都可以表示为两个素数之和。请编写程序验证这一猜想。程序的设计界面如图5-13所示,程序运行时,在第一个编辑框里输入任意大于等于6的偶数,单击【验证】按钮,则在另一编辑框里显示两个符合要求的素数。程序运行界面如图5-14所示。要求判断某数是否为素数用一个函数来实现。5.5 上机练习重应用 图5-13 程序设计界面 图5-14 程序运行界面 上机练习上机练习2 2 :斐波那契(:斐波那契(Fibonacci)数列)数列 【实例题目】 斐波那契(Fibonacci)数列是一个典型的可用递归求解的问题。该数列来源于兔子的繁殖,大意是:小兔子和大兔子没有繁殖能力,只有老兔子才有繁殖能力。假设第1个月有一对小兔子,第2个月长
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 嵌入式应用场景试题及答案
- 计算机三级考试注意事项试题及答案
- 2024–2025年中国数据标注产业深度分析报告
- 组织中的冲突管理与领导策略试题及答案
- 电子商城销售商品采购合同
- 家庭学习计划(4篇)
- 环境工程水处理技术实务试题
- 物流管理理论及应用测试题
- 测试工具的性能评估方法试题及答案
- 数据库表的设计与增强方法试题及答案
- 中国现代文学史考试题库及答案
- 河南省内乡县2023-2024学年部编版八年级历史下学期期中试卷(原卷版)
- 烟叶烘烤特性及特殊烟叶烘烤技术培训
- YYT 0506.8-2019 病人、医护人员和器械用手术单、手术衣和洁净服 第8部分:产品专用要求
- 物料报废单完整版本
- 大气污染控制关键工程程设计
- 广东省深圳市南山区2023-2024学年四年级下学期期末科学试题
- (高清版)TDT 1015.1-2024 地籍数据库 第1部分:不动产
- 01互联网安全风险及其产生原因 教学设计 2023-2024学年苏科版(2023)初中信息科技七年级下册
- CJT156-2001 沟槽式管接头
- 社工招聘笔试考试(含答案)
评论
0/150
提交评论