第02章面向对象的Pascal语言.ppt

上传人:sccc 文档编号:4873157 上传时间:2023-05-20 格式:PPT 页数:123 大小:709.01KB
返回 下载 相关 举报
第02章面向对象的Pascal语言.ppt_第1页
第1页 / 共123页
第02章面向对象的Pascal语言.ppt_第2页
第2页 / 共123页
第02章面向对象的Pascal语言.ppt_第3页
第3页 / 共123页
第02章面向对象的Pascal语言.ppt_第4页
第4页 / 共123页
第02章面向对象的Pascal语言.ppt_第5页
第5页 / 共123页
点击查看更多>>
资源描述

《第02章面向对象的Pascal语言.ppt》由会员分享,可在线阅读,更多相关《第02章面向对象的Pascal语言.ppt(123页珍藏版)》请在三一办公上搜索。

1、第2章 面向对象的Pascal语言,Delphi实用教程,第2章 面向对象的Pascal语言,第2章 面向对象的Pascal语言,2.1 Object Pascal概述,2.1.1 标识符标识符(Identifiers)是以字母或下划线开头、后跟字母、数字或下划线所组成的串,其作用是标识常量、变量、类型、属性、对象、过程、函数、程序、单元、库和组件库等。Object Pascal标识符对字母的大小写是不敏感的,有效长度为255个字符。2.1.2 保留字Object Pascal的保留字:AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,END,FILE

2、,FOR,FUNTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH,EXPORTS,SHR,STRING,ASM,OBJECT,UNIT,CONSTRUCTOR,IMPLEMENTATION,DESTRUCTOR,USES,INHERITED,INLINE,INTERFACE,LIBRARY,XOR,SHL,第2章 面向对象的Pascal语言,2.1.3 注释,(1)大括号注释:“”与“”的成对使用表示它们之间的内

3、容为注释部分(2)带星号的小括号注释:“(*”与“*)”的成对使用表示它们之间的内容为注释部分。(3)双斜杠注释“/”:表示所在行的该符号之后的内容为注释。例如:begin 下面的这条语句是为组件Label1设置Caption属性值/注释 Label1.caption:=请输入文件名:end.,第2章 面向对象的Pascal语言,2.1.4 常量和变量,1.常量 一般常量如123,-10,-10.56,”abc”,TRUE等都是一般常量。符号常量 用const关键字来声明常量。语法:const 常量名=表达式;如const pi=3.14;说明:(1)常量在说明时就被赋予了一个值,在程序执行过

4、程中是不可改变。(2)等号的右边只能出现一般常量、已声明的常量或者常量表达式。,第2章 面向对象的Pascal语言,2.1.4 常量和变量,2.变量 变量是程序代码中代表一个内存地址的标识符,而此地址中的内容在程序代码执行时可以被改变。在使用变量前必须对它进行说明,并说明它的类型。语法:var 变量名表:类型名;说明:(1)类型名是Object Pascal中任何有效的数据类型。(2)变量名表中的变量与变量之间用逗号分隔开,变量与类 型名之间用冒号分隔。例如:var I,J:Integer;/定义两个整型变量I和J(3)当有几个连续的变量声明语句时,可以不必在每个声明语 句前都用保留字var,

5、只需在最开始处使用var,例如:var x,y:real;/定义两个实型变量x和y k,j:integer;/定义两个整型变量k和j flag:Boolean;/定义一个逻辑型变量,第2章 面向对象的Pascal语言,2.2 数据类型,Object Pascal是一种强类型语言,其变量在使用之前都要声明其数据类型。数据类型决定了它能够存储数据的形式、数据的范围以及它能够进行的运算。Object Pascal的数据类型分为简单数据类型、字符串类型、构造类型、指针类型、过程类型和可变数据类型等。,第2章 面向对象的Pascal语言,2.2.1 简单数据类型,有序数据类型(ordinal)1)整数类

6、型 整数类型是由正号或负号、数字组成的数据,数据中不包含小数。,整数类型表,第2章 面向对象的Pascal语言,2.2.1 简单数据类型,2)字符类型 字符类型只存储一个字符,利用关键字Char来表示。除了Char数据类型外,Dephi 7还提供了Char的扩展类型,它们是AnsiChar和WideChar两种类型。,字符数据类型表,第2章 面向对象的Pascal语言,2.2.1 简单数据类型,有序数据类型(ordinal)3)布尔类型布尔类型(Boolean)是只能表示真或假的一种数据类型,包括以下四种类别:Boolean、ByteBool、WordBool和LongBool。布尔类型的值是

7、两个预定义的常量标识符:False和True,分别代表真和假。4)枚举类型枚举类型(enumerated)是用户自定义的一种简单数据类型,是由一组有序的标识符组成的,最多可有255个枚举项。枚举类型定义中的每个值都对应一个整数值的序号,第一个为0从左向右依次增1。,第2章 面向对象的Pascal语言,2.2.1 简单数据类型,枚举类型定义和枚举类型变量声明的语法结构:type 枚举类型标识符=(枚举常量标识符列表);var 枚举类型变量表:枚举类型标识符;例如:type day=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday)

8、;以上是枚举类型定义 var today:day;/枚举变量声明上面例子中的枚举常量Sunday、Monday、Tuesday、Wednesday、Thursday、Friday和Saturday对应的整数值分别为0、1、2、3、4、5和6。有时也可以把类型定义和变量声明合二为一,例如:var color1,color2:(Red,Blue,Green,Black),第2章 面向对象的Pascal语言,2.2.1 简单数据类型,枚举类型的三点说明:枚举元素对应的值并不是一成不变的,若必要,可在定义类型时改变元素对应的值。例:type day=(Sunday=7,Monday,Tuesday,W

9、ednesday,Thursday,Friday,Saturday);此时,Monday对应的值是1,Tuesday对应的值是2,Sunday对应的值是7。同一个枚举项不能出现在多个枚举类型中。例:type Month1=(Jan,Feb,Mar,Api,May,Jun);Month2=(Jun,Jul,Feb);这两个类型Month1,Month2中都包含Jun这个元素,这是不允许的。这两个类型Month1,Month2中都包含Jun这个元素,这是不允许的。枚举类型是有序数据类型,对其运算可以使用Ord、Pred、Succ及关系运算。,第2章 面向对象的Pascal语言,2.2.1 简单数据

10、类型,5)子界类型 子界类型(subrange)为某个有序类型的子集,其内部的元素 可以是整型、布尔型、字符型或者枚举型。它不像枚举类型 那样必须把每个元素都一一列举出来,而是只要确定所要列 举元素的一个上界和一个下界即可。因此,子界类型必须是 同一种有序类型,而不能是其它无序类型。语法(子界类型定义):type 子界类型标识符=子界常量下限.子界常量上限;例如:下面的声明语句定义了一个枚举类型day和两个子界类型day1、number。type day=(Sun,Mon,Tue,Wed,Thu,Fri,Sat);day1=Sun.Wednumber=0.100;,第2章 面向对象的Pasca

11、l语言,2.2 数据类型,使用子界类型,需注意以下几点:(1)子界类型的上界和下界必须是同一类型,并且是有序类型,如整型、布尔型、字符型或枚举型等,不能是实数类型或其它无序类型。(2)子界类型的上界和下界不仅可以是常数,也可以是能够计算出具体值的常数表达式。例如:const n=10;m=20;type number=3*n.5*(m+n)(3)子界类型的下限的序数值不能超过其上限值。,第2章 面向对象的Pascal语言,2.2.1 简单数据类型,实数类型 实数类型是实数的子集,它是带有小数部分的数值,实数类型表,第2章 面向对象的Pascal语言,2.2.1 简单数据类型,日期和时间 Del

12、phi定义了一种特殊的TdateTime数据类型,它属于浮点类型。TdateTime不是系统预先定义的类型,可在系统单元中定义后使用,定义形式如下:type TDateTime=type Double;,第2章 面向对象的Pascal语言,2.2.2 字符串类型,字符串类型包括ShortString、AnsiString和WideString三种类型说明一个字符串型的变量,应指明该字符串的大小。例如:type String1:string20;var MyString:String1;,字符串类型,第2章 面向对象的Pascal语言,2.2.3 可变类型,数据类型在运行期间可以进行改变 比固定

13、类型的数据占用更多的空间和更多的操作时间。不能包含记录型、集合类型、静态数组、文件类型、类、指针类型以及长整型等数据类型。语法(可变类型变量声明):var 变量名表:Variant;,第2章 面向对象的Pascal语言,2.2.4 类型相容和强制转换,类型相容(1)两种类型的数据一致。(2)两种类型的数据都是实型。(3)两种类型的数据都是整型。(4)一种数据的类型是另一种数据类型的子界。(5)两种数据类型都是另外一种宿主类型的子界。(6)两种数据类型都是另外一种相容基类型的集合类型。(7)两种数据类型都是紧凑字符串类型,并且具有相同的元素个数。(8)一种数据类型是字符串类型,另一种数据类型是字

14、符串类型、紧凑字符串类型或字符类型,或者一种数据类型是Char类型,另一种数据类型是形式为array0.n of Char的字符数组。,第2章 面向对象的Pascal语言,2.2.4 类型相容和强制转换,(9)一种类型是Pointer类型,另一种数据类型是指向任意一种 数据类型的指针类型,或者两种数据类型都是基类型相同 的指针类型。(10)两种数据类型都是类数据类型或者类引用类型,并且一种 数据类型继承了另外一种类型。(11)两种数据类型都是结果类型相同、参数个数相同、参数类 型一致的过程类型。(12)一种数据类型是可变数据类型,另外一种数据类型是整型、实型、字符串类型或布尔类型。2.变量强制

15、类型转换 强制类型转换就是将一种类型的变量当作另一种类型。语法(强制类型转换):类型标识符(变量名);例如,有以下程序段:var str1:char;str2:byte;beginstr1:=a;str2:=str1;/此语句可改为:str2:=byte(str1);end,第2章 面向对象的Pascal语言,2.3 运算符 2.3.1 赋值运算符,语法(赋值语句):变量:=表达式;其中,“:=”称为赋值号。赋值语句的功能是先计算赋值运算符右边表达式的值,然后再把结果赋给左边的变量。例如:x:=10;y:=2*x+1;str1:=a;,第2章 面向对象的Pascal语言,2.3.1 赋值运算符

16、,赋值相容原则:(1)T1和T2是相同的数据类型,且都不是文件类型或包含文件类型的 自定义类型。(2)T1和T2是相容的有序类型,类型T2的值在T1的取值范围内。(3)T1和T2都是实型,类型T2的值在T1的取值范围内。(4)T1是实型,T2是整型。(5)T1和T2都是字符串类型,或者T1是字符串类型,T2是字符类型。(6)T1和T2是相容的集合类型,并且T2是T1的子集。(7)T1和T2是相容的指针类型。(8)T1是类类型,T2是T1的继承类类型,或者T1是类引用类型,T2是 T1的继承类引用类型。(9)T1是Char类型,T2是字符串常量或是形为array0.n of char的 字符数组

17、。(10)T1和T2是相容的过程类型。(11)T1是Variant类型,T2是Integer、Real、String或Boolean类型;或者T1是Integer、Real、String或Boolean类型,T2是Variant类型。,第2章 面向对象的Pascal语言,2.3.2 算术运算符,在进行“+”、“-”、“*”运算中,只有两个运算分量都为integer类型时,结果才为integer类型,否则为real。,第2章 面向对象的Pascal语言,2.3.2 算术运算符,【例】已知圆半径r计算圆的周长和面积。使用公式:C=2r和 s=r2,式中C表示圆的周长,s表示圆的面积,r表示圆的半径

18、。功能要求:输入半径,单击命令按钮“计算”(butcal),计算圆的周长和面积。界面设计:由四个组件组成,分别是两个label组件,一个Edit组件和一个Button组件。界面如图,程序界面(设计时),第2章 面向对象的Pascal语言,2.3.2 算术运算符,程序代码如下:procedure TForm1.ButcalClick(Sender:Object);/计算圆的周长和面积var r,c,s:real;const pi=3.14159;/常量定义,代表圆周率beginr:=strtofloat(editradius.text);/将文本框上的数字字符转换为数值 c:=2*pi*r;s:

19、=pi*sqr(r);/sqr是求平方的函数 labresult.Caption:=该圆的周长是:+floattostr(c)+chr(13)+面积是+floattostr(s);end;,运行结果,第2章 面向对象的Pascal语言,2.3.3 关系运算符,关系运算符可以对两个普通数据类型、类、对象、接口类型或字符串类型的数据进行比较,结果数据类型为布尔类型。,关系运算符表,第2章 面向对象的Pascal语言,2.3.4 逻辑运算符,逻辑运算符对逻辑类型的操作数进行运算,数据结果为逻辑型。,逻辑运算符表,逻辑运算的真值表,第2章 面向对象的Pascal语言,2.3.5 集合运算符,集合运算符

20、主要对两个集合进行操作,判断两个集合之间的关系。,集合运算规则表,第2章 面向对象的Pascal语言,2.3.6 位运算符,位运算符能操作一个变量的各二进制位。位运算符能把一个数左移或右移,或对两个数按位执行与、取反、或和异或等运算。,位运算符,位运算示例,第2章 面向对象的Pascal语言,2.3.7-8其他运算符、运算符的优先级,2.3.7 其他运算符字符串连接运算符+(或&),作用是将两个字符串联接在一起,有效字符 为255。用于指针类型数据运算的运算符+、-、=和等。2.3.8 运算符的优先级表达式在求值时,遵循以下原则:l 两个操作符之间的操作数总是先参加高优先级的运算。l 如优先级

21、相等,操作数按从左到右的顺序参加运算。l 在有括号的情况下应先计算括号内的运算。,Object Pascal各运算符的优先级,第2章 面向对象的Pascal语言,2.4.1 声明语句,1.标号声明 语法(标号声明):label label1,label2,label3,;2.常量声明 语法(常量声明):const 常量名=表达式;=右边可以使用预定义函数。3.类型声明语法(类型声明):type 类型名=类型定义;4.变量声明语法(变量声明):var 变量名表:类型;,声明语句应该按照标号、常量、类型、变量、过程和函数的顺序来声明。,第2章 面向对象的Pascal语言,2.4.2-3 简单语句、

22、条件控制语句,2.4.2 简单语句1.赋值语句 2.goto 语句 语法:goto 标号;2.4.3 条件控制语句1.if 语句(1)ifthenelse语句 语法:if(条件表达式)then语句1else语句2,第2章 面向对象的Pascal语言,2.4.3 条件控制语句,(2)if 语句的嵌套 if(条件表达式)then begin 语句1 if(条件表达式)then 语句2 else 语句3 end else 语句4,else总是和同一层中前面最靠近它的、还没有else语句与之匹配的then语句相匹配,即按就近匹配原则。,第2章 面向对象的Pascal语言,2.4.3 条件控制语句,(2

23、)if 语句的嵌套 if(条件表达式1)then 语句1 else if(条件表达式2)then 语句2.else 语句n,用于处理程序中两路以上分支的情况。,第2章 面向对象的Pascal语言,2.4.3 条件控制语句,【例】计算下列函数:函数分成三种情况,即x0时执行不同的语句块。方法1:用if嵌套结构来设计,将x0的判断嵌套在x0的分支结构中:y:=-1;if x0 then begin if x0 then y:=1;end else y:=0;,第2章 面向对象的Pascal语言,2.4.3 条件控制语句,方法2:用if 嵌套结构来设计,将x0和x=0的判断嵌套在x=0的分 支结构中

24、:if x=0 then begin if x0 then y:=1 else y:=0;endelse y:=-1;,方法3:用ifthenelse语句 的复合语句来设计:if x0 theny:=1else if x=0 then y:=0else y:=-1;,第2章 面向对象的Pascal语言,2.4.3 条件控制语句,2.Case语句 case 语句对一个结果的多个分支进行判断,可以用来在多个可能的情况中选择一个条件。语法(case 语句):case 表达式 of 值表1:语句1;值表2:语句2;值表n:语句n;else 语句n+1;end;,case开始语句中的表达式的值必须是有序

25、类型,并且各值表中的数据类型必须与表达式值的类型一致,且每个值只能出现一次,不允许重复出现。若值表中有多个值,则各值之间逗号分隔开来。case I of 1.5:Caption:=Low;6.9:Caption:=High;0,10.99:Caption:=Out of range;else Caption:=;end;,第2章 面向对象的Pascal语言,2.4.3 条件控制语句,【例】编程为某运输公司计算运费。运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:s250km 没有折扣 250s500 2%折扣 500s1000 5%折扣 1000s2000 8%折扣 2000

26、s3000 10%折扣 3000s 15%折扣 设每公里每吨货物的基本运费为p(price的缩写),货物重为w(weight的缩写),距离为s,折扣为d(discount的缩写),则 总运费f(freight的缩写)的计算公式为:f=p*w*s*(1-d),第2章 面向对象的Pascal语言,2.4.3 条件控制语句,程序功能:输入要运输的货物重量、运输距离和每公里每吨货物的基本运费,单击“计算”按钮,输出用户应支付的运费。界面设计:,第2章 面向对象的Pascal语言,2.4.3 条件控制语句,procedure TForm1.btnokClick(Sender:TObject);var p

27、,w,d,f:real;s:integer;begin w:=strtofloat(txtweight.Text);/货物重量赋给w s:=strtoint(txtdistence.Text);/运输距离赋给s p:=strtofloat(txtprice.Text);/基本费用赋给p case s of 0.249:d:=0;250.499:d:=0.02;500.999:d:=0.05;1000.1999:d:=0.08;2000.2999:d:=0.1;else d:=0.15;end;f:=p*w*s*(1-d);resultstr.Caption:=运费为+floattostr(f)

28、;end;,程序代码:,运行结果,第2章 面向对象的Pascal语言,2.4.4 循环语句,1.fordo语句 语法(fordo语句):for 循环变量:=初值 to|downto 终值 do 循环体;,关键字to和downto 的区别终止条件:前者大于终值,后者小于终值。循环变量:前者每次加1 后者每次减1,fordo语句执行流程(使用to),第2章 面向对象的Pascal语言,2.4.4 循环语句,for循环适合用在事先知道循环次数的情况。使用for语句时应注意以下几点:(1)循环变量的声明必须在包含该循环的最内层程序块中进行。(2)循环变量的初值、终值可以是能计算出具体值的表达式。(3)

29、循环变量必须是有序类型,且与初值、终值属于同一数据类型。(4)循环体可以是简单语句,也可以是由begin和end界定的复合语句。(5)在循环体中不允许用任何语句改变循环变量的值。(6)循环结束后,循环变量的值会自动变成不确定值,不能再使用它。,第2章 面向对象的Pascal语言,2.4 语句,2.whiledo语句语法(whiledo语句):while 条件表达式 do循环体;,先判断条件表达式是否为真,然后重复执行循环体。,whiledo语句执行流程,第2章 面向对象的Pascal语言,2.4.4 循环语句,3.repeatuntil语句 语法(repeatuntil语句):repeat循环

30、体;until 条件表达式,repeatuntil语句执行流程,与while的区别在于循环体至少要执行一遍。,第2章 面向对象的Pascal语言,2.4.4 循环语句,【循环语句例】求Fibonacci数列前20项。这个数列有如下特点:第1、2两项都为1。从第3项开始,每项都是其前两项之和。即:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n3)界面设计:,第2章 面向对象的Pascal语言,2.4.4 循环语句,程序代码如下:procedure TForm1.BtnShow(Sender:TObject);var i,f1,f2:integer;beginf1:=1;f2:=

31、1;for i:=1 to 10 do begin ListBoxFei.items.add(inttostr(f1);/将f1添加到列表中 ListBoxFei.items.add(inttostr(f2);/将f2添加到列表中 f1:=f1+f2;f2:=f2+f1;endend;,运行结果,第2章 面向对象的Pascal语言,2.4.5 其他语句,break语句break语句用于在循环语句的循环体中强行退出循环,跳到循环语句后面的语句继续执行。continue语句用于循环语句的循环体中强行结束本次循环,开始执行本循环的下一次循环操作。exit语句exit语句的功能是退出当前的程序块。如果

32、当前程序块是主程序,则exit将使程序终止。如果当前程序块是被调用模块,exit语句将跳到上层程序继续执行。halt语句halt语句将导致程序的非正常结束,并返回到操作系统。,第2章 面向对象的Pascal语言,2.5.1 过程的说明和调用,过程的说明语法(过程声明):procedure();语法(过程定义):procedure();beginend;例:两个形式参数的过程NumString,两个参数分别是整型和字符串类型。/在type区中给出如下的过程声明语句:procedure NumString(N:Integer;var S:string);/在implementation部分按如下形

33、式定义该过程:procedure NumString(N:Integer;var S:string);end;,第2章 面向对象的Pascal语言,2.5.1 过程的说明和调用,2.过程调用 过程调用的一般形式为:过程名();其中的实际参数可以是常量、变量或表达式,但实际参数的个和类型必须与形式参数完全匹配,即个数相同,类型一致。,第2章 面向对象的Pascal语言,2.5.2 函数的定义和调用,语法(函数声明):function():;语法(函数定义):function():;begin:=/也可以用Result代替。end;注意:函数定义是函数type部分声明后,在implementati

34、on部分中的进行定义。函数值的返回方式:1.返回值直接赋给函数名 2.返回值赋给Result(函数名的别名),第2章 面向对象的Pascal语言,2.5.2 函数的定义和调用,【例】用函数调用编写求两个自然数的最大公约数,采用辗转除法 辗转除法的算法如下(以求M和N的最大公约数为例):(1)计算M和N的余数R。(2)用N替换M,M=N;用R替换N,N=R。(3)若R0则重复步骤(1)(2)(3)。界面设计:程序代码:/求两个数最大公约数的Divisor函数 function Divisor(x,y:integer):integer;var r:integer;begin r:=x mod y;

35、while r0 do begin x:=y;y:=r;r:=x mod y;end;Divisor:=y;end;,第2章 面向对象的Pascal语言,2.5.2 函数的定义和调用,procedure BtnCal.FormClick(Sender:TObject);var m,n,g:integer;begin n:=strtoint(EdtNum1.Text);m:=strtoint(EdtNum2.Text);g:=Divisor(n,m);LblRes.caption:=最大公约数为:+inttostr(g);end;,程序运行结果,第2章 面向对象的Pascal语言,2.5.3 参

36、数,过程或函数声明和定义时参数列表中的参数称为形式参数,简称形参 过程或函数调用时参数列表中的参数称为实在参数,简称实参过程或函数调用要求形参列表和实参列表完全匹配可以为过程和函数的参数指定默认数值 四种参数传递方式 1.数值参数实参的值赋给对应形参,形参的改变不影响实参例:function DoubleByValue(X:Integer):Integer;/X是数值参数beginX:=X*2;Result:=X;end;,第2章 面向对象的Pascal语言,2.5.3 参数,2.变量参数变量参数传递一个指向参数的引用,即指针。改变引用传递的参数将影响对应的实际参数。例:procedure A

37、ddOne(var X,Y:Integer);/Addone过程定义begin X:=X+1;Y:=Y+1;end;/以下是调用Addone过程的程序段var I,J:Integer;begin I:=1;J:=2;AddOne(I,J);end;,调用AddOne过程之后,I、J的值分别为2和3。,第2章 面向对象的Pascal语言,2.5.3 参数,3.常量参数传递给函数或过程的参数在函数或过程中不能被改变,用const 关键字来声明.例:function myfunction(const x,y:integer):Integer;beginx:=x+10;end;,非法操作,不允许修改x

38、的值,第2章 面向对象的Pascal语言,2.5.3 参数,4.数组参数数组可以作为函数或过程的参数,但在对数组参数进行声明中不能包含数组索引类型的声明。例:procedure Sort(A:array1.10 of Integer);/不正确 type TDigits=array1.10 of Integer;procedure Sort(A:TDigits);/正确可以使用动态数组作为函数和过程的参数。例:procedure Clear(var A:array of Real);var I:Integer;begin for I:=0 to High(A)do AI:=0;end;,第2章

39、 面向对象的Pascal语言,2.5.3 参数,5.变量的作用域1.全局变量全局变量是在单元文件的type区定义的变量,在整个程序中都有效 2.局部变量局部变量是在过程和函数的定义部分声明的变量,在它所在的过程和函数中有效。,全局变量和局部变量同名,那么在函数和过程中局部变量起作用,在其他地方全局变量起作用。,第2章 面向对象的Pascal语言,2.5.4 过程和函数类型,把过程和函数作为一个整体赋给某个变量或者作为参数传递给其他的过程和函数,这种变量就是过程或函数类型的变量type TIntegerFunction=function:Integer;TProcedure=procedure;

40、TStrProc=procedure(const S:string);var F:TIntegerFunction;/F是一个无参数、返回值为整数的函数类型的变量Proc:TProcedure;/Proc是一个无参数的过程类型变量SP:TStrProc;/SP是一个需要有一个字符串为参数的过程类型变量有了上面的声明之后,若有如下函数定义:procedure FLength(S:string);begin end;则下面语句是合法的:SP:=FLength;过程或函数类型变量还可以作为其他过程或函数的参数。例如:procedure FuncProc(P:TIntegerFunction);,第2

41、章 面向对象的Pascal语言,2.6 结构类型2.6.1 集合类型,集合类型是一组相同类型元素的组合,即一组相关对象的整体,每个对象称为集合的一个元素。语法(声明集合类型):type 集合类型标识符=set of 基类型;例:type Number=set of 1.20var x,y:Number;可将定义类型和声明变量两个语句合二为一书写 例:var x,y:set of 1.20;x:=1,4,5,2,7;/x是一个具有5个元素的集合,第2章 面向对象的Pascal语言,2.6.2 数组类型,1.一维数组语法(一维数组类型定义):type 数组类型标识符=array 下标类型 of 基

42、类型;例:type Xh=array1.50 of Integer;/定义整型数组类型Xhvar xh1:Xh;/声明Xh类型数组变量xh1【例】用起泡法对输入的一组数排序(由小到大)。窗体设计:,第2章 面向对象的Pascal语言,2.6.2 数组类型,程序代码:type queue=array1.10 of integer;procedure sort1(var queue1:queue;n:integer);/实现数据排序的过程 procedure swap(var x,y:integer);/实现两个数交换的过程 var Form1:TForm1;i:integer;/用来统计输入数据

43、个数的变量 dataarray:queue;/存放待排序数据的数组,第2章 面向对象的Pascal语言,2.6.2 数组类型,过程sort1定义:procedure sort1(var queue1:queue;n:integer);/对数组queue1的前n个数排序var k,j:integer;flag:boolean;beginfor k:=1 to n-1 do/k控制扫描的趟数 begin flag:=true;for j:=1 to n-k do/第k趟扫描的两两比较次数 if queue1jqueue1j+1 then begin flag:=false;swap(queue1j

44、,queue1j+1);end;if flag then exit;/本趟扫描无交换,退出循环 end;end;,第2章 面向对象的Pascal语言,2.6.2 数组类型,过程swap 定义:procedure swap(var x,y:integer);/交换x和y的值,x和y是变量参数var temp:integer;begin temp:=x;x:=y;y:=temp;end;在inputClick过程中输入如下代码:procedure TForm1.inputClick(Sender:TObject);begin i:=i+1;/每输入一个数i加1/将在dataedit中输入的数赋给d

45、ataarray的第i个元素 dataarrayi:=strtoint(dataedit.Text);datalist.Items.Add(dataedit.Text);/将dataedit.Text添加到列表框datalist中 dataedit.Text:=;/清空dataedit dataedit.setfocus;/光标定位到dataedit组件上 end;,第2章 面向对象的Pascal语言,2.6.2 数组类型,在sortClick过程中输入如下代码:procedure TForm1.sortClick(Sender:TObject);var j:integer;begin lbl

46、result.Caption:=这组数从小到大排列为:+chr(13);sort1(dataarray,i);/调用sort1对dataarray中的前i个元素排序 for j:=1 to i do/输出排序后的数据 lblresult.Caption:=lblresult.Caption+inttostr(dataarrayj);i:=0;end;,运行结果,第2章 面向对象的Pascal语言,2.6.2 数组类型,2.二维数组语法(二维数组类型定义):type 数组类型标识符=array 下标类型1,下标类型2 of 基类型;例:下面的代码定义了一个10行、10列的数组类型Ttable:t

47、ype Ttable=array1.10,1.10 of Double;var table1:Ttable;【例】分别输入每个学生的各门功课成绩,求每门功课的平均成绩。,第2章 面向对象的Pascal语言,2.6.2 数组类型,窗体设计:,窗体及其包含的组件对象属性表,第2章 面向对象的Pascal语言,2.6.2 数组类型,程序代码:type queue=array1.4,1.20 of real;function aver(queue1:queue;m,n:integer):real;var Form1:TForm1;i:integer;/用于统计输入学生数 score:queue;/sc

48、ore用于存放学生各门功课的成绩 aver函数的定义:function aver(queue1:queue;m,n:integer):real;/求第m行n个元素的平均值 var k:integer;sum:real;begin sum:=0;for k:=1 to n do sum:=sum+queue1mk;/累加n个学生同一门功课的成绩和 aver:=sum/n;/求平均 end;,第2章 面向对象的Pascal语言,2.6.2 数组类型,在btninput过程中输入如下代码:procedure TForm1.btninputClick(Sender:TObject);varstr1:s

49、tring;j:integer;begin i:=i+1;/每输入一学生信息i加1 score1i:=strtofloat(engedit.Text);/score数组的第1行存放英语成绩 score2i:=strtofloat(mathedit.Text);/score数组的第2行存放数学成绩 score3i:=strtofloat(vfpedit.Text);/score数组的第3行存放vfp成绩 score4i:=strtofloat(dataedit.Text);/score数组的第4行存放数据结构 str1:=engedit.Text+mathedit.Text+vfpedit.Te

50、xt+dataedit.Text;scorelist.Items.add(str1);/将第i个学生的各门成绩添加到scorelist列表中 engedit.Text:=;/清空用于输入成绩的各文本框 mathedit.Text:=;vfpedit.Text:=;dataedit.Text:=;engedit.SetFocus;/光标定位在engedit文本框上,等待下次输入end;,第2章 面向对象的Pascal语言,2.6.2 数组类型,在aveClick过程中输入如下代码:procedure TForm1.aveClick(Sender:TObject);var engave,matha

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号