《ObjectPascal语言》PPT课件.ppt_第1页
《ObjectPascal语言》PPT课件.ppt_第2页
《ObjectPascal语言》PPT课件.ppt_第3页
《ObjectPascal语言》PPT课件.ppt_第4页
《ObjectPascal语言》PPT课件.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、任课教师:杨 超 电子邮箱: yangchao_,测控软件设计,2,一、字符集和Pascal中的符号 (1) 基本字符 字母:英文字母az和AZ 数字:09 关系运算符:, =, =, 赋值运算符::= 算术运算符:+, -, *, /, Div(整除) 其它符号:_, (, ), ., #, $,3,2) 保留字与标识符 保留字:保留字由Pascal系统定义,由字母组成,可以直接使用,不能重新定义。如:begin、end、for、while、if、then、with、or、and、not、procedure、function等,4,标识符:对常量、变量、过程、函数、方法等进行标识,以字母或下

2、划线开头。如Integer、single、double、Read、Write、Bof、Eof等;标识符的最大长度为255;保留字不能作为标识符;尽量不要使用Delphi的指令字作为自定义标识符,以免引起混淆;标识符不区分大小写,使用前必须声明。 注释:对程序的含义或功能的文字说明。Delphi不会执行注释,也不会编译注释,主要是增强程序可读性。 注释的三种方式:(1) 双斜线“/”;(2) 小括号和*号:“(*”和“*)”;(3) 大括号:“”和“”。方式(1)只能注释一行,方式(2) 和(3)必须成对使用,可注释多行,5,一、常量 常量用于存储内存中不变的量。在程序运行过程中,常量的值不能改

3、变;常量声明后才可使用。声明方法: Const 常量名称=常量值 或 Const 常量名称:数据类型=常量值 如: Const PI=3.1415926; Num:Integer=100; /Num=100 说明:声明常量时无需指明其数据类型,6,二、变量 变量用于存储内存中变化的量。在程序运行过程中,既可以引用变量的值,也可以改变变量的值;变量声明后才可使用。声明方法: Var 变量名称:变量类型; 如:Var N,Age,I,J:Integer; /多个变量“,”隔开 Record:Single; StudentNo:String; 说明:一个Var可声明多个变量,但须指明类型,7,三、变

4、量的作用范围 1.过程级变量:在过程里声明,只存在于该过程; 2.窗体级变量:在窗体单元的Private域内声明,只存在于该窗体范围,即该窗体单元的所有过程均可访问该级别变量,随窗体的结束而结束; 3.公共变量:在窗体单元的Public域内声明,或紧跟在窗体变量声明之后声明的变量,或在公共单元里声明的变量;在整个程序运行期间均可访问,不过,在访问该级别变量之前,需先引用定义变量的单元文件,然后方可使用变量;若单元文件有对应的窗体,则变量名前需加入窗体名称,同使用组件。如frmMain.UserName,8,四、变量的赋值 给变量赋值一个确定的数 StudentNo:=911023; /字符串用

5、单引号 StudentWeight:=55; 将一个变量的值赋值给另一个变量 I:=J; /将变量J的值赋值给变量I 将算术表达式的值赋值给变量 Y:=sin(3*X+2.4)/Sqrt(Power(10,1.1)+4); 先计算表达式的值,然后赋值 先比较运算,然后赋值:TF:=(X*Y20) And (Z0,9,表达式就是变量、常量、字符串、运算符和函数按照一定规则的组合。Pascal运算符包括算术运算符、逻辑运算符、关系运算符、位运算符、指针运算符和集合运算符等。有些运算符使用不同的数据类型,意义也会不同,如:运算符“+”可以用来求两个变量(常量)的和、合并两个字符串、求两个集合的并集。

6、不同的运算符具有不同的优先级别,10,一元运算符(优先级别最高) :指针运算符; :函数变量的地址(返回一个指针); not:Boolean否或逐位进行二进制位值反向; 乘与逻辑运算符 *:算术乘运算或集合的交集运算; /:浮点数的除运算; Div:整型数的整除运算; Mod:求模(整型数相除后的余数); As:安全的类型转换,11,乘与逻辑运算符 And:Boolean或逐位的逻辑“与”运算; ShL(Shl):二进制位值左移; ShR(Shr):二进制位值右移; 加减运算符 +:算术加法、集合并集、字符串连接、正值或增加指针地址偏移; -:算术减法、集合差集、负值或减少指针地址偏移; Or

7、:Boolean或逐位的逻辑“或”运算; Xor:Boolean或逐位的逻辑“异或”运算,12,关系与比较运算符 =:等于; :不等于; :大于; =:大于或等于; In:属于 Is:测试对象类型是否匹配,13,声明变量时,必须指明其数据类型,因为不同的数据类型存储的数据范围、运算方法可能不同。不论何种数据类型的变量,其值不要超出该类型的取值范围,14,4.1 简单数据类型 4.1.1 运算函数 Dec(i):变量减1后的值,等同于i:=i-1; Inc(i):变量加1后的值,等同于i:=i+1; Pred():表达式前驱的值;如:Pred(B)等于A; Succ():表达式后继的值;如:Su

8、cc(B)等于C; Ord():有序表达式的值;如:Ord(B)等于66; Low():数据类型的最小值; High():数据类型的最大值; Odd():判断是否为奇数。如:Odd(11)等于True,15,4.1.2 整型(Integer) 整型数据又可细分为多种类型(参看教材P23P24或Help文档)。常用的类型:Integer、Cardinal和Int64,但要注意:不同整数类型的变量进行运算时可能得不到想要的结果,必须进行类型的强制转换;所以参与运算的变量类型尽量一致。 声明:Var I,J,K:Integer; L,M,N:Cardinal; /与LongWord类似 MM,NN:

9、Int64,16,4.1.3 字符型(Char) 存储单个字符数据的数据类型,这些字符是在ASCII表中描述的。要想取得ASCII表中的字符,可以采用两种方法:#和Char()。例如:#65和Char(65)都返回字符“A” 如果想知道某个字符在ASCII表中对应的序号,使用函数Ord(),例如:Ord(Z)返回数字90。 “A”“Z”:Char(65)Char(90); Char(13)、#13:回车; Char(10)、#10:换行; #10+#13、Char(10) + Char(13):换行+回车,17,4.1.4 布尔型(Boolean) 布尔型数据主要用于逻辑运算,只能取“True

10、”或“False”两种值。建议:不要将布尔型变量用于算术运算。 例如: Var TF:Boolean; If TF=True Then 可以写成 If TF Then If TF=False Then 可以写成 If Not TF Then,18,4.1.5 枚举型 枚举型采用列举出该类型所有可能取值的方式定义一个有序值的集合。定义方式: Type 类型名=(值1,值2,值n); 在枚举类型变量中,可以用Ord(值)提取“值”对应的序号,默认情况下, “值”的序号从0开始,如:Ord(值1)为0, Ord(值n)为n-1。 例如:Type TScrollStyle = (ssNone, ssH

11、orizontal, ssVertical, ssBoth); /滚动条类型,19,4.1.6 实型 实型定义一个可以按照浮点格式进行描述的数据类型。常用的实型为Real和Currency(货币型)。 例如:Var A,B:Real; 实型数操作函数: Round(A)圆整,即四舍五入后取整; Trunc(A)直接提取实型数A的整数部分; Int(A)将实型数A的小数部分变为0; Frac(A)提取实型数A的小数部分; 关系:Frac(A) = A - Int(A,20,4.2 字符串类型 4.2.1 变长字符串 声明:Var S1,S2:String; 4.2.2 定长字符串 声明:Var

12、S1,S2:String10; S3,S4:String25; 4.2.3 字符串运算函数和过程;(添加StrUtils单元) Length(S):返回字符串的长度; SetLength(S,N):重新设置字符串的长度为N; Si:表示字符串S的第 i 个字符(i从1开始); Pos(SubStr,Str):返回SubStr在Str中的位置,21,LowerCase(S):返回字符串S全部小写的结果; UpperCase(S):返回字符串S全部大写的结果; AppendStr(S2,S1):将字符串S1添加到字符串S2的后面,并以S2为变量返回,相当于S2:=S2+S1,但本函数效率更高;多个

13、字符串相加最好采用S1+S2+Sn。 Copy(S,Ind,N):从字符串S的第Ind个字符开始,复制N个字符。若IndLength(S),则返回空串;如果Ind后字符的个数小于N,则返回Ind后面的所有字符。 LeftStr(S,N)、RightStr(S,N):分别返回字符串S左侧、右侧的N个字符。 IntToHex(V,N):将整数V转换成N位16进制格式,22,IntToStr(N):将整型数转换为字符串; StrToInt(S):将整数字符串转换为整数; FloatToStr(A):将浮点数转换为字符串; StrToFloat(S):将浮点数字符串S转换为浮点数; DateToStr

14、(D):将日期数据转换字符串; TimeToStr(D):将时间数据转换字符串; DateTimeToStr(D):将日期和时间数据转换字符串; StrToDate(S):将日期字符串S转换为日期; StrToTime(S):将时间字符串S转换为时间; StrToDateTime(S):将日期和时间字符串S转换为日期和时间,23,24,4.3 结构类型 4.3.1 集合类型 定义集合类型的语法格式: Type 集合类型名=Set of 序列数据类型; 例如: Type TMySet=Set of 0.255; 或 Type TMySet= Set of Byte; 集合类型声明后,即可定义和使

15、用集合类型的变量: Var LineNum:TMySet; LineNum:=1,4,7; 思考:枚举类型与集合类型有何区别,25,判断某元素J是否在集合里,使用 In: If J in LineNum Then 4.3.2 集合类型的使用举例 TFontStyle=(fsBold,fsItalic,fsUnderline,fsStrikeOut); TFontStyles = Set of TFontStyle; If ChkBold.Checked Then Font.Style:= Font.Style+fsBold /并集 Else Font.Style:= Font.Style-fs

16、Bold; /差集 注:集合里的元素与位置无关,且不能重复,26,4.4 数组类型 数组类型表示同类数据的集合,它们共用一个名字,通过编号(索引)来访问其中的某个数据。如某个班级所有学生的名字构成一个数组。 一维静态数组:声明数组时即指定数组大小。 如: Var StudentNames:Array40 of String; 数组元素40个,索引从0开始,直到39 TeacherNames:Array1.120 of String; 数组元素120个,索引从1开始,直到120,27,一维动态数组:声明数组时不指定数组大小,程序运行过程中可随时改变其大小。 如: Var StudentNames

17、:Array of String; TeacherNames:Array of String; 运行时改变其大小: SetLength(数组名,N); /设置数组大小为N 例:SetLength(StudentNames,40); /设置数组大小 SetLength(TeacherNames,120); /设置数组大小 SetLength(TeacherNames,135); /改变数组大小,28,如何表示机电学院14个班级学生的姓名? 二维静态数组: 如: Var StudentNames:Array1.14,1.40 of String; 或 StudentNames:Array0.13,

18、0.39 of String; 第一个索引表示班级,第二个索引表示学生学号 二维动态数组: 如:Var StudentNames:Array of Array of String; 使用时:SetLength(StudentNames,14,40); /设置大小 注意:数组类型一旦确定不可改变;动态数组索引始于0,29,数组有关操作说明 Low(A):返回数组A的第一个(最小)下标;如果是多维数组,返回数组A第一维的第一个(最小)下标; High(A):返回数组A的最后一个(最大)下标;如果是多维数组,返回数组A第一维的最后一个(最大)下标; A:=B:大小、类型相同的数组,可以通过赋值语句操

19、作; 如果A是动态数组,则使用nil可释放其占用内存: A:=nil; 或 SetLength(A,0); 改变动态数组大小时,存留下来的数据不受影响,30,4.5 记录类型 记录类型可以用来保存一组不同类型的数据信息。 定义记录类型的语法格式: Type 记录类型名=Record Field1:类型1; Field2:类型2; Fieldn:类型n; End,31,例如:Type TStudent=Record Name:String; No:String20; Sex:String2; Math,English,Physics:Real; End; 数据类型定义完成后,即可定义该类型的变量

20、。 例如:Var Student: TStudent; Students: Array of TStudent,32,记录类型的使用 给记录赋值样例: Student.Name:=Tom; Student.Math:=95.5; Students0.Name:=Tom; Students0.Math:=95.5; 从记录提取数据样例: Student_Name:=Student.Name; Student_Namei:=Studentsi.Name,33,集合、数组和记录,34,5.1 简单语句 Pascal语言中最简单、最常用的语句,用英文分号“;”分隔;如: TotalScore:=Sco

21、re1+Score2; Y:=sin(3*X+2.4)/Sqrt(Power(10,1.1)+4); 5.2 复合语句 多个简单语句的组合,以“Begin”表示开始,以“End”表示结束(Begin和End一定成对出现)。如: Begin Score1:=92;Score2:=98;Total:= Score1+ Score2; End,35,6.1 单分支条件语句 格式1:If 条件 Then ; 或 If 条件 Then ; 例如:If Score=90 Then ShowMessage(优秀); 格式2:If 条件 Then Begin /一条或多条语句,以“;”结束 End; 例如:

22、If Passed=True Then Begin Inc(Life);Inc(TotalNum);End,36,6.2 双分支条件语句 格式1:If 条件 Then Else ; 或 If 条件 Then Else ; 格式2:If 条件 Then Begin /一条或多条语句,以“;”结束 End Else Begin /一条或多条语句,以“;”结束 End,37,6.3 多分支条件语句 格式1:If 条件1 Then Else If 条件2 Then Else If 条件3 Then Else ; 例:根据工资计算个人所得税,38,6.3 多分支条件语句 格式2:If 条件1 Then

23、Begin /一条或多条语句,以“;”结束 End Else If 条件2 Then Else If 条件3 Then Else Begin /一条或多条语句,以“;”结束 End,39,6.4 Case语句 很多情况下可以替代分支条件语句。 格式:Case 条件 Of 条件1:; 条件2:; 条件3:Begin End; Else ; End,40,例子:Case Level Of 1:ShowMessage(Low); 2:ShowMessage(OK); 3:ShowMessage(Good); 4:ShowMessage(Better); 5:ShowMessage(Best); En

24、d; 注意:“Case ”与“End”成对出现,41,7.1 当型循环 当条件成立时,执行或,否则退出。 格式1:While 条件 Do ; 或 While 条件 Do ; 格式2:While 条件 Do Begin /一条或多条语句,以“;”结束 End,42,7.2 直到型循环 执行或,直到退出条件成立时退出。 格式:Repeat /一条或多条语句,以“;”结束 Until 条件; 与当型循环的区别: 当型循环:先判断条件,若条件成立,则执行或,否则退出。 直到型循环:先执行或,然后判断条件,若退出条件成立时退出,43,7.3 For循环 此循环适用于循环次数已知的情况。 格式1:For

25、循环变量:=初值 to 终值 do ; 格式2:For 循环变量:=初值 to 终值 do Begin /一条或多条语句,以“;”结束 End; /这两种情况下初值必须小于或等于终值,44,7.3 For循环 格式3:For 循环变量:=初值 Downto 终值 do ; 格式4:For 循环变量:=初值 Downto 终值 do Begin /一条或多条语句,以“;”结束 End; /这两种情况下初值必须大于或等于终值,45,7.4 循环的嵌套 同一种循环或不同类型的循环可以互相嵌套,但要注意,外层循环必须完全包含内层循环。例如: For I:=1 to 9 Do For J:=1 to 9

26、 Do OutPut(IntToStr(I)+* + IntToStr(J)+=+ IntToStr(I*J); 退出循环使用Break语句,可以用在各种形式的循环结构中。注意,使用Break语句只是退出当前层循环。用Continue语句跳出当次循环继续执行,46,8.1 常用内部函数和常量 以下的函数在System单元定义,直接使用即可。 Abs(x):返回x的绝对值; Sqr(x):返回x的平方; Sqrt(x):返回x的平方根; Sin(x)、Cos(x)、ArcTan(x):返回x的正弦、余弦和反正切函数值, Sin(x)、Cos(x) 中的x是弧度表示的角度。 Exp(x):返回ex

27、 ; Ln(x):返回x的自然对数; Pi:返回圆周率3.1415926535897932385,精度取决于编译程序时的系统,47,Random(Range):返回一个0且小于参数Range的随机数,若缺省Range,则等同于Random(1)。 使用随机函数Random(Range)之前,必须调用一次Randomize过程,来初始化内部随机函数发生器。 8.2 Delphi定义函数 在Delphi的“Math”单元里定义了很多常用函数,使用时,将“Math”添加到Uses语句中。 InRange(x,Xmin,XMax):判断x是否在某范围内; Power(a,x):返回ax;a、x均为实数

28、; IntPower(a,x):返回ax;a、x均为整数,48,Log10(x):返回以10为底x的对数; Log2(x):返回以2为底x的对数; LogN(B,x):返回以B为底x的对数; Max(A,B)、Min(A,B):分别返回A、B中的最大值、最小值; Sign(x):符号函数,可能返回值为1、0、-1; IsZero(x,E):判断x是否等于0或非常接近0;E为精度 SameValue (A,B,E):判断A、B是否相等或近似相等;E为精度; EnsureRange(x,Xmin,XMax):若XminxXmax, 返回x;若xXmax,返回Xmax,49,8.3 自定义函数与过程

29、 函数、过程是独立的语句块,能够实现一定的功能,可以被其它程序块调用,也叫子程序。函数在执行后有返回值,故可作为表达式使用;过程没有返回值。 函数、过程必须先定义,再编写其功能代码,最后才是被调用。如(1) 在Private部分声明函数、过程: Private Procedure OutPut(Txt:String); Function JieCheng(N:Integer):Integer; Public,参数列表,参数列表,50,2) 定义函数、过程,编写其功能代码: Procedure TfrmMain.OutPut(Txt:String); Begin Caption:=Txt; En

30、d; Function TfrmMain.JieCheng(N:Integer):Integer; Var I,S:Integer; Begin If N0 Then S:=0 Else If N=1 Then S:=1 Else Begin S:=1;For I:=1 to N Do S:=S*I; End; Result:=S; /Result可以表示多种函数返回值 End,参数列表,参数列表,51,3) 函数、过程的调用: Procedure TfrmMain.BtnRunClick(Sender:TObject); Var S:Integer; Begin S:=JieCheng(10

31、) Div JieCheng(4); /调用阶乘函数计算 OutPut(10!/4!=+IntToStr(S); /调用输出过程输出计算结果 End,52,函数、过程的参数: 函数、过程通常需要传递参数,参数可分为形式参数和实际参数。在过程和函数的声明、定义时参数列表中的参数为形式参数;调用函数、过程时参数列表中的参数是实际参数。参数必须指定类型,并用“;”隔开,形式参数和实际参数的类型、顺序必须一一对应、个数相同。 参数的传递有“数值传递”和“地址传递”两种:通过数值传递参数,参数值不能被改变;通过地址传递参数,参数值可以被改变,因此可通过地址传递参数并返回变化后的参数值;在参数列表的形式参

32、数前加“Var”,即可将该参数设置为“地址传递参数,53,例如: Procedure TfrmMain.SwapAB1(A,B:Integer); Var T:Integer; Begin T:=A;A:=B;B:=T; /返回的A、B与原来相同 End; Procedure TfrmMain.SwapAB2(Var A,B:Integer); Var T:Integer; Begin T:=A;A:=B;B:=T; /返回的A、B实现了交换 End,54,在程序执行过程中,总是不可避免地出现一些异常,有些异常对程序的影响不大,而有些异常对系统而言却是致命的,因此,在我们无法确定哪些异常是致命

33、的时候,最好承认所有异常都对系统产生严重影响“错误就是错误,没有大小之分!”。 有了异常就必须解决!但是,我们真能分辨所有的异常类型并解决它们吗? 能分辩,但比较耗时、费力,而且,不能全部解决。怎么办? 解决能解决的异常,跳过不能解决的异常,55,Delphi提供了两种解决错误的办法: (1) Try Except 或 do nothing /可能不会执行 End; (2) Try Finally do something /如释放内存等。总会执行 End,56,一、程序中的错误 1.1 语法错误 即编写的语句不符合语法规范,是一种常见错误。如Begin和End不是成对出现;句尾缺“;”;标识

34、符、变量、函数或过程未定义;数据类型不符等。这类错误在程序编译时会显示出错信息,观察代码窗口下方的信息窗口可知错误类型及所在行号,以便修改。编译命令:Ctrl+F9 1.2 运行错误 程序通过了编译,但在运行期间出现错误。如一个数被零除;表达式计算结果太大溢出;试图打开不存在的文件等。观察弹出的错误信息对话框即可知道错误类型,57,1.3 逻辑错误 程序通过了编译,也能运行,但结果不对。此时,需要在程序设计阶段通过调试工具找到这类错误并修改之。 二、程序调试 2.1 使用断点 按下F5键或在光标所在行的左侧空白处左击鼠标,即为光标所在行设置断点,重复此操作可取消断点。 2.2 运行到光标处 按下F4键,程序执行到光标所在位置。 2.3 单步调试 F7键:逐行执行所有语句,也会进入过程内部执行,58,但不会进入Delphi提供的库函数内部。 F8键:“逐行”执行,若遇到函数或过程,不会进入函数或过程内部,而是执行完函数或过程,并将光标停留在函数或过程调用的下一条语句上。 2.4 计算/修改变量值 在调试过程中,用光标选中变量或表达式,按下Ctrl+F7键,会弹出一个对话框,显示该变量或表达式的值;有时,在代码编辑窗口,用光标选中变量或表达式,Delphi会以气泡的方式显示该变量或表达式的值。 2.5 其它 更多

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论