第二章Objectpascal语言基础.ppt
第二章第二章 Object PascalObject Pascal语言基础语言基础 2.1 词法符号词法符号 2.2 常量与变量常量与变量 2.3 简单数据类型简单数据类型 2.4 结构类型结构类型 2.5 运算符优先级运算符优先级2.6 语句与流程控制语句与流程控制2.7 过程与函数过程与函数 2.8 程序与单元的结构程序与单元的结构 2.9 标识符的作用域标识符的作用域 2.1 2.1 词法符号词法符号例例2-12-1:了解:了解DelphiDelphi源程序源程序 由程序可见,由程序可见,DelphiDelphi源程序是由单词和符号组成源程序是由单词和符号组成的纯文本。的纯文本。一、一、基本符号基本符号Object PascalObject Pascal语言仅使用以下几类基本符号:语言仅使用以下几类基本符号:1.1.大小写英文字母大小写英文字母 A A、B B、C C、Z Z等等2626个个大大写写,和和a a、b b、c c、z z等等2626个小写字母。个小写字母。2.2.数字符号数字符号 0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9等。等。3.3.其他符号其他符号 有有+,-,*,/,=,(,),_ _,;,:,,,.,#,$,及空格符等。及空格符等。二、二、保留字、标识符、标准标识符、指令字保留字、标识符、标准标识符、指令字1.1.保留字保留字 程序如同一篇文章,由字符组成单词,再由单词程序如同一篇文章,由字符组成单词,再由单词和符号构成句子和符号构成句子语句。其中有一类单词,它们语句。其中有一类单词,它们具有特定的语法含义,称为保留字(具有特定的语法含义,称为保留字(reserved reserved wordswords)。)。程序员不得重新定义保留字的语义程序员不得重新定义保留字的语义。常用。常用的保留字如:的保留字如:beginbegin、endend、ifif、andand、forfor、dodo等。等。2.2.标识符标识符 标标识识符符用用作作常常量量、变变量量、数数据据类类型型、过过程程、函函数数、单单元元及及程程序序等等的的名名称称。由由一一个个或或多多个个ASCIIASCII码码字字符序列组成,其构词规则如下:符序列组成,其构词规则如下:(1 1)标识符由字母、数字或下划线组成;)标识符由字母、数字或下划线组成;(2 2)标识符的第一个字符必须是字母或下划线;)标识符的第一个字符必须是字母或下划线;(3 3)标标识识符符的的长长度度不不应应超超过过255255个个字字符符,否否则则只只有有前前255255个字符有效;个字符有效;(4 4)不能将保留字用作标识符;)不能将保留字用作标识符;(5 5)标识符不区分大、小写。)标识符不区分大、小写。例例如如:x x、x1x1、maxmax、a15a15、Button_OKButton_OK都都是是合合法法的的标标识识符,而符,而5x5x、x-yx-y、ax10.5ax10.5等都是非法的标识符等都是非法的标识符。3.标准标识符标准标识符 在在Object Pascal语言中,有一类标识符是系统预语言中,有一类标识符是系统预先定义的,它们用于标识系统预先定义的标准函数、先定义的,它们用于标识系统预先定义的标准函数、标准过程、标准类型、标准常量及标准文件等。标准过程、标准类型、标准常量及标准文件等。标准常量,如标准常量,如False、Maxint、True等。等。标准类型,如标准类型,如Boolean、Char、String、TDateTime等。等。标准函数,如标准函数,如Abs、Eof、ShowMessage、Sqrt等。等。标准过程,如标准过程,如Dispose、New、Read、Readln、Reset等。等。标准文件,如标准文件,如Input、Output等。等。标准标识符是可以重新定义的。(例标准标识符是可以重新定义的。(例2-2)注意注意:(1 1)当程序中自定义的标识符与其引用的单元中所定)当程序中自定义的标识符与其引用的单元中所定义的重名时,如果要访问被引用单元的标识符,则义的重名时,如果要访问被引用单元的标识符,则必须指示为外部单元的标识符,不然访问的是本程必须指示为外部单元的标识符,不然访问的是本程序定义的标识符。序定义的标识符。(2 2)因)因SystemSystem单元是自动引用的,不必也不允许在引单元是自动引用的,不必也不允许在引用部分列出用部分列出SystemSystem单元。单元。4.4.指令字指令字 指令字为编译提供指示意义。指令字为编译提供指示意义。各各指指令令字字有有它它专专门门的的用用途途,如如:absoluteabsolute指指令令字字用用于于指指示示相相同同类类型型的的另另一一标标识识符符存存放放在在同同一一个个内内存存区区域。如下面代码:域。如下面代码:varvar I:Integer;I:Integer;J:Integer absolute I;J:Integer absolute I;这这里里用用到到了了指指令令字字absoluteabsolute,它它声声明明变变量量J J和和已已存存在在的的同同类类型型变变量量I I的的值值驻驻留留在在同同一一段段内内存存单单元元中中,即即I I与与J J实为同一变量。实为同一变量。2.2 2.2 常量与变量常量与变量 常量常量:在程序中,值始终保持不变的量,包括:在程序中,值始终保持不变的量,包括字面字面常量常量、符号常量符号常量 和和类型常量类型常量等。等。变量变量:变量是一种可随时更改其值的量变量是一种可随时更改其值的量 。一个变量。一个变量在某一个时刻有且仅有一个值。在某一个时刻有且仅有一个值。一、常量一、常量1.字面常量字面常量(1)整型常量)整型常量 即即整数整数,如,如3、10000、-90。在。在Object Pascal中十六中十六进制形式表示整型常量以字符进制形式表示整型常量以字符$开头,如开头,如$20相当于相当于十进制的十进制的32。(2)实型常量)实型常量 即即实实数数,例例如如,6.6、0.77e+4。后后者者的的表表示示方方法法称称为为指数记数法或科学记数法,指数记数法或科学记数法,0.77e+4表示表示0.77104。PascalPascal语语言言中中的的实实数数表表示示和和日日常常书书写写的的形形式式基基本本相相似,但要注意以下几点:似,但要注意以下几点:小数点前后一定要有数字。小数点前后一定要有数字。数数中中不不允允许许包包含含空空格格字字符符与与逗逗号号。例例如如1 1,000000,000000是不合语法的。是不合语法的。没有分式表示。没有分式表示。使使用用指指数数记记数数法法时时,e e前前面面应应有有整整数数或或实实数数,e e后后面面必须是整数。必须是整数。例例如如:88.088.0、-0.8-0.8、1e+231e+23、-3.45e-6-3.45e-6都都是是正正确确的的实实数数表示法,而表示法,而88.88.、.66.66、4.4e5.54.4e5.5、e6e6则是不正确的。则是不正确的。(3 3)布尔常量布尔常量 它它是是指指FalseFalse和和TrueTrue这这两两个个值值,FalseFalse表表示示逻逻辑辑值值“假假”,TrueTrue表示逻辑值表示逻辑值“真真”。(4 4)字符常量字符常量字符常量有两种表示方式:字符常量有两种表示方式:用单引号对括起来的单个字符,如用单引号对括起来的单个字符,如aa、*、22等。等。用用#引引导导一一个个整整数数,整整数数表表示示该该字字符符的的ASCIIASCII码码。例例如如,#13#13、#$20#$20、#$30#$30、#65#65分分别别表表示示回回车车符符、空空格格符、数字符号符、数字符号00、字母、字母AA。因因单单引引号号用用于于定定界界字字符符常常量量,所所以以用用表表示示单引号字符。单引号字符。(5 5)字符串字符串常量常量 字字符符串串常常量量是是用用单单引引号号对对括括起起来来的的一一串串字字符符,例例如如,Good ideaGood idea、96.596.5、#=#=。当当字字符符串串内内有有单单引引号号时时,要要用用两两个个连连续续单单引引号号表表示示,例如,例如,Most childrenMost childrenss English Course English Course。书写字符串需要注意以下几点:书写字符串需要注意以下几点:空空格格字字符符可可以以是是字字符符串串的的组组成成部部分分。所所以以在在字字符符串串中的任何空格字符都是其值的一部分;中的任何空格字符都是其值的一部分;字符串中的字母有大小写区分,即字符串中的字母有大小写区分,即A1A1不等于不等于a1a1。2.2.符号常量符号常量 字字面面常常量量可可以以在在程程序序中中直直接接使使用用,而而由由标标识识符符表示的符号常量需预先定义。表示的符号常量需预先定义。常量定义的一般形式为:常量定义的一般形式为:constconst =表达式表达式;以以保保留留字字constconst后后开开始始常常量量声声明明;“=”=”号号左左边边为为常常量量标标识识符符;“=”=”号号右右边边的的表表达达式式可可以以由由常常量量、部部分分在在程程序序编编译译时时可可计计算算的的函函数数,及及先先定定义义的的常常量量标识符等构成,表示符号常量的值。标识符等构成,表示符号常量的值。Object PascalObject Pascal对常量定义有如下要求:对常量定义有如下要求:必必须须遵遵循循先先定定义义后后使使用用的的原原则则,即即只只有有已已定定义义的的常常量标识符才能在程序中使用。量标识符才能在程序中使用。不能改变符号常量的值。不能改变符号常量的值。可可用用于于常常量量定定义义的的函函数数,即即在在程程序序编编译译时时可可计计算算的的函函数数,有有AbsAbs、ChrChr、HiHi、LengthLength、LoLo、OddOdd、OrdOrd、PredPred、PtrPtr、RoundRound、SizeOfSizeOf、SuccSucc、SwapSwap、TruncTrunc等等。使使用用常常量量定定义义的的意意义义在在于于减减少少常常量量值值差差错错机机会会与与修修改程序的工作量,并提高程序的可读性。改程序的工作量,并提高程序的可读性。二、类型常量二、类型常量 类类型型常常量量定定义义在在PascalPascal程程序序的的声声明明部部分分,以以保保留留字字constconst开开头头。一一个个类类型型常常量量定定义义部部分分可可包包含含多多个个类类型型常常量量定定义义,每每个个类类型型常常量量定定义义末末尾尾均均有有分分号号,其其一一般般形形式为:式为:const const :=表达式表达式;例:例:const Pi:Double=3.1415926;类类型型常常量量的的用用法法同同变变量量完完全全一一样样,可可以以对对类类型型常常量量重重新赋值。新赋值。三、变量三、变量 变量说明的一般形式为:变量说明的一般形式为:varvar :;其其中中,变变量量标标识识符符列列表表中中可可以以包包含含一一个个或或多多个个变变量量标标识识符符,若若有有多多个个变变量量标标识识符符时时,相相邻邻的的两两个个变变量量标标识识符符之之间间应应使使用用逗逗号号“,”隔隔开开;类类型型标标识识符符用用以以指指定这些变量的数据类型。定这些变量的数据类型。变变量量说说明明以以保保留留字字varvar开开头头。一一个个变变量量说说明明部部分分可可包含多个变量的说明,每个变量说明末尾均有分号。包含多个变量的说明,每个变量说明末尾均有分号。2.3 2.3 简单数据类型简单数据类型 在在Object PascalObject Pascal语言中,每个数据都有一个确语言中,每个数据都有一个确定的类型,某种数据类型定义了该类型数据的存储定的类型,某种数据类型定义了该类型数据的存储方式和允许的一组运算,存储方式的定义相应地便方式和允许的一组运算,存储方式的定义相应地便确定了该类型数据的取值范围。确定了该类型数据的取值范围。Object Object PascalPascal是是一一个个强强类类型型语语言言,拥拥有有丰丰富富的的数据类型,并允许程序员自定义新的数据类型。数据类型,并允许程序员自定义新的数据类型。常常见见的的分分类类方方法法中中,数数据据类类型型分分为为简简单单类类型型、字字符符串串类类型型、结结构构类类型型、指指针针类类型型、过过程程与与函函数数类类型型和和可变类型可变类型等。等。一、有序数据类型一、有序数据类型 有序数据类型定义的是取值有序的数据集。其有序数据类型定义的是取值有序的数据集。其特点是:数据的分布是离散的;除了第一个元素外,特点是:数据的分布是离散的;除了第一个元素外,其他任何元素都有一个前驱元素;除了最后一个元其他任何元素都有一个前驱元素;除了最后一个元素,其他任何元素都有一个后继元素。素,其他任何元素都有一个后继元素。Object PascalObject Pascal提供的有序数据类型有:提供的有序数据类型有:整型整型、字符型字符型、布尔型布尔型、枚举型枚举型和和子界型子界型等五种类型。等五种类型。常用的有序数据操作函数有:常用的有序数据操作函数有:ord、pred、succ、high、low;常用过程有:常用过程有:inc、dec。1.1.整型整型(1 1)存储格式和取值范围)存储格式和取值范围 整整型型仅仅表表示示整整数数的的一一个个子子集集,通通用用的的整整数数数数据据类类型型包包括括IntegerInteger和和CardinalCardinal,其其它它基基本本的的整整型型包包括括ShortintShortint、SmallintSmallint、LongintLongint、Int64Int64、ByteByte、WordWord和和LongwordLongword。(2 2)运算符运算符算算术术运运算算符符:、-、*、divdiv(整整除除)、modmod(取取模模),若若参参加加算算术术运运算算的的两两个个数数都都是是整整型型数数据据,则则运运算算结果也是整型。结果也是整型。关系运算符关系运算符:=、=、=、关系运算的结果是布尔型,即取关系运算的结果是布尔型,即取TrueTrue或或FalseFalse值。值。例如:例如:5=55=5的值为的值为TrueTrue;5555的值为的值为FalseFalse。正负号运算符正负号运算符:+、-与与加加、减减运运算算不不同同,此此为为单单目目运运算算。如如-a-a,求求运运算算元元的负值。的负值。整型数的逻辑运算符整型数的逻辑运算符:notnot、andand、oror、xorxor 整整数数转转换换为为二二进进制制数数后后逐逐位位进进行行逻逻辑辑运运算算。其其中中notnot是是单目运算符单目运算符。例:例:00000000 01010110 (86)10 and 00000101 00010100 (1300)10 00000000 00010100 (20)10左、右移位运算符:左、右移位运算符:ShlShl、ShrShr ShlShl运运算算符符的的运运算算格格式式为为A A ShlShl n n,表表示示将将整整型型数数A A的的各各位位向向左左移移n n位位,高高位位溢溢出出,低低位位补补0 0。ShrShr运运算算符符的的运运算算格格式式为为A A ShrShr n n,表表示示将将整整型型数数A A的的各各位位向向右右移移n n位位,低位溢出,高位低位溢出,高位补补0 0。如如:00000000 00000000 0101011001010110左左 移移 2 2位位 后后,为为 00000001 00000001 0101100001011000,即:表达式,即:表达式86 86 ShlShl 2 2的值为的值为344344。例例2-32-3:交换一个字符序号值的高交换一个字符序号值的高4 4位和低位和低4 4位。位。(3 3)标准函数和标准过程)标准函数和标准过程 绝对值函数绝对值函数Abs(x)Abs(x),函数值为函数值为|x|x|。例如:例如:Abs(-100)Abs(-100)的值为的值为100100,Abs(99)Abs(99)的值为的值为9999。平方函数平方函数Sqr(xSqr(x),函数值为函数值为x x2 2。例如例如:Sqr(-4)Sqr(-4)的值为的值为1616,Sqr(3)Sqr(3)的值为的值为9 9。奇函数奇函数Odd(x)Odd(x),函数的结果为布尔型。当函数的结果为布尔型。当x x为奇数时,为奇数时,函数值为函数值为TrueTrue;当;当x x为偶数时,函数值为为偶数时,函数值为FalseFalse。例如:例如:Odd(3)Odd(3)的值为的值为TrueTrue,Odd(4)Odd(4)的值为的值为FalseFalse。字符函数字符函数Chr(xChr(x),函数返回函数返回ASCIIASCII码值为码值为x x的字符。的字符。例如:例如:Chr(65)Chr(65)的值为的值为AA。取高、低字节函数取高、低字节函数Hi(x)Hi(x)和和Lo(x)Lo(x),分别返回整型数分别返回整型数x x的高字节和低字节,结果是的高字节和低字节,结果是ByteByte类型。类型。例如:例如:Hi($1234)Hi($1234)的值为的值为$12$12,Lo($1234)Lo($1234)的值为的值为$34$34。交换函数交换函数Swap(x)Swap(x),将整型数将整型数x x的高字节和低字节进的高字节和低字节进行交换,交换后的两个字节重新组成一个整数作为行交换,交换后的两个字节重新组成一个整数作为函数返回值。函数返回值。例如例如,Swap($1234)Swap($1234)的值为的值为$3412$3412。其他操作函数或过程:其他操作函数或过程:ordord、precprec、succsucc、highhigh、lowlow、incinc、decdec 。例:有序数操作函数例:有序数操作函数2.2.字符型字符型 基基 本本 的的 字字 符符 型型 有有 AnsiCharAnsiChar和和 WideCharWideChar两两 种种。AnsiCharAnsiChar类类型型的的数数据据是是一一个个字字节节(8 8位位)编编码码的的,与与扩扩充充的的ANSIANSI字字符符集集对对应应。而而WideCharWideChar是是两两个个字字节节(1616位位)编编码码的的,与与UnicodeUnicode字字符符集集对对应应,UnicodeUnicode字符集的前字符集的前256256个字符和个字符和ANSIANSI字符集相同。字符集相同。通用字符类型是通用字符类型是CharChar,和,和AnsiCharAnsiChar相当。相当。(1 1)取值范围)取值范围 (2 2)运算符)运算符 Object Object PascalPascal语语言言允允许许用用=、=、=六六个关系运算符对字符型数据进行运算操作。个关系运算符对字符型数据进行运算操作。用字符序号的大小关系来定义相应字符的大小关系,用字符序号的大小关系来定义相应字符的大小关系,因此,所有的字符都可以进行比较(因此,所有的字符都可以进行比较(即关系运算)。即关系运算)。AB /AB /结果为结果为TrueTrueba ba /结果为结果为False False 12 1False /TrueFalse /结果为结果为TrueTrue逻辑运算符:逻辑运算符:notnot(非)、非)、andand(与)、与)、oror(或)、或)、xorxor(异或)。异或)。(3 3)标准函数)标准函数 例:有序数的操作函数例:有序数的操作函数4.4.枚举类型(枚举类型(enumeratedenumerated)枚枚举举类类型型是是一一个个以以标标识识符符标标识识的的有有序序整整型型常常数数的的集集合合,这这些些常常数数是是该该类类型型变变量量可可取取的的合合法法值值。声声明明枚枚举类型的语法如下:举类型的语法如下:typetype typeNametypeName=(val1,.,=(val1,.,valnvaln);其其 中中 typeNametypeName和和 vavalili是是 有有 效效 的的 标标 识识 符符,typeNametypeName 是枚举类型,是枚举类型,valivali是枚举量的标识符。是枚举量的标识符。例例:type TWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);这这些些枚枚举举量量不不能能再再定定义义为为其其它它标标识识符符。当当用用OrdOrd函函数分别对其取值时,将得到数分别对其取值时,将得到0 0、1 1、2 2、3 3、4 4、5 5、6 6。在默认的情况下,枚举值是从在默认的情况下,枚举值是从0 0开始的有序整开始的有序整数,在实际编程的过程中,可以越过这种限制,可数,在实际编程的过程中,可以越过这种限制,可以根据需要指定标识符表中的值。例如:以根据需要指定标识符表中的值。例如:type type MyColorMyColor=(red=2,green=6,white=7,black=9);=(red=2,green=6,white=7,black=9);一些枚举类型的值只有两种可能的值,如下声明:一些枚举类型的值只有两种可能的值,如下声明:type type SampleEnumSampleEnum=(val1,val2,val3=0);=(val1,val2,val3=0);SampleEnumSampleEnum中中val1val1、val2val2、val3val3的的OrdOrd函数值分函数值分别为:别为:0 0、1 1、0 0,即,即Ord(val1)Ord(val1)与与Ord(val3)Ord(val3)相同。枚相同。枚举量的取值范围为举量的取值范围为0 0255255。例例2-4:匿名访问枚举量:匿名访问枚举量 5.5.子界类型(子界类型(SubrangeSubrange)声明形式如下:声明形式如下:typetype 类型标识符类型标识符 =上界值上界值 .下界值下界值;其其中中上上、下下界界值值是是某某种种已已定定义义的的有有序序类类型型的的值值,上界值小于或等于下界值,如:上界值小于或等于下界值,如:type type TAgeTAge=18.60=18.60;/TAgeTAge是一个整型的子界类型是一个整型的子界类型typetype Caps Caps=A.Z;A.Z;/CapsCaps是是一一个个字字符符型型的的子子界界类型类型 子子界界类类型型变变量量的的值值是是有有序序的的,对对其其进进行行增增/减减量量操操作都要在其定义范围内。作都要在其定义范围内。二、实数类型二、实数类型 1.1.存储格式和取值范围存储格式和取值范围 Object Object PascalPascal语语言言中中用用RealReal标标识识通通用用实实型型。基基本本实实型型有有6 6种种:SingleSingle(单单精精度度)、DoubleDouble(双双精精度度)、ExtendedExtended(扩扩展展型型)、Real48Real48、CompComp(十十进进制制组组装装型型)和和CurrencyCurrency(货货币币型型)。RealReal与与DoubleDouble实实际际上是相同的类型。上是相同的类型。2.2.运算符运算符(1 1)算术运算符:、)算术运算符:、-、*、/在在使使用用这这几几个个运运算算符符时时,只只要要有有一一个个运运算算对对象象是是实实型型,则则运运算算结结果果也也是是实实型型。其其中中,“/”/”称称为为实实数数除,即使两个整数相除,其结果也是实型。除,即使两个整数相除,其结果也是实型。(2 2)关系运算符:)关系运算符:=、=、=、”与与“”运运算算时时应应谨谨慎慎,因因为为实实型型类类型型的的表表示示是是近近似似值值,相相近近的的实实数数的的存存储储表表示示可可能能是是一一样样的的。可可采采用用差差的的绝绝对对值值与一任意小的数比较。与一任意小的数比较。例:例:X=YX=Y运算应当写成运算应当写成Abs(X-Y)1e-6Abs(X-Y)1e-6;而;而XYXY运算应运算应写成写成Abs(X-Y)1e-6Abs(X-Y)1e-6。3.3.标准函数标准函数 (1 1)绝对值函数)绝对值函数Abs(x)Abs(x):函数值为函数值为x x的绝对值。的绝对值。(2 2)平方函数平方函数Sqr(xSqr(x):函数值为函数值为x x的的平方。平方。(3 3)正正弦弦函函数数Sin(x)Sin(x):函函数数值值为为x x的的正正弦弦,其其中中x x的的单单位为弧度。位为弧度。(4 4)余余弦弦函函数数Cos(xCos(x):函函数数值值为为x x的的余余弦弦,其其中中x x的的单单位为弧度。位为弧度。(5 5)反反正正切切函函数数Arctan(xArctan(x):函函数数值值为为x x的的反反正正切切,函函数值的单位为弧度。数值的单位为弧度。(6 6)指数函数)指数函数Exp(x)Exp(x):函数值为指数函数值为指数e ex x。(7 7)对数函数对数函数In(x)In(x):函数值为函数值为x x的自然对数。的自然对数。(8 8)平方根函数平方根函数Sqrt(xSqrt(x):函数值为函数值为x x的平方根。的平方根。(9 9)舍舍入入函函数数Round(x)Round(x):对对实实数数x x作作四四舍舍五五入入,结结果果为为整整数数。例例如如:Round(5.6)Round(5.6)的的值值为为6 6,Round(-7.6)Round(-7.6)的值为的值为-8-8。(1010)截截尾尾取取整整函函数数Trunc(xTrunc(x):截截去去实实数数x x的的小小数数部部分分,结结 果果 为为 整整 数数。例例 如如:Trunc(-9.9)Trunc(-9.9)的的 值值 为为-9-9,Trunc(7.8)Trunc(7.8)的值为的值为7 7。(1111)取取整整函函数数Int(xInt(x):截截去去实实数数x x的的小小数数部部分分,返返回回整数部分。整数部分。(1212)取取小小数数函函数数Frac(xFrac(x):返返回回实实数数x x的的小小数数部部分分,结果为实型。结果为实型。三、三、日期时间类型日期时间类型 1.1.存储格式和取值范围存储格式和取值范围 日日期期时时间间型型TDateTimeTDateTime在在Object Object PascalPascal中中实实际际是双精度浮点型(是双精度浮点型(DoubleDouble););其原型是:其原型是:TDateTimeTDateTime=Double;=Double;TDateTDate=TDateTimeTDateTime;TTimeTTime=TDateTimeTDateTime;Object Object PascalPascal中中规规定定:以以18991899年年1212月月3030日日12:0012:00时时为为准准计计为为0 0,每每增增加加1 1天天,日日期期时时间间类类型型数数据据增增1 1。因此,整数部分表示距离该日该时的天数。例:因此,整数部分表示距离该日该时的天数。例:0 0:18991899年年1212月月3030日日 12:00 12:00 2.75 2.75:19001900年年1 1月月1 1日日 18:0018:002.2.运算符运算符 Object PascalObject Pascal提供了如下日期时间运算符:提供了如下日期时间运算符:(1 1)加减运算符:)加减运算符:+、-D+ND+N、或、或D ND N 计计算算某某个个日日期期之之前前或或之之后后若若干干时时间间的的日日期期。其其中中,D D是是日日期期时时间间型型的的数数据据,N N是是实实数数。表表达达式式的的值值为日期时间型数据。为日期时间型数据。D1-D2D1-D2 计算两个日期时间的时间间隔。其中计算两个日期时间的时间间隔。其中D1D1、D2D2为为日期时间型数据,结果为实型数据。结果为负数则日期时间型数据,结果为实型数据。结果为负数则表示表示D1D1时间在时间在D2D2时间之前,否则相反。时间之前,否则相反。3.3.标准函数和过程标准函数和过程(1 1)Date()Date():函函数数返返回回系系统统当当前前日日期期,无无参参数数,返返回回数据是数据是TDateTimeTDateTime型。型。(2 2)Time()Time():函函数数返返回回系系统统当当前前时时间间,无无参参数数,返返回回数据是数据是TDateTimeTDateTime型。型。(3 3)Now()Now():函函数数返返回回系系统统当当前前日日期期和和时时间间,无无参参数数,返回数据是返回数据是TDateTimeTDateTime型。型。(4 4)StrToDateStrToDate(日日期期字字符符串串):字字符符串串转转换换为为日日期期时间函数,返回数据是时间函数,返回数据是TDateTimeTDateTime型;型;StrToTimeStrToTime(时时间间字字符符串串):参参数数为为时时间间串串,返返回数据是回数据是TDateTimeTDateTime型;型;StrToDateTimeStrToDateTime(日日期期时时间间型型串串):参参数数为为日日期期时间串,返回数据是时间串,返回数据是TDateTimeTDateTime型。如:型。如:StrToDate(10/1/2004);/StrToDate(10/1/2004);/须经过设置须经过设置,默认默认 /为为2004-1-102004-1-10StrToTime(12:50:24);StrToTime(12:50:24);StrToDateTime(10/1/2004 12:00:00);StrToDateTime(10/1/2004 12:00:00);(5 5)取取日日期期时时间间中中的的部部分分数数据据,以以下下函函数数的的参参数数均均为为日期时间型日期时间型:DateofDateof(参参数数):返返回回去去掉掉时时间间后后的的日日期期(TDateTimeTDateTime型型);TimeofTimeof(参参数数):返返回回去去掉掉日日期期后后的的时时间间(TDateTimeTDateTime型型);YearofYearof(参数参数):返回日期的年份(:返回日期的年份(WordWord型);型);MonthofMonthof(参数参数):返回日期的月份(:返回日期的月份(WordWord型);型);DayofDayof(参数参数):返回日期的日号(:返回日期的日号(WordWord型);型);WeekofWeekof(参参数数):返返回回日日期期在在该该年年份份是是第第几几个个星星期期,返返回回1 1到到5353之间的整数。之间的整数。(6 6)日日期期时时间间转转换换为为字字符符串串的的函函数数,返返回回值值为为字字符符串串,如:如:TimeToStrTimeToStr(参数参数):将时间数据转换为字符串返回;:将时间数据转换为字符串返回;DateToStrDateToStr(参数参数):将日期数据转换为字符串返回;:将日期数据转换为字符串返回;DateTimeTostrDateTimeTostr(参数参数):将日期时间数据转换为字符:将日期时间数据转换为字符串返回。串返回。此外,还有此外,还有HourofHourof、MinuteofMinuteof、SecondofSecondof、FormatDateTimeFormatDateTime等。等。例例2-52-5:使用日期时间:使用日期时间2.4 2.4 结构类型结构类型 结结构构类类型型是是能能够够描描述述和和扩扩展展定定义义较较复复杂杂的的数数据据的的存存储储类类型,通过结构类型,程序中可以存储结构复杂数据。型,通过结构类型,程序中可以存储结构复杂数据。结结构构类类型型可可通通过过将将多多种种基基本本数数据据类类型型结结合合在在一一起起,也也可可以通过扩展预先定义的数据类型来得到。以通过扩展预先定义的数据类型来得到。结结构构数数据据类类型型有有下下面面的的几几类类:集集合合类类型型(setset)、数数组组类类型型(arrayarray)、记记录录类类型型(recordrecord)、文文件件类类型型(filefile)、类类类类型型(classclass)、类类引引用用类类型型(class class referencereference)、)、接口类型(接口类型(interfaceinterface)。)。在在使使用用结结构构类类型型时时,Object Object PascalPascal语语言言提提供供了了一一种种压压缩缩机机制制,可可以以最最大大限限度度地地节节省省结结构构类类型型的的存存储储空空间间。在在声声明明结结构构类类型型时时引引用用保保留留字字packedpacked,数数据据将将以以压压缩缩方方式式存存储储,但但是是,这这样样延延缓缓了了数数据据的的访访问问速速度度,还还会会产产生生类类型的兼容性的问题。型的兼容性的问题。一、一、集合类型集合类型 格式格式:set of set of baseTypebaseType;其中其中baseTypebaseType是集合中元素的类型或值域是集合中元素的类型或值域。Object PascalObject Pascal中规定了基类型只能是不超过中规定了基类型只能是不超过256256个个有序值的集合,集合的元素的序数值必须有序值的集合,集合的元素的序数值必须介于介于0 0和和255255之间。之间。typetype TSetATSetA=set of Integer;=set of Integer;/错误错误 TSetBTSetB=set of 255.300;=set of 255.300;/错误错误 TSetCTSetC=set of =set of WideCharWideChar;/;/错误错误 TsetDTsetD=set of 10.50;=set of 10.50;/正确正确 TsetETsetE=set of char;=set of char;/正确正确1.1.集合的并、交、差运算集合的并、交、差运算 集合运算有:交(集合运算有:交(*)、并()、并(+)、差()、差(-),运算对),运算对象是两个相同类型的集合,运算结果也是集合。象是两个相同类型的集合,运算结果也是集合。如:如:x x为为1,3,51,3,5,y y为为3,4,53,4,5,则则x*y x*y 为为3,53,5,x+yx+y为为1,3,4,51,3,4,5,x-yx-y为为11。2.2.集合的关系运算集合的关系运算(1 1)运运算算符符=、判判断断两两个个集集合合相相同同或或不不相相同同。如如:表达式表达式 1,3,5=3,1,5 1,3,5=3,1,5 的值为的值为TrueTrue;(2 2)=(包含包含)、=3 1,3=3 的值为的值为TrueTrue;(3 3)属属于于运运算算inin,如如:表表达达式式 3 3 in in 3,5 3,5 的的值值为为TrueTrue。二、数组类型二、数组类型 数组类型数据表示的是同种类型数据的集合。数组类型的数数组类型数据表示的是同种类型数据的集合。数组类型的数据是排列有序的,每个数据元素据是排列有序的,每个数据元素都有一个唯一的都有一个唯一的索引号。与集合索引号。与集合类型不同的是,数组类型的数据可以重复。数组类型分为静态