已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任课教师:杨超电子邮箱:yangchao_69,测控软件设计,2,一、字符集和Pascal中的符号(1)基本字符字母:英文字母az和AZ数字:09关系运算符:,=,=,赋值运算符::=算术运算符:+,-,*,/,Div(整除)其它符号:_,(,),.,#,$,3,(2)保留字与标识符保留字:保留字由Pascal系统定义,由字母组成,可以直接使用,不能重新定义。如:begin、end、for、while、if、then、with、or、and、not、procedure、function等。,4,标识符:对常量、变量、过程、函数、方法等进行标识,以字母或下划线开头。如Integer、single、double、Read、Write、Bof、Eof等;标识符的最大长度为255;保留字不能作为标识符;尽量不要使用Delphi的指令字作为自定义标识符,以免引起混淆;标识符不区分大小写,使用前必须声明。注释:对程序的含义或功能的文字说明。Delphi不会执行注释,也不会编译注释,主要是增强程序可读性。注释的三种方式:(1)双斜线“/”;(2)小括号和*号:“(*”和“*)”;(3)大括号:“”和“”。方式(1)只能注释一行,方式(2)和(3)必须成对使用,可注释多行。,5,一、常量常量用于存储内存中不变的量。在程序运行过程中,常量的值不能改变;常量声明后才可使用。声明方法:Const常量名称=常量值或Const常量名称:数据类型=常量值如:ConstPI=3.1415926;Num:Integer=100;/Num=100说明:声明常量时无需指明其数据类型。,6,二、变量变量用于存储内存中变化的量。在程序运行过程中,既可以引用变量的值,也可以改变变量的值;变量声明后才可使用。声明方法:Var变量名称:变量类型;如:VarN,Age,I,J:Integer;/多个变量“,”隔开Record:Single;StudentNo:String;说明:一个Var可声明多个变量,但须指明类型。,7,三、变量的作用范围1.过程级变量:在过程里声明,只存在于该过程;2.窗体级变量:在窗体单元的Private域内声明,只存在于该窗体范围,即该窗体单元的所有过程均可访问该级别变量,随窗体的结束而结束;3.公共变量:在窗体单元的Public域内声明,或紧跟在窗体变量声明之后声明的变量,或在公共单元里声明的变量;在整个程序运行期间均可访问,不过,在访问该级别变量之前,需先引用定义变量的单元文件,然后方可使用变量;若单元文件有对应的窗体,则变量名前需加入窗体名称,同使用组件。如frmMain.UserName。,8,四、变量的赋值给变量赋值一个确定的数StudentNo:=911023;/字符串用单引号StudentWeight:=55;将一个变量的值赋值给另一个变量I:=J;/将变量J的值赋值给变量I将算术表达式的值赋值给变量Y:=sin(3*X+2.4)/Sqrt(Power(10,1.1)+4);先计算表达式的值,然后赋值先比较运算,然后赋值:TF:=(X*Y20)And(ZLength(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(D):将日期数据转换字符串;TimeToStr(D):将时间数据转换字符串;DateTimeToStr(D):将日期和时间数据转换字符串;StrToDate(S):将日期字符串S转换为日期;StrToTime(S):将时间字符串S转换为时间;StrToDateTime(S):将日期和时间字符串S转换为日期和时间;,23,24,4.3结构类型4.3.1集合类型定义集合类型的语法格式:Type集合类型名=Setof序列数据类型;例如:TypeTMySet=Setof0.255;或TypeTMySet=SetofByte;集合类型声明后,即可定义和使用集合类型的变量:VarLineNum:TMySet;LineNum:=1,4,7;思考:枚举类型与集合类型有何区别?,25,判断某元素J是否在集合里,使用In:IfJinLineNumThen4.3.2集合类型的使用举例TFontStyle=(fsBold,fsItalic,fsUnderline,fsStrikeOut);TFontStyles=SetofTFontStyle;IfChkBold.CheckedThenFont.Style:=Font.Style+fsBold/并集ElseFont.Style:=Font.Style-fsBold;/差集注:集合里的元素与位置无关,且不能重复。,26,4.4数组类型数组类型表示同类数据的集合,它们共用一个名字,通过编号(索引)来访问其中的某个数据。如某个班级所有学生的名字构成一个数组。一维静态数组:声明数组时即指定数组大小。如:VarStudentNames:Array40ofString;数组元素40个,索引从0开始,直到39TeacherNames:Array1.120ofString;数组元素120个,索引从1开始,直到120,27,一维动态数组:声明数组时不指定数组大小,程序运行过程中可随时改变其大小。如:VarStudentNames:ArrayofString;TeacherNames:ArrayofString;运行时改变其大小:SetLength(数组名,N);/设置数组大小为N例:SetLength(StudentNames,40);/设置数组大小SetLength(TeacherNames,120);/设置数组大小SetLength(TeacherNames,135);/改变数组大小,28,如何表示机电学院14个班级学生的姓名?二维静态数组:如:VarStudentNames:Array1.14,1.40ofString;或StudentNames:Array0.13,0.39ofString;第一个索引表示班级,第二个索引表示学生学号二维动态数组:如:VarStudentNames:ArrayofArrayofString;使用时:SetLength(StudentNames,14,40);/设置大小注意:数组类型一旦确定不可改变;动态数组索引始于0。,29,数组有关操作说明Low(A):返回数组A的第一个(最小)下标;如果是多维数组,返回数组A第一维的第一个(最小)下标;High(A):返回数组A的最后一个(最大)下标;如果是多维数组,返回数组A第一维的最后一个(最大)下标;A:=B:大小、类型相同的数组,可以通过赋值语句操作;如果A是动态数组,则使用nil可释放其占用内存:A:=nil;或SetLength(A,0);改变动态数组大小时,存留下来的数据不受影响。,30,4.5记录类型记录类型可以用来保存一组不同类型的数据信息。定义记录类型的语法格式:Type记录类型名=RecordField1:类型1;Field2:类型2;Fieldn:类型n;End;,31,例如:TypeTStudent=RecordName:String;No:String20;Sex:String2;Math,English,Physics:Real;End;数据类型定义完成后,即可定义该类型的变量。例如:VarStudent:TStudent;Students:ArrayofTStudent;,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:=Score1+Score2;Y:=sin(3*X+2.4)/Sqrt(Power(10,1.1)+4);5.2复合语句多个简单语句的组合,以“Begin”表示开始,以“End”表示结束(Begin和End一定成对出现)。如:BeginScore1:=92;Score2:=98;Total:=Score1+Score2;End;,35,6.1单分支条件语句格式1:If条件Then;或If条件Then;例如:IfScore=90ThenShowMessage(优秀);格式2:If条件ThenBegin/一条或多条语句,以“;”结束End;例如:IfPassed=TrueThenBeginInc(Life);Inc(TotalNum);End;,36,6.2双分支条件语句格式1:If条件ThenElse;或If条件ThenElse;格式2:If条件ThenBegin/一条或多条语句,以“;”结束EndElseBegin/一条或多条语句,以“;”结束End;,37,6.3多分支条件语句格式1:If条件1ThenElseIf条件2ThenElseIf条件3ThenElse;例:根据工资计算个人所得税。,38,6.3多分支条件语句格式2:If条件1ThenBegin/一条或多条语句,以“;”结束EndElseIf条件2ThenElseIf条件3ThenElseBegin/一条或多条语句,以“;”结束End;,39,6.4Case语句很多情况下可以替代分支条件语句。格式:Case条件Of条件1:;条件2:;条件3:BeginEnd;Else;End;,40,例子:CaseLevelOf1:ShowMessage(Low);2:ShowMessage(OK);3:ShowMessage(Good);4:ShowMessage(Better);5:ShowMessage(Best);End;注意:“Case”与“End”成对出现。,41,7.1当型循环当条件成立时,执行或,否则退出。格式1:While条件Do;或While条件Do;格式2:While条件DoBegin/一条或多条语句,以“;”结束End;,42,7.2直到型循环执行或,直到退出条件成立时退出。格式:Repeat/一条或多条语句,以“;”结束Until条件;与当型循环的区别:当型循环:先判断条件,若条件成立,则执行或,否则退出。直到型循环:先执行或,然后判断条件,若退出条件成立时退出。,43,7.3For循环此循环适用于循环次数已知的情况。格式1:For循环变量:=初值to终值do;格式2:For循环变量:=初值to终值doBegin/一条或多条语句,以“;”结束End;/这两种情况下初值必须小于或等于终值。,44,7.3For循环格式3:For循环变量:=初值Downto终值do;格式4:For循环变量:=初值Downto终值doBegin/一条或多条语句,以“;”结束End;/这两种情况下初值必须大于或等于终值。,45,7.4循环的嵌套同一种循环或不同类型的循环可以互相嵌套,但要注意,外层循环必须完全包含内层循环。例如:ForI:=1to9DoForJ:=1to9DoOutPut(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;Ln(x):返回x的自然对数;Pi:返回圆周率3.1415926535897932385,精度取决于编译程序时的系统。,47,Random(Range):返回一个0且小于参数Range的随机数,若缺省Range,则等同于Random(1)。使用随机函数Random(Range)之前,必须调用一次Randomize过程,来初始化内部随机函数发生器。8.2Delphi定义函数在Delphi的“Math”单元里定义了很多常用函数,使用时,将“Math”添加到Uses语句中。InRange(x,Xmin,XMax):判断x是否在某范围内;Power(a,x):返回ax;a、x均为实数;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自定义函数与过程函数、过程是独立的语句块,能够实现一定的功能,可以被其它程序块调用,也叫子程序。函数在执行后有返回值,故可作为表达式使用;过程没有返回值。函数、过程必须先定义,再编写其功能代码,最后才是被调用。如(1)在Private部分声明函数、过程:PrivateProcedureOutPut(Txt:String);FunctionJieCheng(N:Integer):Integer;Public,参数列表,参数列表,50,(2)定义函数、过程,编写其功能代码:ProcedureTfrmMain.OutPut(Txt:String);BeginCaption:=Txt;End;FunctionTfrmMain.JieCheng(N:Integer):Integer;VarI,S:Integer;BeginIfN0ThenS:=0ElseIfN=1ThenS:=1ElseBeginS:=1;ForI:=1toNDoS:=S*I;End;Result:=S;/Result可以表示多种函数返回值End;,参数列表,参数列表,51,(3)函数、过程的调用:ProcedureTfrmMain.BtnRunClick(Sender:TObject);VarS:Integer;BeginS:=JieCheng(10)DivJieCheng(4);/调用阶乘函数计算OutPut(10!/4!=+IntToStr(S);/调用输出过程输出计算结果End;,52,函数、过程的参数:函数、过程通常需要传递参数,参数可分为形式参数和实际参数。在过程和函数的声明、定义时参数列表中的参数为形式参数;调用函数、过程时参数列表中的参数是实际参数。参数必须指定类型,并用“;”隔开,形式参数和实际参数的类型、顺序必须一一对应、个数相同。参数的传递有“数值传递”和“地址传递”两种:通过数值传递参数,参数值不能被改变;通过地址传递参数,参数值可以被改变,因此可通过地址传递参数并返回变化后的参数值;在参数列表的形式参数前加“Var”,即可将该参数设置为“地址传递参数”。,53,例如:ProcedureTfrmMain.SwapAB1(A,B:Integer);VarT:Integer;BeginT:=A;A:=B;B:=T;/返回的A、B与原来相同End;ProcedureTfrmMain.SwapAB2(VarA,B:Integer);VarT:Integer;BeginT:=A;A:=B;B:=T;/返回的A、B实现了交换End;,54,在程序执行过程中,总是不可避免地出现一些异常,有些异常对程序的影响不大,而有些异常对系统而言却是致命的,因此,在我们无法确定哪些异常是致命的时候,最好承认所有异常都对系统产生严重影响“错误就是错误,没有大小之分!”。有了异常就必须解决!但是,我们真能分辨所有的异常类型并解决它们吗?能分辩,但比较耗时、费力,而且,不能全部解决。怎么办?解决能解决的异常,跳过不能解决的异常!,55,Delphi提供了两种解决错误的办法:(1)TryExcept或donothing/可能不会执行End;(2)TryFinallydosomething/如释放内存等。总会执行End;,56,一、程序中的错误1.1语法错误即编写的语句不符合语法规范,是一种常见错误。如Begin和End不是成对出现;句尾缺“;”;标识符、变量、函数或过程未定义;数据类型不符等。这类错误在程序编译时会显示出错信息,观察代码窗口下方的信息窗口可知错误类型及所在行号,以便修改。编译命令:Ctrl+F91.2运行错误程序通过了编译,但在运行期间出现错误。如一个数被零除;表达式计算结果太大溢出;试图打开不存在的文件等。观察弹出的错误信息对话框即可知道错误类型。,57,1.3逻辑错误程序通过了编译,也能运行,但结果不对。此时,需要在程序设计阶段通过调试工具找到这类错误并修改之。二、程序调试2.1使用断点按下F5键或在光标所在行的左侧空白处左击鼠标,即为光标所在行设置断点,重复此操作可取消断点。2.2运行到光标处按下F4键,程序执行到光标所在位置。2.3单步调试F7键:逐行执行所有语句,也会进入过程内部执行;,58,但不会进入Delphi提供的库函数内部。F8键:“逐行”执行,若遇到函数或过程,不会进入函数或过程内部,而是执行完函数或过程,并将光标停留在函数或过程调用的下一条语句上。2.4计算/修改变量值在调试过程中,用光标选中变量或表达式,按下Ctrl+F7键,会弹出一个对话框,显示该变量或表达式的值;有时,在代码编辑窗口,用光标选中变量或表达式,Delphi会以气泡的方式显示该变量或表达式的值。2.5其它更多的调试方法参见Help文档或P166P170,59,1.以自然的方式编写程序,尽量少用技巧;2.用名词和动词来命名过程。动词描述行为,名词描述该行为所操纵的数据;如果动词没有意义,那可能是在命名数据;3.确保一个过程只做一件事,并做好它,这件事应当是过程名中所提到的操作。不要编写集多种功能于一身的函数,在函数的返回值中,不要将正常值和错误标志混在一起;4.方法尽可能短,这样可以把变量发生混淆的可能性降到最小。5.使用简短的方法,这使得难以在过程一级引入错误。,60,6.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 岩棉板外墙保温防火隔离带设置方案
- 危化品仓库泄漏堵漏应急演练方案
- 2026年村镇(社区)后备干部考试参考试题及答案
- 粉体输送设备操作工安全操作规程
- 2027届包头市重点中学八年级数学第一学期期末经典试题含解析
- 2026年保密在线知识试题及答案
- OC岗位专业考试题(含详细答案解析)
- 呼吸康复评估专家共识(2025版)
- 支撑檩条安装施工工规程
- NYU留学生 阿里前端校招面试真题(含详细解析)
- 贸易安全培训课件
- DB4201∕T 693-2024 建筑与市政工程软弱地基基础技术规程
- 物流司机制度管理制度
- T/CECS 10350-2023除臭收集用轻质高强度玻璃钢盖
- 江苏省2025年中职职教高考文化统考数学试题
- 广东市政工程施工安全管理资料统一用表 上册
- 2024年人教版六年级语文上册《第4单元语文园地四》教学课件
- 战略合作协议范本
- SH∕T 3097-2017 石油化工静电接地设计规范
- DB 3406T 022-2024市政道路建筑垃圾填筑 路基施工技术规范
- 急诊科护理典型案例分析
评论
0/150
提交评论