delphi步步精通电子讲义_第1页
delphi步步精通电子讲义_第2页
delphi步步精通电子讲义_第3页
delphi步步精通电子讲义_第4页
delphi步步精通电子讲义_第5页
已阅读5页,还剩343页未读 继续免费阅读

下载本文档

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

文档简介

第1章Delphi1.1Delphi1.1.1Delphi1.1.2Delphi1.1.3用Delphi进行Windows1.1.4Delphi7.01.2Delphi7.01.2.1Delphi7.01.2.21.2.3窗体设计器及代码编辑器1.2.3窗体设计器及代码编辑器1.2.3窗体设计器及代码编辑器1.2.3窗体设计器及代码编辑器1.3设计第一个Delphi7.01.3.11.3.2设计窗体和组件的属性1.3.2设计窗体和组件的属性1.3.2设计窗体和组件的属性1.3.2设计窗体和组件的属性1.3.2设计窗体和组件的属性1.3.3编 1.3.41.3.51.4Delphi7.01.4.1程序的基本组成1.4.1程序的基本组成1.4.2ObjectPascal的单元1.4.2ObjectPascal的单元1.4.2ObjectPascal的单元1.4.2ObjectPascal的单元第2章ObjectPascal2.12.1.12.1.22.1.32.22.32.3.1常量2.3.1常量2.3.2变量2.3.2变量2.3.2变量2.42.4.12.4.22.4.32.4.42.4.52.4.62.52.5.22.5.32.5.4第3章三种结构的程序设计3.13.1.2顺序控制结构3.1.2顺序控制结构3.23.2.1If语句3.2.1If语句3.2.1If语句3.2.2case3.33.3.1Repeat语句3.3.1Repeat语句3.3.1Repeat语句3.3.1Repeat语句3.3.2While语句3.3.2While语句3.3.2While语句3.3.3For语句3.3.3For语句3.3.3For语句3.3.3For语句第4章数组4.14.1.1定义4.1.1定义4.1.1定义4.1.1定义4.1.1定义定义应用应用应用应用4.2定义定义定义定义应用应用应用应用第5章过程与函数5.1函数的定义与使用函数的定义与使用函数的定义与使用函数的定义与使用过程的定义与使用过程的定义与使用过程的定义与使用5.25.2.1 算函5.2.2字符处理函数5.2.2字符处理函数 框过程 框过程 5.35.4.2子程序的递归5.4.2子程序的递归5.55.5.2全局变量与局部变量5.5.2全局变量与局部变量第6章自定义类型6.16.1.16.1.2枚举类型的运算6.1.2枚举类型的运算6.1.3枚举类型的使用6.1.3枚举类型的使用6.1.3枚举类型的使用6.26.2.2子界类型的使用6.2.2子界类型的使用6.36.3.1集合类型的定义6.3.1集合类型的定义6.3.1集合类型的定义6.3.2集合类型的运算6.3.2集合类型的运算6.3.2集合类型的运算6.3.3集合类型的使用6.3.3集合类型的使用6.46.4.1 记录中的字段与With语句 记录中的字段与With语句 记录中的字段与With语句 记录中的字段与With语句 记录中的字段与With语句6.4.3记录的变体部分6.4.3记录的变体部分6.5类和对象的定义类和对象的使用类的方法类的方法第77.17.1.1窗体组件7.1.1窗体组件7.1.2按钮类组件7.1.2按钮类组件7.1.2按钮类组件7.1.2按钮类组件7.27.2.2编辑框组件7.2.2编辑框组件7.2.2编辑框组件7.2.2编辑框组件7.37.3.1列表框组件7.3.1列表框组件7.3.2组合框组件7.3.2组合框组件7.3.2组合框组件 框组件 框函7.4.1常 框函数 7.5菜单组件 组件和状态栏组7.5.2 7.5.47.67.6.2文 组7.6.3其他组件7.6.3其他组件7.7组件应用7.7组件应用7.7组件应用第8章 应用编8.1 介8.1.2 Windows操作系统对 的支8.2.1Tanimate组件的主要属性8.2.1Tanimate组件的主要属性8.2.2Tanimate8.2.3Tanimate8.2.4编程实例8.2.4编程实例8.2.4编程实例8.2.4编程实例8.2.4编程实例8.2.4编程实例8.2.4编程实例8.3 器组8.3.2 第9章DLL9.1DLL9.1.1DLL9.1.1DLL9.1.2使用DLL的优点9.1.2使用DLL的优点9.2.1DLL9.2.2DLL中的Exports9.2.3编写DLL(9.2.3编写9.2.3编写9.2.4DLL9.3DLL9.3.29.4DLL第9章DLL9.1DLL9.1.1DLL9.1.1DLL9.1.2使用DLL的优点9.1.2使用DLL的优点9.2.1DLL9.2.2DLL中的Exports9.2.3编写DLL(9.2.3编写9.2.3编写9.2.4DLL9.3DLL9.3.29.4DLL9.5利用DLL第10章数据库应用基础10.110.1.2Delphi7.0数据库特性和支持的数据库种类10.1.2Delphi7.0数据库特性和支持的数据库种类10.2创建第一个Delphi7.010.2.1Delphi7.010.2.2Delphi7.0数据库桌面10.2.2Delphi7.0数据库桌面10.2.2Delphi7.0数据库桌面10.2.2Delphi7.0数据库桌面10.2.2Delphi7.0数据库桌面10.2.3使用数据库窗体向导设计数据库应用程序10.2.3使用数据库窗体向导设计数据库应用程序10.2.3使用数据库窗体向导设计数据库应用程序10.310.3.1BDE组件10.3.1BDE组件10.3.1BDE组件10.3.1BDE组件10.3.1BDE组件10.3.1BDE组件10.3.1BDE组件10.3.1BDE组件10.3.2DataSource10.3.3DataControls组件10.3.3DataControls组件10.3.3DataControls组件10.3.3DataControls组件10.3.3DataControls组件10.3.3DataControls组件10.3.3DataControls组件10.3.3DataControls组件10.3.3DataControls组件第11章SQL11.1Query11.1.1Query组件的常用属性11.1.1Query组件的常用属性11.1.1Query组件的常用属性11.1.1Query组件的常用属性11.1.1Query组件的常用属性11.1.1Query组件的常用属性11.2动态SQL语句的编程11.2动态SQL语句的编程11.2动态SQL语句的编程11.3常用SQL11.3.1SQL11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.3.2SQL语言的基本操作11.4Query组件的综合应用举例11.4Query组件的综合应用举例第1Delphi概DelphiDelphi7.0Delphi简Delphi是便、快捷的Windows应用程DelphiDelphiWindows随着Windows操作系统的推出,为了解决Windows编程存在的问题,Inprise公司(原Borland公司)开发了可视化的软件开发工具—— Delphi至今已经历了七代产品的发展历。Delphi 几乎与Windows95同 。Delphi1可以看做TurboPascalWindows版,它为使用Pascal一个可视化的编程环境。但仍然属于16Delphi 支持32Delphi ActiveX控件及其创建,它是一个比较 版本,Delphi作为Windows应用程序开发工Delphi4、Delphi5、Delphi6不断改进以前版本的不足,增加新的功能,Delphi 又在以前的基础上进行了加强,是目前 版本Delphi的特Delphi最经典、最恰当的描述。Delphi具有简单、高效、功能强大的特点。和VisualC++相比,Delphi更简单、更易于掌握,而在功能上却毫不逊色;和VisualBasic相比,Delphi功能更加强同时具备了VisualC++功能强大和VisualBasic简单易学的特最先进的编程思想:面向对象的程序设计,简称为Delphi提供了大量的可视化组件,可视化编Delphi采用了最为领先的数据库用Delphi进行Windowsi的编程思想与以前传统的面向过程的编程思想有很大的不同,而在Ws操作系统下的程序设计又与O下的程序设计有很大的不同主要有以下内容WindowsDelphiDelphi7.0新特按照Inprise惯例,Delphi每年都会推出一个新版本。Delphi7.0是前最高版本,进一步提高了自身性能和操作Delphi7.0WebDelphi7.0的开发环Delphi7.0的集成开发环境IDE是用于进行设计、运行和测试工作系统。Delphi7.0运行后可以见到它的开发环境如图1-1所主要包括以下几个窗口:主窗口;对象树形图、对象监视器窗口栏

Delphi7.0开发环境

Delphi7.0主窗Delphi7.0的主窗口位于屏幕的上端,包 (菜单)、快捷按钮主窗口各部分的详细说明请参见 对象树形图及对象监视器窗对象树形图窗口(ObjectTreeView)用树形表方式列出了项目在对象树形图窗口下方是对监视器窗口(Object (Events),列出了当前部件响应 。对象监视器窗口如1-5所示 图1-4对象

图1-5窗体设计器及代码编辑器窗体及组件的属性。窗体设计器窗口如图-所示。对象树形图窗口与对象观察器窗口、窗体设计器窗口同步,即在此三个工具的任何一个中改变焦点时,另外两个工具的焦点也会发生变化。

图1-6窗体1.2.3窗体设计器及代码编辑器可从对象监视器中选择某,双击后进入代码编辑器。也可在窗体中直接双击某对象进入代码编辑器,通过这种方法进入代码编时,光标会自动定位在相应的处理过程中。器中产生一个新页卡,在新卡中可以编辑相应的单元代

(图1-7代码编辑器)1.2.3窗体设计器及代码编辑器为了减轻编写代码的工作量,Delphi7.0码编辑器中输入某个类变量及其后的Ene18所示。参数自动提示功能当调用某

(图1-8(图1-9参数自动提示功能1.2.3窗体设计器及代码编辑器代码模板功能用于提供语句模板以帮助代码的编写,例如:输入“if”,按组合键trlJ,系统自动弹出有关“if”语句的代码模板供程序员选用,如图-所示。符号洞察功能程序员在代码编辑过程或程序调试过程中,将鼠标置于一个标识符上,稍做停顿系统将自动弹出一个提示框,提示框中显示该标识符的类型、所属单元、 位置等信息,如图-1所示。

(图1-10(图1-11设计第一个Delphi7.0程本节要创建一个简单的应用程序。启动eh.0程序,出现一个窗口,窗体标题栏中显示“.0程序”“显示”按钮,单击该按钮显示一行文字“第一个Delphi7.0程序”。单击窗体右上方闭按钮时退出程序。通过设计一个简单的应用在Delphi7.0中开发的每个应用程序都被称为工程。Delphi7.0编程先从创建一个新工程开始。创建新工程有以下两种方启动Delphi7.0进入开发环境,此时系统自动生成一个工,默认名为菜单,指向e,然后单击Apctn系统将创建新创建的工程中包含一个默认窗体(Form1)和它对应的单(Unit1),根据工程的需要可添加窗体或工程文件的扩展名为.dpr。打开一个已建立的工程的方法是:单击菜单,指向OpenProject,然后选择工程文件即设计窗体和组件的属性1单击组件板上所需组件的按钮,然后在窗体适当位置拖动鼠标画出组,即可将组件添加到窗体指定位双击组件板上所需组件的按钮,即可将组件添加到窗体中心位按下Shift键不放,单击组件板上所需组件的按钮,所选择组件出现蓝边框,同时对象选择按钮弹起。可以在窗体适当位置连续画出该类组,用鼠标单击对象选择按钮,可以取消该类组件的连续添加操本程序中要用到两个组件,一个 (Label)组件用于显示文字,一个是按钮(Button)组件用于控制文字的显示 1.3.2设计窗体和组件的属性刚添加到窗体中的组件,其边框上有八个黑色小方块,表明它是当前被选定的组件。内部,按下鼠标左键并拖动鼠标到窗体的任意位置。按组合键Ctrl+C可以对所选组件进 1.3.2设计窗体和组件的属性组件用调整位置的方法可以对齐组件,但操作步骤复杂。Delphi7.0提供对齐工具可以使多个组件的对齐极为迅速方Position指向Align,可以显示图1-12所示的框。指向AlignmentPalette显示对

(图1-13齐模

图1-12对1.3.2设计窗体和组件的属性 首先设置窗体Form1观察器的对象下拉列表框中显示的是“Form1Tform1”。从属性名中找到标题属性(Caption)一项,将其值改为Deh程序”。为了使窗体变得美观合适,更改高度属性(Height)值为220,宽度属性(Width)值为350。设计窗体和组件的属性选择 17.0程序”。为了使文字醒目,修改它的 14所示,将它字体设为“楷体_GB2312”,字形设(Height)值为35,宽度属性(Width)值为300要实现刚开始时文字不可见,在单击时显示文 设置按钮Button1的标题属性为“显示”。并将示按钮 拖动到适当位置 如图1-15

(图1-15 单击菜单File,Save单 上的SaveAll按钮单 上的SaveAll按钮,弹出一个保存单元文 框,在上面的保下拉框中选择Sample ,文件名默认是Unit1.pas,将它改为Main.pas,单击保存按钮。接着弹出一个保存工程文件 框,文件名默认是Project1.dpr,将它改为Sample.dpr,单击保存按钮,此时应用工程被保存在Sample 下。保存工程时单元文件名不要和工程文件名相同。作为一个实际的应用程序,应当将这些默认的文件名更改为更有意义,不易 的文件名。当项目包含的文件较多时这一点就显得更加重要,如果文件名指定不当会出现意想不到的麻烦。一般不要在Delphi7.0系统外更改项目所用文件的文件名。 择 e译如果法有错,则根据提示的错误信息修改后再编,直到编译无错误,选用菜单项中的/n菜单转入运行。也可两步合为一步,直接选用菜单项中的Run/Run菜单(或按F9热键系统直接进行程序的编译与运出现一个名为Delphi7.0程序的窗口,字“第一个Delphi7.0程序”,单击窗体及到程序的调试。Delphi7.0为程序员

(图1-16执行程序Delphi7.0一节中,编写了一个简单程序来实现显示一 ,并把程在了 下,观察 可以发现,一个简单的 7.0程序是多个文件组成的。其中包括以下几种文工程件(.):li .0工程文件,用于保存窗体、单元等以及程序运行的初始化代码这种文实际上包含了Pascl代码。单元文件(.Pas):Pascal文件,用于保存程序源代码,可以是与窗有关的单元或是独立的单窗体文件(.Dfm):保存窗体或数据模块及其构件特性的二进制文选项文件(.Dof):含有当前项目选项设置的文本文配置文件(.Cfg):含有当前项目编译配置的文本文资源文件(.res):该二进制文件包含项目的图标,由Delphi7.0不更新和创建,用户一般不需要修备份文件(.~dp,.~df,.~pa):分别对应工程、窗体、单元文件份文件程序的基本组成元文件。工程文工程文件扩展名为.dpr。是整个应用程序的主程序,有两项功能一是说明工程中的单元模块,二是启动应用程序。工程Delphi7.0自动生成,一般情况下不修改这个文单击Project选择ViewSource,可以在代码编辑器中打开program

//保留字program说明这//文件名为//保留字uses对工程 的单元进行说 Formsmainin'main.pas' main单元,在当 的main.pas文件中,相应的窗体为

//系统编译命令,将扩展名为.res的二进制资源文件连接到.exe//工程执行部分的开 //应用程序的初,);//

//运行程//工程执行部分的结程序的基本组成窗体文窗体文件的扩展名是.dfm。一个或多个窗体文件,它们含有相应i7.0i7.0用鼠标单击窗体,在快捷菜单选择Viewastext即可在代码编辑到以文本形式表示的窗体文件的内容,工程Sample中的Mainform文件的文本形式。(代码省略,详见 单元文单元文件的扩展名为.pasDehi 70中每个窗体都有一个单元文件与之相对应,窗体的单元文件包含了程序部分,用以控制窗体的行为。在一个工程中,还可以建立与窗体无关的单元文件,用来编写工程中公用的函数、过程或定义新的数据。许多工程还调用了Delphi70附加库或其单元文件中的过程或函数。uses子句中包含的标 于激活窗体 处理过程程序。(代码省略,详见 ObjectPascal的单元单元是常量、变量、数据类型、过程与函数的集合,而且能够被多个应序所共。i7.0内部包含了多个程序单元,它们说明了对象、组件、常用过程与函数以供程序员在设计应用程序时使。例,当在窗体中加入一个ckBox组件i7.0在 入Stctrls,因为ckBox组件是在Sttrls单元中说明的。当设计窗体,li7.0会自动建立一个和该窗体有关的单元文但并非所有的单元都和窗体有程可以自行编写只包括过程与函数的单。unit<单元名称>uses选择性的单元列表uses选择性的单元列表ObjectPascal的单元程序单元的接口Interface是单元的接口部分,它决定了本单元对其他任何单元或 Itfce始在Itfce单元或应用程序是可见的。一个单元可以使用其他单元的说明,只需要在s语句中指明那些单元即可。例,在单元中编写程序代码,想调用单元Itfc部分明的程序单元入的Itfc分的ss子句,则任何中的程序都可以调用B中说明的程序。但如果出现在的Itfc部分ss子句中,那么单元便不能出现在的Itfcess子句环 编译时,会产生出现错误信息。程序单元的实现实现部分Implementation中包含Interface中说明的过程、函数 处过程的具体实现代码。这一部分可以有自己的额外说明,但这些说明是有的,外部程序不能调用这些说明。在Interface中说明的函数实体必1.4.2ObjectPascal的单元Implementation部分出现,可以使用标题简写:只输入ProcedureFunction保留字,后面跟过程或函数的名称即可,其后则是程序的实现部程序单元的初始化初始化当前单元所使用的数据,或是通过Interface部分将数据提他应用程序单元使用时,可以在单元的前加入一个Itaztn部分。当一个应用程序使用一个单元时,在单元中的Ititn部分会先于其他的代使用Delphi7.0的组件及其在窗体中加入组件时,如果该组件在组件库中,Delphi7.0会在单Delphi7.0的环境中并没有组件存在。例如,想在单元中加入一个预定义的要使用在其他单元中说明的函数,应在函数的前面加上这一单用‘.’号隔开。例如,要在Unit2中使用Unit1中说明的test函数,应使用下1.4.2ObjectPascal的单元方法Number:=建立与窗体无关的新如果想在工程中建立一个和任何窗体无关的新单元,可选择File单击NewUnit。这时一个新的单元加入了工单元的代码如unit是i7.0建立的与窗体有关第2章ObjectPascalObjectPascalDelphi7.0是一个基于ObjectPascal语言的Windows应用程序开发系统,在所有的处理过程和应用程序中都是使用它来编写程序代码。ObjectPascal编程语言是在Pascal首先介绍ObjectPascal语言的最基本内容:保留字和标志符 在编程时不能被重新定义或另作他用。ObjectPascal语言规定的保留字有 除了上述的保留字外,Private、Protctd、Public、Pulsed和Auttd在定义对象类型时也作为保留字,而在其他场合则作为指令符。单词t和也具有特殊的含义。注意:ObjectPascal编程语言和许多编程语言不同,它对单词的大小写是不敏感的。ObjectPascal不区分大小写。IN、in和In都被看做标识符是ObjectPascal语言中用来表示应用程序量的名称。包括:标识符分为标准标识符和自定义标识符两标准标识符是Obct Pascl语言系统预先分配给标准常、标准数标符如标准量:se、True;标准类型:tr、cr、rea;标准函数:As、r、s。函数、过程以及所编写的程序名等。Object 必须以字母或下划线开不能与保留字相避免与ObjectPascal已经使用的标准标识符相可以将指令符定义为标识符,ObjectPascal不会指示出错,但这容易 ObjectPascal规定的指令符见表2-2。表2-2ObjectPascalObjectPascal提供了多种数据类型,包括标准数据类型和高级数据类型。标准数据类型属于ObjectPascal内部约定的数据类型,无需定义就可(ctr)(String)、布尔型(Bln)五种。高级数(Enutd)、子界型(Sae)、集合类型(Set)、数组类型(Array)、记录类型(Record)文件类型(File)类类型(Class)、 类型(ClassReference)、接口类(Interface)、指针类型(Pointer)、过程类型(Procedural)、可型(Variant)整数包括正整数、负整数和零整型 整数数据的类型。ObjectPascal包括9种形式的整型据,详见 前种为一般整型,后7种为基本整型,应尽量使用Itr、dial两种基本类型,因为它们在各种CPU和操作系统中都提供最佳的性能。通常,作用于整数的算术运算符返回Itr类型的值。在当前执行中,等价于位的长整型(LongInt)。仅当对It64类型执行运算时,运算结果返回It64类型。因此,下面的代码执行后得到的结果是不正确的:i:j:i:= j:=i+要使返回值是Int64类型,在上面的情况中可以将i转换为Int64j:=Int64(i)+实数是最常用的数据类在ObjectPascal中实数有两种表示方法:小数表示法和科 例如-3.6,2.4e0,–1.2e-小数表示法与日常数学中所用表示方法相同。科 中,e之表示有效数字,e之后数字表示10的幂。–1.2e-5=(-1.2)×10-5=-需要注意的是小数表示法中小数点前后都必须有数字,科 e前后都必须有数字,e可以大写(1-)实型 实数数据的类型。ObjectPascal包括5种形式的实型据,详见 P26表2-4前六种为基本数据类型,ell类型,它与ue等价。rrc是专为处理货币而设计的,该类型与其Cc字符型 单个字符的类型。ObjectPascal包括3种形式的字符型据,详见表2-5

表2-5ObjectPascalAnsi12基本字符类型是AnsiChar和WideChar。AnsiChar的尺寸是一个字节(8位),其值参照本地字符集。AnsiChar最初模仿ANSI字符集,但现在用于扩大到当前的本地字符集。WideChar字符用多于一个字节来表示每个字符。WideChar的尺寸是一个字(16位)字符顺序参照Unicode字符集,一般字符类型是Char,等价于AnsiChar字符类型数据的表示方法是用两个单引号括起单个字符'A'、'6'、'.'。''表示空格符。 字符串数据的类型。ObjectPascal包括4种形式的字 保留字string的作用如一般类型的标识符。例varS:创建了变量$+}状态下,编译器将strin(后面没有跟随方括号和数字)解释为Anstring;使用编译指示$时,解释为ShortString。ShrtString类型串的长度在5之间。ShortString态改变,其占用的内存是静态的,总是6字节;第一个字节串的长AnsiString也叫做长串(longstring),用来表示动态分配的串。WideString类型表示16位Unicode字符的动态分配的串。WideString类型大部分的特性与AnsiString类型相似ObjectPascal还支持其他最大长度在0到255之间的短串。可以通过varMyString:创建了一个叫做MyString的变量,其最大长度为100个字符布尔型数据用于进行逻辑运算,布尔型数据的值只有两个:True(真和False(假)ObjectPascal包括4种形式的布尔型数据,详见表2-7表2-7ObjectPascal1124Boolean类型是编程时常用的布尔类型,其他三种类型是为了兼他语言而设置的。Boolean类型的取值为False和True两个符在ObjectPascal中,布尔表达式不能被等同为整数或实数。因此,如果是一个整数类型的变量,那么ifxthen将产生一个编译错误可以将上个语句改ifx=1then序数序数类型包括整数、字符、布尔、枚举、子界等类型。序数类型)(除最后一个)nn+。序数序数函数Ord()返回数据的序例如:Ord(6)的返回值为6,表示整数6的序数是前趋函数Pred()返回数据的前趋值例如:Pred('e')的返回值为'd',表示字符e的前趋是字符d后继函数Succ()返回数据的后继值例如:Succ(False)的返回值为True,表示布尔型数据True是False的继首序数函数Low()返回序数类型的数据中序数最小的末序数函数High()返回序数类型的数据中序数最大的一个数在程序设计中常用到两种形式的数据,一种是在程序执行过程中其值保持不变的数据,称为常量;另一种是在程序执行过程中其值可以改变的数据,称为变量。常量是一种在程序执行进程中其值保持不变的根据使用的方式不同,程序中的常量分为直接常量、真实常量与类型常直接常直接常量是指在程序中直 的整数、实数、字符、字符串或其他不类型的常数。下列常数均属于直接常带有正负号的整数或无符号的整数,如:-1,+2,2003,0实数,包括定点实数与浮点实数两种表示形定点实数即小数形式,如:0.03,-32.48,+102.9,0.0浮点实数即指数形式,如:+2.56E-5,-1.2E+8,3.2E12常量字符,由单撇号括起来的单个字符,如:'a','C','6','+' 布尔型常数,只有两个值True和False真实常真实常量是指一个 的标识符,它的值不能改变<常量名1>=<常量值…<常量名n>=<常量值其中const是ObjectPascal的保留字,表示常量定义的开始。<常量名>的标识符,<常量值>是直接常量或常量组成的表达式。例如 不能在程序中给常量另行赋值,否则会导致语常量类型类型常量不同于真实常量,它能保存数组、记录等高级数据类型定义类型常量的语法格式如<常量名>:<类型名>=<常量值例如o:string= Max:Integer=Digits:array[0..9]ofChar=('0','1','2','3','4','5','6',‘8’‘9’);//定义了一个常量用于保存在缺省的编译状态{$J-}中,类型常量不能被赋予新的值,这时的类型常量相当于只读变量。然而,如果编译指示{$J有效,那么类型变量与其定义类型相兼容的数据。变量有如下三个主要特变量名:即变量的标识符,用于对所代表的内元 类型:变量的类型决定了变量中所存放数据的范、有效的操作、 空间的大小和格。变量值:变量所代表的内存单元中的数据值程序中的变量必须 才能使用变量变量在单元、函数或过程 部分进 位决定了变量的作用范围。变 的格式为变量<变量名1>:<类型名…<变量名n>:<类型名多个同类型的变量时可采用如下格var<变量名1>…<变量名n>:<类型名其中var是ObjectPascal的保留字,表示变量定义的开始,<变量名>可以是任意合法的标识符,<类型名>可以是ObjectPascal的基本数据类型也是由用户定义的高级数据类在过程或函数内部的变量有时叫做局部变量,而在应用程明的变量叫做全局变量。全局变量可以 时对它进行初始化,格式为<其中常量表达式的值必须与变量定义的类型相变量变量经过 之,就可以在程序中使用,通常可以通过赋语句给变量赋值。 运算是对数据进行加工处理的过程,描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。表达式是表示某个求值规则的运算 它由运算符和圆括号将常量、变量等操作数以合理的形式组合而成。表达式可以用来执行运算、操作或测试数据,每个表达式都会产生惟一的。表达式的类型由运算符的类型决定。在ObctPascl中有以下几种运算符:算术运算符、位运算符、字符串运算符、关系运算符、布尔运算符、集合运算符、指针运算符、类运算符和@运算符。本章中先介绍几种常用的运算符。算术运算ObjectPascal有8个算术运算符,在这8个算术运算符中,除取正“+”取负“-”是单目运算符外,其他均为双目运算符,详见 P31页表8 算术运算整型,结果也是整型,分别是除法的商和余数。在表达式a/b、adivb、modb中,如果b的值为0将会触发一个错误例如:10mod3的值为1,10div3的值为3算术表达算结果为一数值。例如:3*4+(90-5)/4*2的值为54.5在书写算术表达式时应当注意以下两1学中相乘可以写成x,但在编程中必须写成;2所有括号都用小括号()3[x+(-在编程中必须写成3*(x-))。位运算符是指对操作数进行的按位逻辑运算。其运算对象是整数,运算结果也是整数,ObjectPascal有6个逻辑运算符,详见表2-9。表2-9ObjectPascalnotxxorxandxshlxoryshr not (xandy(xor xxoryxshl2xshr1( Pascal只有一种字符串运算符,即连接运算符“+”。该运算符用接两个 的字符串以把多个字符串连接起来,每两个字符串之间都要用“+”号分隔。例如:

1+r1+2+r关系运算符又称为比较运算符,用来对两个表达式的值进行比较,比较的结 表2-10ObjectPascal=><各关系运算符的运算级别相同。运算次序为:先分别求出关系运算符两侧表达式的值,然后再把两者的值进行比较,两者的关系若与关系运算符指示的一样,则关系运算的结果为真(True),否则结果为假(False)。数值型数据按其数值大小进行比较;字符型数据按其ASCII码值进行比较,比较字符串时先比较第一个字符,其中ASCII码值较大的字符所在的字符串大。若第一个字符相同时比较第二个字符,…以此类推。顺序类型数据的比较按照其序数进行比较。在表示较为复杂的条件判断时,必须使用布尔表示式。布尔表达式是指用布尔运算符连接若干关系表达式或布尔值组成的式子,如a≤x≤b可以表示为:a<=xAndx<=b,布尔表达式的值也是一个布尔值。ObjectPascal提供4种布尔运算符,详见表表2-11ObjectPascal与或非在一个表达式中进行多种操作时,ObjectPascal x+y*先运算乘以z,然后将乘积(运算结果)与*先被执行,因为它比运算符+优先。可以使用圆括 所有的优先级规则。圆括号中的表达式最先被求值,因此可(x>y)and(x>首先判断是否大于y,然后判断是否大于z,最后将两次判断的结果相与,只有当的值比、的值都大时此表达式的值才为true。该表达式不能书写为:x>yandx>(x>(yandx))>语句是执行具体操作的指令,是由ObjectPascal的保留字、变量名、函数名及Delphi7.0编辑器可以识别的指令符号组成,建立正确的语句必须遵从ObjectPascal的语则。ObjectPascal程序语句书写比较自由,可以把多个语句放在一个程序行中,也可把一个语句分多行书写,但需要记住ObjectPascal的每个语句都必须以分号“;”结束。在编写自己的ObjectPascal程序时,要注意程序的可读性。Pascal语言是英式结构语对于较为复杂的程序常用到复合语句,复合语句是指将多个语句用begin和end<语句复合语句在 为了解释语 则,在说明各语句、函数的格式和功能时用到表-1中所列符,这些符号的含义详见表-3。[|…在 处理过程中,最常用到的工作就是把一个新值赋给一个属性时用ObctIsct(查来改变其属性;但有时需要在程序执行时改变属性的值,而且有些属,hi的 Prty 被标为执行期属性。进行这种改,就必须使用赋值语句。赋值语句是ObctPasc程序中最常用的语句,其语法格式为:{变量名|属性名}:=<表达式注意“:是赋值号,不要写为。赋值语句的功能是先计算表达式的值,然后把结果赋给赋值号左边的变量或属性。赋值号为“:,不论给属性还是给变量赋值,都是将右边的值赋给左边的属性或变量。当将一个属性值、变量、常量或文本数据赋给属性或变量时,所赋值的类型和接受此值的属性或变量的类型应相同或兼容,否则会导致错误。 ObjectPascal保留了BorlandPascal编辑器的风格,关键字采用黑体字,被注释的部分会变暗,这使得编程风格良好,易读易写。对于ObjectPascal的注释,编第3章计计循环控制结构的程序设本结构。程序流程控制语句是用来控制程序中各语句执行顺序的语句,是程成有意义的、能完成一定功能的小逻辑模块。196年BohJci顺序控制结构顺序控制结构是计算机按照语句的前后顺序依次执行的程序结构。在顺序控制结构中,程序依次地经过输入、处理到最后的输出。i7.0提供了基本的输入/输出控件(在第章中将给予介绍)。对于顺序控制结构来说,组成程序体主要语句就是赋值语句。接下来通过一个实例来说明顺序控制结构的程序设计方法。【例3-1】大小写转换程主要步进入Delphi7.0后在 页中找到相关组件,设计如图3-1窗及有关对分别在窗体的建立、小写按钮单击和大写按钮单 中输入如下edit1.Textvars:string;edit1.Text:=lowercase(s

图3-13.1.2顺序控制结构procedureTForm1.Button2Click(Sender:vars:string;edit1.Text:=uppercase(s);//转换成大分在窗体的建立 中,首先将文本框的内容进行清空(以便输入)。在tt按钮 中有两个语句,先将文本框的内容赋给一个字符串变量s,然后通过一个cse函数将其转换成小写后再在文本框中显示。而tt按钮 和tt1基本类似,惟一不同的是将其转换成大写而已。可以看到,在每一 代码中,其语句都是顺序执行的。这就是这种结构特点运行程序运行结果如图3-2所示

(图3-2大小写转ObctPasclst)、类型(T)、过程(Prcr)(t等。x2⋯⋯⋯( yx3⋯⋯⋯( ;否则的值是选择控制结构是计算机用来描述自然界和社会生活中分支现象的重要。其特ObjectPascal中的分支语句有If语句和CaseIf语句If语句又称为条件语句,是最常用的单条件选择结构。If语句的语法格式为:if<条件then条件语句1语句2真假[<语真假<语句其中<条件>可以是关系表示式或表达式,它的值是真(True)或(False)。如果<条件>的值为真则<语句1>,否则执行<语句2>,If语句对应的流程图如图3-3所示因为if…t…se语句是一个完整的语句,因此在se简单语句也可以是复合语句还可以为空语句。当然,<语句1>、<语句2If语句就失去了意义。

图3-3if3.2.1If语句If语句分为简单条件语句和复合条件语句两简单条件简单条件语句的<语句>中不包其他的条件语句【例3-2】输入计算的值,其中

2x1⋯⋯⋯( y 2x⋯⋯(varifx>=1注意:f…tseese之前没有分号,如果加入分号则产生错误。If语句复合条件语如在If语句格式中的<语句1>或<语句2>本身又是一个If语句,则称为If句的嵌套。嵌套的If语句又被称为复合条件语句。来看 P40页的例子由于Ifse语句,一种无se语句。对复合条件语句if<条件1if<条件2<语句else<语句一种理解是else语句是与后一个then语句配对,另一种理解是else语句是与前一个then语句配对,两种理解的效果是不一样的。ObjectPascal规定:此第一种理解是正确的,else语句是与后一个Then语句配对。IfctPascl专门提供了se语句来实现多分支选择结构。se语句可以根据“选择器表达式”的值来决定执行相应的选择语句。case<选择器表达式><情况常量表1>:<语句…<情况常量表n>:<语句<其他语句<情况常量表>中的值应当是<选择器表达式>可能具有的值,各常量之间用逗号分隔。所有常量表中的值必须互不相同。<语句>可以是简单语句也可以是复合语句。Case语句首先计算<选择器表达式>的值,然后判断该值是否等于某个常量,若相等则执行该常量后面的语句,执行完该语句后,跳过所有其他语句执行d后面的语句。若与所有情况常量表中所列的常量都不同,则执行se后面的语句。循环是计算机解题的一个重要特征。计算机运算速度快,最宜于做重复性工作。在程序设计时,人们也总是把复杂的不易理解的求解过程转化为易于理解的操作的多次重复。这样一方面可以降低问题的复杂性,减低程序设计难度;另一方面也发挥了计算机速度快的优势。 次测试,完成测试次数后循环结束。ObjectPascal中提供了Repeat语句Repeat语句属于后测型循环结构。首先执行循环体,然后判断条件,根据条件决定是否继续执行循环,因此执行循环的最少次数为1。Repeat语句repeat条件循环体[<循环体>]until<条件>;说明:<条件>是一个具有布尔值的表达式,是循环的条件。图3-假真假真多条语句无需用begin…end括起来,而由保留字首先执行<循环体>,然后计算<条件>的值,如条件>的值为真,则终止循环,执行until<条件>置Continue

图3-4RepeatRepeat语句 计算sinxsinxx3 x5x7

直到最后一项的绝对值小于10-7为止 主要进入Delphi7.0在新建窗体中添加有关组件。其中第一个编辑框用于数据,另一个编辑框用于数据的正弦值。如图3-5所示Repeat语句在button1按钮的单 中输入如下代码procedureTForm1.Button1Click(Sender:TObject);varn:integer;x:=strtofloat(edit1.Text); //从第一个编辑框中读入x的 //循环语句开untilabs(temp)<1e- //当最后一项的绝对值小于10-7环语句edit2.Text //输出sinx的Repeat语句分这是一个级数求和问题,其项数决定于最后一项的绝对值是否但是单独求解每一项比较麻烦,可以利用前一项求解后一项,让每一项的一个值相对应,其中的值依次为1,3,5,7…,从前一项求后一项只需乘以一个因子x(n1)t1文本框中输入数字,否则会引起错误。运行结在第一个文本框中输入一个数字后单击button1按钮即在第二个文本中得到答案While语句While语句属于前测型循环结构。首先判断条件,根据条件决定是否循环,执行循环的最少次数为0。While语句的语句格式为:条件循环体假while<条件>do<循环体>=说明:<条件>是判断循环的条件。<循环体>可以是简单语句、复合语句和其他结构语句。We循环的执行过程:首先计算<条件>的值,如果<条件>的值为真,则执行后面的循环体,执行完后,再开始一个新的Break语句来强制终止循环;也可以在循环t【例3-6】判断一个正整数是否是素数。1主要步进入Delphi7.0在新建窗体中 于显示结果。如图3-7

While语句在button1按钮的单 中输入如下代码vars,n,i:integer;n:=strtoint(edit1.Texts:=0;

//从编辑框得到n的值,注意必须输入一个正//s作为判断是否是素数的标志,iifn<=3thenlabel2.caption:='输入的整数是素数while(i<=sqrt(n))and(s=0)ifnmodi=0then //若以判断出n不为素数则可以用break语句跳出循环语elseWhile语句ifs=0label2.caption:='输入的整数是素数label2.caption:='输入的整数不是素数所谓素数是指除了1For语句如果不知道需要执行多少次循环,应该用While或Repeat循环。如知道要执行多少次循环,最好用循环结构。循环与前两种循环不同,使用一个循环变量,每重复一次循环之后,循环变量的值就会自动增加或减少。语句的语句格式为:for<循环变量>:=<初值{to|DownTo}值do[<循环体>=;说明:<循环变量>为必要参数,用做循环计数器。<初值>和<终值>表示<循环变量>的初值和终值,可以是表达式,但应与<循环变量>的类型相同。若为表示式,则在进入循环之前已被计算确定,在循体中改变初值或终值表达式中变量的值,并不影响循环的次数。to表示计数器递DownTo表示计数器递减。<循环体>可以是简单语句、复合语句和其他结构语for循环的执行过程:首先判断循环变量的值是否“超过”终值(对于递增循环为大于,对于递减循环为小于),若已超则跳出循环执行<循环体>后面的语句;若未超过则执行语句后面的<增量递增或递减)并开始一个新的循环。可以在循环体中的任何位置放置Break语句来强制终止循环,也可以在循环体中的任何位置放置te语句,在整个循环体没有执行完就重新判断<条件>,以决定是否开始新的循环。xyxyzz【例3-7】百钱百鸡问公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值,鸡雏三值钱一。百钱买百鸡,问鸡分析:这是一个有名的不定方程问:设鸡翁数为x,鸡母数为y,鸡雏数为z,则可列方程如:x:0~19中的整数(因为每只鸡翁5钱,因此它不可能超过只y:0~33中的整数(因为每只鸡母3钱,因此它不可能超过只z:0~100中的整数(因为共买百鸡,因此它不可能超过100只)For语句解决该问题可以采用穷举法。穷举法是一种重复性算法。它的基本思想是对所有可能解一一测试,直到找到解或将全部可能解都测试为止。对三个未知量,依次取为值域中的一个值,然后求其余两个未知量,满足方程组则为该题的解。新建一个工程,在窗体中添加一个按钮组件,在按钮的单击中加入如下代码。varx,y,z:integer;forx:=0to19

fory:=0to33z:=100-x-if5*x+3*y+z/3=100p:=format('得到一个解:鸡翁%d只,鸡母%d只,鸡%d只3.3.3For语句 运行程序后,可以看到该程序通过一个消息窗口的形式依次将得图3-8所示。第4章 本章要点静态数组的定义和使动态数组的定义和使数组是相同类型的元素按一定顺序组成的序列。数组中的每一个素都可以通过数组名和惟一一个索引号来存取。在ObctPascal中可以定义数组元素个数一定的数组,即静态数组。根据静态数组的维数以把数组分为一维静态数组、二维静态数组和 静态数组。静态数组在程序初始化时必须分配内存单元,明确其固定的大元素的数据类一维静态数组类 格式为<数组类型名称>=array[<下标>]of<基类型如定义一个数组类型表示定义了一个有100个元素的数组类型,元素下标从1100,每个数组元素都是Real类型,数组类型标识符为MyArray4.1.1定义顺序控制结构是计算机按照语句的前后顺序依次执行的程序结构。在顺序控制结构中,程序依次地经过输入、处理到最后的输出。i7.0提供了基本的输入/输出控件(在第章中将给予介绍)。对于顺序控制结构来说,组成程序体主要语句就是赋值语句。接下来通过一个实例来说明顺序控制结构的程序设计方法。【例3-1】大小写转换程进入Delphi7.0后在 页中找到相关组件,设计如图3-1窗及有关对象分别在窗体的建立、小写按钮单击和大写按钮单 中输入如下码图3-1大小写转换4.1.1定义procedureTForm1.FormCreate(Sender:edit1.Text:='';//初始化文本框,使其为空procedureTForm1.Button1Click(Sender:TObject);vars:string; 转换成小数组类型标识符可以是任何合法的标识符。ObjectPascal允许下标类型为整数类、字符类、布尔类型、子界类型、枚举类型等。而元类型可以为任意的数据类型,但在同一数组中,所有元素的数据类型必须相同。对于用户定义的数据类型作为下标类,在使用之前必须 。例如可以进行如下定义:4.1.1定义MyArray=Array[Color]ofInteger;ColorArray=Array[Number]ofColor;以上就定义了一个以MyArray为标识的数组类型,其元素下标分别为redgreen和blue,每个数组元素都是Integer类型经过数组类 之后才可以定义数组变量。就像定义整型或实型变量样,通过变量说明语句定义变量,例如 上面定义了两个数组变量Array1和Array2,它们的数据类型是MyArray可以把数组类型的定义和数组变量的定义组合起来,以便简化代码,例如 Array1,Array2:Array[1..100]of 值,如Array1[3]、Array2[20]等。方括号内的下标值必须符合数组类型的定定义High()和Low()ObjectPascal的数组和其他语言的数组有一点不同,即数组不必的数为基准。例如可以从15开 一个具有3个元素的数组类型 A:Array[15..17]ofObjectPascal的数组不一定从序号0或1开始的,因此在循环计算中需要返回数组变量或数组类型的上限值或下限值。建议使用Low()和High() ,Low()和High()代码不会受影响。否则,如果代码中有一个数组下标循环体,那么当数组大小改变时你就不得不更新循环体的代码。因此在循环中用这两个函数做边界控制会使程序易 且不容易出错注意注意使用标准函数Lo()和H)不会增加系统运行额外开销。因为在编译时,它们已被转换成常数表达式,而不是实际函数调用,而函数Lengt)可定义见如下代码A:array[15..17]offori:=Low(A)toHigh(A)二维 静态数二维数组是指一个一维数组中的元素类型本身又是一个一维数二维数组的一般形式<数组类型名称>=Array[<下标类型1>,<下标类型2>]of基类型>;以把二维数组看做是一个矩阵,其中下标1是行,下标2是列,这样定义二维数组的元素可以写成array1[2,3], 第2行第3列元素。对 数组可以使用循环语句给数组赋值,例如Col,Row:…forCol:=1to20forRow:=1to100…静态数组的一般格式<数组类型名称>=Array[<下标类型1>,<下标类型2>,…,<下标型n>]of基类型一般情况,用户的数组不超过三维数组,用到三维以上的很少,ObjectPascal允许定义任意维数的数静态数组通过下标类、维数明确了数组的大小。动态数组使用时没有明数组的大,只是在程序设计中为程序动态地开辟 空间。应用接下来利用数组来解决排序的问【例4-1】对20个数进行排序(由大到小)主要步进入Delphi7.0后,按图4-1设计窗体及有关定义一个全局数组变量,语句 A:Array[1..20]of分别在两个按钮的单击和窗体的建 中输如下代procedureTForm1.Button1Click(Sender:TObject产生随机 fori:=Low(A)toHigh(A)

图4-1组应用 //产生一个大于等于0小于50的随机 //以字符类型赋给s:=s+t+'//s对t进行累加并且加空 //显示procedureTForm1.Button2Click(Sender: //vari,j,temp:integer;fori:=Low(A)toHigh(A)doforj:=i+1toHigh(A)doif(A[i]<A[j])应用fori:=Low(A)toHigh(A)dos:=s+t+''; procedureTForm1.FormCreate(Sender:TObject); 应用首先,定义一个全局数组变量的目的是可以在程序的两个按 都能被 到。在产生随机数按钮中(即tt按钮)使用了一个f循环,其中A[]:rando(50)语句是将产生的随机数赋值给数组,50表示产生的随机整数在0和50之间,并且将数组中各元素值通过1 进行输出。在排序按钮中(即tt按钮)先是使用了双重f循环,目的是对数组进行排序。其主要思想是将相邻的两个数A[1],A[2]比较,如果前者小于后者则交换,再将A[2]与A[3]进行比较并进行相同处理,直到将最后两个数比较并处理完毕。这时最大的一个数已换到了最前一个位置,这是第一轮的比较和处理。然后进行下一轮比较,把剩下的数中最大的数移到最前的第二个位置。进行)轮后就可将数组中的元素从大到小的顺序排列了。第三个fr循环是将重新排列的数组元素转换成字符串,最后通过 进行输出运行结运行以上程序,结果如图4-2所示 静态数组在程序初始化时必须明确其固定的大小和类型。然而在有些时候,希望在数组使用的时候再分配内存,这种数组称为动态数组。动态数组是指在定义数组时不说明数组元素个数而是在程序运行一维动态数一维动态数组类 格式为<数组类型名称>=arrayof<基类型>; <变量名>:arrayof基类型如下代码varMyarray:arrayof 了一个变量名为Myarray的元素类型为一维整型的动态数组定义一维动态数组 中没有给出数组的下标类型,因此就可 个不指定元素个数的数组。在程序设计中,通过调用标准过程来明确动态数组的大Myarray:arrayof

//定义一个名为Myarray的动态数//错误,没有明确数组大小前是不能//设置动态数组长度为30,下标从0到//正需要注意的是,ObjectPascal中的普通数组既能用不为零的下标,也注意:动态数组总是从零开始的。在一个空的动态数组中,Low函数返值是0,High函数返回值是-1,比它Low的返回值定义delphi7.0会在动态数组超出作用域后释放动态数组。然而,在有些时候(例如 //释放Myarray数动态数组 操作上和静态数组也有不同之处,来看下面的例子 DA,DB:arrayofSA,SB:array[1..10]of

将DB数组指向同一个数组//从SA数组 一个新的数组给定义上述代码 了DA,DB两个一维动态数组和SA,SB两个一维静态数,经过一系列赋值后,DA[1],SA[1]的值应该是多少呢?是不是还是1实际上,对于静态数组而言,SB:=SA语句将产生一个新的数组SB,它的内容和SA数组完全一样。而对于动态数组而言,DB:=DA语句并没有产生一个新的数组,而是将SB数组指向DA数组。因此,执行上述代码后,SA[1]的值没有发生变化,还是1;而A[1]的值就发生了变化,变成了0。动态数动态数组也可以 的, 数组,可以采用递归的方式来定义可以在一维数组的arrayof后面再附加上arrayof

<数组类型名称>=arrayofarrayofarrayof基类型<变量名>:<数组类型名称当然,也可以 变量时直 动态数组,如下定义<变量名>:arrayofarrayof…arrayof基类型定义A:arrayofarrayof应用接下来介绍利用动态数组进行矩阵的运【例4-2】矩阵运主要步进入Delphi7.0后,按图4-3设计窗体及有关对定义两个全局二维动态数组变量,语句为vara:arrayofarrayofb:arrayofarrayof

图4-3 procedureTForm1.Button1Click(Sender:TObject);//初始vari,j:integer;应用fori:=0tohigh(a)forj:=0to//产生随机数赋给a数label1.Caption:=s;fori:=0tohigh(b)do

forj:=0tohigh(b[0])//产生随机数赋给blabel2.Caption:=s;procedureTObject);//计算按钮单varc:arrayofarrayofinteger; fori:=0tohigh(a)do应用label2.CaptionTForm1.Button2Click(Sender://计算按钮单varc:arrayofarrayoffori:=0tohigh(a)doforj:=0tohigh(b[0])fork:=0tohigh(b)

label3.Caption:=s;procedure// 可以换行输应用由于矩阵数据输入相对麻烦,这里使用random()函数产生随机数作为两 个数组进行了初始化操作,并且利用label1和 组件对它们进行了显。在代码中,#32和#13分别是空格和回车的ASCII码,以便 组件中输矩阵格式。在计算按钮单击 中,使用了三个fr循环。其中变量控制矩阵的行数变量控制了矩阵的列数变量则控制了矩阵的列数(即b 矩阵的行数。而新矩阵的第列元素是第一个矩阵的第行和第二个矩阵的第列对应元素的乘积和。上述代码中,使用了[0])控制变量,试问能否改为(b[])?为什么?运行以上程序结果如图4-4

第5章本章要点归过程与函数是程序设计语言中的重要概念,也是实现结构化程序计思想的重要 。结构化程序设计思想的要点之一就是对一个复杂问题采用“分而治之”的策略——模块化。把一个较大的程序划分成若干个模块,每个模块只完成一个或若干个功能。每个功能可以用一个程序段来实现,这个程序段称为子程序。根据子程序是否有返回值可分为过程与函数两。-函数是由变量部分与可执行语句组成的独立实体,用以完成一定况下使用比较简单。函数也是一段相对独立的程序段, 参数、执行一系列语句并变其参数的值定义函数的格式为函数的定义与使用 <函数名>[(<形参表>)]:<返回类型>; >]语句列以保留字Function开头的第一行,称为函数首部,其余部分称为函数首函数名使用与变量名相同 名规则,一个函数只能有一个函数形参表由若干个形式参数组成,它指明了可以传递给函数参数的数和类型。所有的形式参数必须说明类型,相同类型的形参之间用逗号隔开,不同类型的形参之间用分号隔开。函数必须规定函数返回值的型,函数返回值通过函数名或Result(隐含变量)带回5.1.1函数的定义与使用函数函数体是一个程序段。由局部部分和可执行部分组成。可执begin开始,以end结束,end后面必须跟一个分号。在局部部分定义函数所需的常量、变量、类型等,该部分的常量、变量、类型只能在函数。在可执行部分根据函数的功能编程,而且在执行语句中函数的调函数的调用比较简单,调用格式为函数名(<实参表更常用的方法是直接将函数返回值直接赋值给变量,当然要注意类型兼例 一个Max函数function则在调用x赋值也要注意类型兼容。5.1.1函数的定义与使用函数函数体是一个程序段。由局部部分和可执行部分组成。可执begin开始,以end结束,end后面必须跟一个分号。在局部部分定义函数所需的常量、变量、类型等,该部分的常量、变量、类型只能在函数。在可执行部分根据函数的功能编程,而且在执行语句中函数的调函数的调用比较简单,调用格式为函数名(<实参表更常用的方法是直接将函数返回值直接赋值给变量,当然要注意类型兼例 一个Max函数function则在调用Max函数时必须有两个参数,而且参数类型必须相兼容,返回赋值也要注意类型兼容函数的定义与使用【例5-1】定义一个求两个实数中较大数的函数,并利用该函数求三个实数中的最大值分析:定义一个新的函数,函数名为Max(),该函数的功能是对两个实数求出最大值,输入的参数是两个实数或变量,输出是两个实数中较大的一个值,在程序中可以利用I语句实现两数的比较。较,大者为三个数中的最大值。i7.0,加 l,Lab2标签的tn属性值分别改为“输入三个实数”和“三个数中的最大值是”,并适当添加四个编辑默认名分Et1Eit2Edit、Edit4,将它们的Text属性值均改为“0”,再添加一个按钮Button1并将其Caption属函数的定义与使用双击“比较”按钮,在自动生成的TForm1.Button1Click()过程中定义语句 处理语句procedureTForm1.Button1Click(Sender:var 比较三个数的大双击“比较”按钮,在自动生成的T1.Buttck()过程中添加变量定义语句和 处理语。procedureTForm1.Button1Click(Sender:var5.1.1函数的定义与使用在这个求三个数最大值过程中用到了两个标准函数strtofloat()和floattostr()一个用户自定义函数max()。其中strtofloat()函数的作用是把字符串转化为实,而floattostr()函数的作用与之相反,它的作用是把实数转化为字符串。由于ObjectPascal是一种强类型语言,所以在编程中应当注意类型的转化。为了语句之前。该函数定义如下function//该句也可以写为function5.1.1函数的定义与使用ifx>ythenresult:=xelseresult:=y;保存工程并运行,在三个编辑框中分别输入三个实数,单击“ 字符,否则程序会出现运行错误。过程的定义与使用Obct Psca的过程分标准程和自定义过程两种。标准过程,无编写码可接调过程则是由程序员编写代码用以成指定的操作,包括 过程通用过程。 过程首

Procedure<过程名>[(<[<局部 >][<过程名名规则与变量名相同,一个过程只能有一个惟一过程的定义与使用过程过程体是一个程序段,由局 和执行语句组成。局 分用 该过程中所使用的类型、常量、变量等,这些只限于过,与过程外的同名对象无关。可执行部分由 开始,过程的调过程的调用格式为过程名(参数表过 必须在过程调用语句之前,调用过程时也要注意参数型兼容在编程过程中,程序员要对各 进行相关的代码处理,创相应 处理过程在对象观察器(ObjectInspector)中选择指定对象,然后(Events)选项卡中选择指定 名称,并用鼠标双击其右边的拉列表框,ObjectPascal将自动产生一 过程 过程的默名称是组件名加 类型名过程的定义与使用例如,新建一个工程,添加一个按钮组件,命名为Button1,现在要按钮组件的单 处理过程,在对象观察器的下拉列表中选择Button1, procedureTForm1.Button1Click(Sender:TObject);程序员只需在begin与end之间加入相应 处理代码即可该过程的参数是一个Object类型的对象 ,ObjectPascal将自动调用与该对象 另外,一 过程也可以被多个对象、多 共享。其方法是:首为其中的一个对象建 过程,然后在创建其他对 过程时, 称右边的下拉列表中选择已建立 即可为了尽可能地减少程序员编写应用程ObjectPascal提供 算函 算函数用于各种 算。常用的 算函数有如下几种绝对值函function返回参数的绝对值。参数可以是整型或实型,返回值为非负的实数平方与平方根functionSqr(X:Extended):参数为实型表达式,返回的平方,返回值也是实functionSqrt(X:Extended):参数为非负实型表达式,返回的算术平方根,返回值也是实 算函三角函functionSin(X:Extended):functionCos(X:Extended):Extended;functionArcTan(X:Extended):Extended;取整数部分与取小数部分functionInt(X:Extended):functionFrac(X:Extended):取整函functionTrunc(X:Extended):functionRound(X:Extended):指数函数和对数函functionfunction随机函functionRandom[(Range:Integer)π函ObjectPascal提供了一个返回圆周率的函数,该函数定义为function字符处理函数大小写转换函合并字符串函

functionLowerCase(constS:string):functionUpperCase(constS:string):procedureAppendStr(varDest:string;constS:functionConcat(S1[,S2,...,Sn]:string):查找字符串函functionPos(Substr:string;S:string):求字符串长度函functionLength(S):数值与字符串转换函procedureStr(X[:Width[:Decimals]];varprocedureVal(S;varV;varCode:Integer);functionIntToStr(Value:Integer):string;functionFloatToStr(Value:Extended):string;functionStrToInt(constS:string):Integer;functionStrToFloat(constS:st

温馨提示

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

评论

0/150

提交评论