1、南阳理工学院软件学院 Delphi程序设计基础,Delphi程序设计基础,2.6 数据类型,南阳理工学院软件学院 Delphi程序设计基础,复习-本章要求,熟练掌握Delphi 语言元素:保留字、指示字和标识符、变量、常量、运算符、表达式、数据类型的语法结构和使用,掌握注释和编译器命令字、声明语句和可执行语句的特点、区别和用法;熟练掌握程序设计的三种控制结构,可以单独使用及嵌套使用来处理程序设计中的各种问题;了解过程和函数的区别,掌握过程和函数的声明和使用方法,包括带有缺省值的例程、例程的重载和例程的递归调用以及各种不同的参数传递方式。,南阳理工学院软件学院 Delphi程序设计基础,复习,第
2、一节 一个简单的Delphi 语言程序通过一个控制台应用程序的实作和分析,了解程序中所包含的Delphi 语言元素。 第二节 注释和编译器命令字熟练掌握注释和编译器命令字的含义、语法格式。 第三节 Delphi 语言的基本元素掌握保留字、指示字、标识符和直接量的含义和语法规则,能够正确加以区分;能够在程序中定义合法的标识符。 第四节 声明语句掌握Delphi 语言声明语句的含义和不同声明语句所使用的保留字。 第五节 常量和变量了解常量和变量的含义和区别,掌握常量和变量的使用;必须把握变量的4 个基本要素。,南阳理工学院软件学院 Delphi程序设计基础,数据类型要求掌握Delphi 语言中的1
3、7 种数据类型的分类和特点,尤其是基本数据类型和有序数据类型的特点。要求熟练掌握类型的声明及变量的定义和使用;文件、指针、过程和变体也是本章学习的难点,要求掌握文本文件和类型文件的操作,了解无类型文件的特点;掌握指针类型的含义和使用,了解通用指针、过程和变体数据类型,南阳理工学院软件学院 Delphi程序设计基础,数据类型,数据的特征有其所属的数据类型来划分,数据类型不仅可以确定某一类数据的表示形式和取值范围,而且也确定了对该类数据可以进行的有效操作。 Delphi是一种强类型的语言。,南阳理工学院软件学院 Delphi程序设计基础,Delphi中的数据类型划分,根据不同的标准可以对数据类型作
4、如下划分 简单类型、结构类型和其他类型。 有序数据类型 标准数据类型和高级数据类型 基本数据类型和通配数据类型,南阳理工学院软件学院 Delphi程序设计基础,Delphi语言 数据类型,简单类型,有序类型,枚举类型,子界类型,整型,字符型,布尔型,实型,字符串型,结构类型,集合类型,数组类型,记录类型,文件类型,类类型,类引用类型,接口类型,指针类型,过程类型,变体类型,南阳理工学院软件学院 Delphi程序设计基础,南阳理工学院软件学院 Delphi程序设计基础,简单数据类型-有序数据类型-整型,南阳理工学院软件学院 Delphi程序设计基础,一般(generic)整数类型是Integer
5、 和Cardinal,只要可能就尽量使用它们,因为它们对依赖的CPU 和操作系统作了优化。通常,对整数类型进行(算术)运算返回一个Integer 类型(当前相当于32 位的Longint)。只有当对一个Int64 类型的整数运算时才返回Int64 类型。当把整数类型的最后一个值增大或把第一个值减少时,结果将回到整数类型的开头或尾部。,南阳理工学院软件学院 Delphi程序设计基础,越界错误代码,program Project1;$APPTYPE CONSOLEusesSysUtils;varn:ShortInt;beginn:=High(n);n:=n+1;Writeln(High(Short
6、Int)+1=,n);n:=Low(n);n:=n-1;Writeln(Low(ShortInt)-1=,n);readln; end.,南阳理工学院软件学院 Delphi程序设计基础,原因,有符号整型数在计算机中都是以二进制补码形式显示。,南阳理工学院软件学院 Delphi程序设计基础,简单数据类型-有序数据类型-字符型,南阳理工学院软件学院 Delphi程序设计基础,关于扩展字符集Windows 和Linux 都支持单字节和多字节字符集,同样也支持Unicode。使用单字节字符集(SBCS),字符串的每个字节表示一个字符。ANSI 字符集被许多西方(国家的)操作系统使用,它是单字节字符集。
7、在多字节字符集(MBCS)中,一些字符由一个字节表示,而另一些则使用多个字节。多字节字符的第一个字节称为头字节(lead byte)。通常,在多字节字符集中,前128 个字符对应于7 位ASCII 字符(0-127),任何序数值大于127 的字节为多字节字符的头字节。只有单字节字符能包含空值(#0)。多字节字符集(特别是双字节字符集,DBCS),被亚洲语言广泛使用,但Linux 使用的UTF-8 字符集是Unicode 的一种多字节编码。在Unicode 字符集中,每个字符用两个字节表示,所以,一个Unicode 字符串是由双字节组成的序列。Unicode 字符和字符串也被称为宽字符和宽字符串
8、。前256 个Unicode 字符被映射到ANSI 字符集。Windows 操作系统支持Unicode(UCS-2)。Linux 操作系统支持UCS-4,是UCS-2 的超集。Delphi/Kylix在两个平台上都支持UCS-2。Object Pascal 支持单字节和多字节字符以及字符串,适用的类型有:Char、PChar、AnsiChar、PAnsiChar和AnsiString。对多字节字符串使用索引是不可取的,因为Si表示S 中第i 个字节(不一定是第i 个字符),但是,标准字符串处理函数有多字节版本,它们还实现了locale-specific ordering for charact
9、ers(多字节函数的名称通常以Ansi 开头,比如StrPos 的多字节版本是AnsiStrPos)。多字节支持依赖于操作系统和本地设置(current locale)。Object Pascal 使用WideChar、PWideChar 和WideString 类型支持Unicode 字符和字符串。,南阳理工学院软件学院 Delphi程序设计基础,Unicode,UNICODE是目前用来解决ASCII码256个字符限制问题的一种比较流行的解决方案。ASCII 字符集只有256个字符,用 0-255 之间的数字来表示。包括大小写字母、数字以及少数特殊字符;如标点符号、货币符号等。对于大多数拉丁
10、语言来说,这些字符已经够用。但是,许多亚洲和东方语言所用的字符远远不止256个字符。有些超过千个。人们为了突破 ASCII 码字符数的限制,试图用一种简单的方法来针对超过256个字符的语言编写计算机程序。于是 UNICODE 应运而生。UNICODE 通过用双字节来表示一个字符,从而在更大范围内将数字代码映射到多种语言的字符集。,南阳理工学院软件学院 Delphi程序设计基础,使用有序类型标准例程,program Project1;$APPTYPE CONSOLEusesSysUtils; varc:char; beginc:=high(char);Inc(c,70);Writeln(c);W
11、riteln(Pred(c);Writeln(Succ(c);Readln; end.end.,南阳理工学院软件学院 Delphi程序设计基础,简单数据类型-有序数据类型-布尔型,南阳理工学院软件学院 Delphi程序设计基础,4种布尔类型在有序特性上的区别,南阳理工学院软件学院 Delphi程序设计基础,简单数据类型-有序数据类型-枚举类型,表示一组带值符号的有序数据类型 枚举类型是一种高级数据类型,在使用其变量之前,必须通过类型声明语句进行具体的声明 格式为:type类型名称=(符号1,符号2,符号n); 类型名称必须是合法的标识符;圆括号中所列出的符号即为该枚举类型的取值,这些取值被称为
12、枚举常量,必须是合法的标识符,而不能是任何数据类型或者任何类型的数据; 枚举常量不能在同一枚举类型中重复出现,也不能在不同的枚举类型中重复出现。,南阳理工学院软件学院 Delphi程序设计基础,例程,program Project1;$APPTYPE CONSOLEusesSysUtils; typeMyWeek=(mwMon,mwTue,mwWed,mwThu,mwFri,mwSat,mwSun); varWeekDay:MyWeek; beginWeekDay:=mwFri;Inc(WeekDay,2);Writeln(Ord(WeekDay);Readln; end.,南阳理工学院软件学
13、院 Delphi程序设计基础,枚举常量的序号,默认情况下,枚举常量的序号按照其在声明中的顺序从0开始递增,也可以通过为其中部分或全部枚举值显式赋予序号的方式来改变这一规则。 若一个值没有明确指定序数,它的取值将是前一个值的序数值加上1;如果第1 个值没有指定序数,它的序数为0。,南阳理工学院软件学院 Delphi程序设计基础,例程,program Project1;$APPTYPE CONSOLEusesSysUtils; typeMyWeek=(mwMon=5,mwWed=10,mwFri=mwMon+mwWed); varWeekDay:MyWeek; beginWeekDay:=mwFr
14、i;Writeln(ord(WeekDay);WeekDay:=MyWeek(6);Writeln(ord(WeekDay);WeekDay:=Succ(WeekDay);Writeln(ord(WeekDay);Readln;end.,南阳理工学院软件学院 Delphi程序设计基础,实际上,枚举类型是这样一个子界类型,它的最小值和最大值,分别对应于声明时的最小序数和最大序数。在上面的例子中Size 类型的最小序数为5,最大为15,所以它有11 个可能的值。虽然只有其中的3 个值有名称,但其它值通过类型转换、或通过一些例程(比如Pred、Succ、Inc 和Dec)是可以访问的。,南阳理工学院
15、软件学院 Delphi程序设计基础,枚举类型的变量代表枚举值序号的存储。与编译开关有关。,南阳理工学院软件学院 Delphi程序设计基础,例程,program Project1;$APPTYPE CONSOLEusesSysUtils; typeMyWeek=(mwMon,mwWed,mwFri=0); varWeekDay:MyWeek; beginwriteln(ord(high(WeekDay);writeln(ord(low(WeekDay);writeln(ord(sizeof(WeekDay); End.,南阳理工学院软件学院 Delphi程序设计基础,简单数据类型-有序数据类型-
16、子界类型,在实际应用中,许多变量的取值都会有一定范围的限制。子界类型就是用来表示这种具有确定的数据类型和确定的取值范围的数据的数据类型。,南阳理工学院软件学院 Delphi程序设计基础,子界类型的声明,子界类型是一种高级数据类型,在使用其变量之前,也必须通过类型声明语句进行具体的声明。声明子界类型的语法格式为type类型名称=下界上界;类型名称必须为合法的标识符,下界和上界必须是相同的有序数据类型常量表达式,且上界必须不小于下届。子界中下界和上界所属的有序类型称为子界的基类型。,南阳理工学院软件学院 Delphi程序设计基础,子界类型值的序号与其在基类型中的序号相同。子界类型可以执行的操作与其
17、基类型可以执行的操作相同。对子界类型,每个值的序数取自基础类型,而且,它的值不会回转到开头或结尾,即使它的基础类型是整型或字符类型;当因增大或减小而产生越界时,它的值只是简单地转换成基础类型的值。,南阳理工学院软件学院 Delphi程序设计基础,例程,program Project1;$APPTYPE CONSOLEusesSysUtils;constx=50;y=10; typemyEnum=(Red,Green,Blue,Yellow,Black,White);MySub1=blueblack;MySub2=2*(x-y)(x+y)*2;MySub3=ac;MySub4=TrueTrue;
18、varS1:MySub1;S2:MySub2;S3:MySub3;S4:MySub4;,南阳理工学院软件学院 Delphi程序设计基础,beginS1:=Black;WriteLn(Ord(S1);WriteLn(Ord(Low(S1);WriteLn(Ord(High(S1);S2:=90;WriteLn(Ord(S2);WriteLn(Ord(Low(S2);WriteLn(Ord(High(S2);S3:=b;WriteLn(Ord(S3);WriteLn(Ord(Low(S3);WriteLn(Ord(High(S3);S4:=True;WriteLn(Ord(S4);WriteLn(
19、Ord(Low(S4);WriteLn(Ord(High(S4);ReadLn; end.,南阳理工学院软件学院 Delphi程序设计基础,简单数据类型-实型,通过浮点存储格式来表示实数的标准数据类型,用于较高精度的数值计算。,南阳理工学院软件学院 Delphi程序设计基础,南阳理工学院软件学院 Delphi程序设计基础,保留Real48 是为了向后兼容性。因为它的存储格式Intel CPU 下不能优化,这将导致比其它浮点类型运行稍慢。Extended 类型比其它实数类型有更高的精度,但不够轻巧。当使用Extended 类型创建的文件要跨平台共享时,务必小心。Comp(computationa
20、l)类型对Intel CPU 是优化的,表示为64 位整数,但它被分类位实数类型,因为它的行为不像有序类型(比如,你不能递增和递减)。保留此类型只是为了向后兼容性,使用Int64可获得更好的性能。,南阳理工学院软件学院 Delphi程序设计基础,Currency 类型有固定的小数点,可以把在货币运算中出现的错误减到最少。当在赋值语句和表达式中与其它实数类型混合使用时,它的值会自动除以或乘上10000。在Delphi 7中,Real与Double完全等价。,南阳理工学院软件学院 Delphi程序设计基础,例程,program Project1;$APPTYPE CONSOLEusesSysUti
21、ls; varx:Real;SquareRoot,CubeRoot:Real; beginwriteln(请输入一个整数);Readln(x);SquareRoot:=Sqrt(x);CubeRoot:=Exp(Ln(x)/3.0);writeln(其平方根为:,SquareRoot:11:3);writeln(其立方根为:,CubeRoot:11:3);Readln; end.,南阳理工学院软件学院 Delphi程序设计基础,字符串类型,南阳理工学院软件学院 Delphi程序设计基础,ShortString,一个ShortString 可包含0 到255 个字符。它的长度能动态改变,它被静态
22、分配256 字节的内存:第1 个字节存储串的长度,剩下的255 个字节存储字符若S 是一个ShortString 变量,Ord(S0),和Length(S)一样,将返回S 的长度;给S0赋值,就像调用SetLength,将改变S 的长度。ShortString 使用8 位ANSI 字符,保留它只是为了向后兼容性。如果赋给S的字符串超过255个字符,超过部分被截除,南阳理工学院软件学院 Delphi程序设计基础,例程,program Project1;$APPTYPE CONSOLEusesSysUtils;var s:ShortString; beginWriteLn(SizeOf(s);s:
23、=;WriteLn(s);WriteLn(Ord(s0);s:=ABCD;WriteLn(s);WriteLn(Length(s);ReadLn; end.,南阳理工学院软件学院 Delphi程序设计基础,AnsiString,AnsiString 类型又称为长字符串,它可以动态分配,并且长度只受内存限制。长串变量是一个指针,占据4 个字节的内存。当变量为空时(也就是长度为0 的字符串),指针为nil,此时,它不需要额外的内存;当变量为非空时,它指向一个动态分配的内存块,内存块存储字符串的值:一个32 位的长度指示器,一个32 位的引用计数器。它的内存在堆中分配,但它的管理是完全自动的,不需要
24、自己编写代码。,南阳理工学院软件学院 Delphi程序设计基础,AnsiString,因为长串变量是指针,所以,两个或更多的变量可以引用同一个值,而不必使用额外的内存。编译器利用这一点节省资源和进行快速赋值。只要一个长串变量被销毁或赋给一个新值,原来的串(变量的前一个值)引用计数减1,而新的值(如果有的话)引用计数加1。若引用计数为0,它的内存被释放。这个过程被称为reference-counting。当使用字符串索引改变其中的一个字符时,若字符串的引用计数大于1,将生成串的一个拷贝,这被称为copy-on-write 机制。,南阳理工学院软件学院 Delphi程序设计基础,A B C D n
25、ull,引用记数1,实际长度,S为空字符串,执行s:=ABCD之后,nil,南阳理工学院软件学院 Delphi程序设计基础,String,保留字string 用作ASCII字符串通用类型标识符。在默认的$H+状态下,编译器把string(当它的后面没有包含数字的中括号时)解释为AnsiString;使用$H-指示字把它解释为ShortString。 但无论在哪一种编译状态下,string0到255之间的一个整数总是被解释为一种特殊的短字符串类型。,南阳理工学院软件学院 Delphi程序设计基础,widestring,Widestring又成为宽字符串,用作Unicode 长字符串。其特征与An
26、siString字符串相似,但不具备引用计数的功能。 WideString 类型是动态分配的、由16 位Unicode 字符所构成的字符串。(注:宽字符串没有引用计数,不支持copy-on-write 机制,但支持内存动态分配。) 在Win32 下,WideString 和COM BSTR 类型兼容。Borland 开发工具支持把AnsiString 类型转换为WideString,但你可能需要明确地使用类型转换。,南阳理工学院软件学院 Delphi程序设计基础,对字符串的比较,是比较它们对应位置上的字符大小(顺序)。对长度不等的字符串,较长字符串上多余的字符被认为较大(若前面没有比较出大小)
27、。例如,AB比A大,也就是说,AB A返回True。零长度的字符串有最小值。你可以像数组一样对字符串使用索引。若S 是一个字符串变量,i 是一个整数表达式,则Si表示S 中第i 个字符(或者,严格说来,是第i 个字节)。对于ShortString 或AnsiString,Si是AnsiChar 类型;对于WideString,Si是WideChar 类型。,南阳理工学院软件学院 Delphi程序设计基础,例程,program Project1;$APPTYPE CONSOLEusesSysUtils;var$H-s1:string10;s2:string;$H+s3:string10;s4:s
28、tring;ws:WideString; beginWriteLn(特殊短字符串变量s1的存储字节数:,SizeOf(s1);WriteLn( 短字符串变量s2的存储字节数:,SizeOf(s2);WriteLn(特殊短字符串变量s3的存储字节数:,SizeOf(s3);WriteLn( 长字符串变量s4的存储字节数:,SizeOf(s4);WriteLn( 宽字符串变量ws的存储字节数:,SizeOf(ws);,南阳理工学院软件学院 Delphi程序设计基础,s1:=0123456789012;WriteLn(s1:=“0123456789012“:,s1);s2:=程序员;WriteLn(
29、三个汉字在ASCII字符串中的长度:,length(s2);ws:=程序员;WriteLn(三个汉字在Unicode字符串中的长度:,length(ws);s3:=ABCD;WriteLn(特殊短字符串变量s3的存储地址:,integer(s3);WriteLn(s3中第一个字符的存储地址:,integer(s31);s4:=XYZ;WriteLn(长字符串变量s4的存储地址:,integer(s4);WriteLn(s4中第一个字符的存储地址:,integer(s41);ReadLn; end.,南阳理工学院软件学院 Delphi程序设计基础,Question,1 在Delphi语言中,返回
30、有序类型序号的函数是_。2 下列整型中,属于通配数据类型的是_A.SmallInt B.Cardinal C.Word D.LongInt3 字符型WideChar的存储空间是_ A.1个字节 B.2个字节 C.4个字节 D.8个字节4 请选出Round(4.5)的结果:_A.4 B.3 C.5 D.-5,南阳理工学院软件学院 Delphi程序设计基础,Lab Assignments,P58 2-4P72 2-13,南阳理工学院软件学院 Delphi程序设计基础,结构类型(Structured types): Overview,结构类型的一个实例可包含多个值。结构类型包括集合、数组、记录,也包
31、括类、类引用(class-reference)和接口类型。除了集合只能包含有序值以外,结构类型可以包含其它的结构类型,且结构的层次不受限制。,南阳理工学院软件学院 Delphi程序设计基础,结构类型-集合类型,集合是以基本的数学概念,指的是具有某种属性的事物的全体,组成集合的每个事物成为集合的元素。,南阳理工学院软件学院 Delphi程序设计基础,集合的性质,集合中的元素是可以相互区分的。也就是说,相同的元素在集合中被认为是同一个元素。即1,2=1,2,2。 集合中的元素是与排列次序无关的即1,2,3与2,1,3是同一个集合。 元素要么属于集合,要么不属于集合。,南阳理工学院软件学院 Delp
32、hi程序设计基础,集合的运算,集合的运算包括并运算、交运算和补运算。集合之间存在相等、不相等、包含、被包含等关系,而元素和集合之间则存在属于关系。 集合是高级数据类型,在使用集合之前必须首先进行类型和变量声明。在Delphi语言中,集合是通过保留字set来声明的。该保留字可以声明不超过256个有序类型元素且其最大最小序号值必须介于0到255之间的元素集合。,南阳理工学院软件学院 Delphi程序设计基础,集合类型声明语句的格式,Type集合标识符=set of 基类型; 其中基类型必须是有序数据类型。 集合类型的变量可以包括或者不包括基类型中的所有可能值。也就是说,集合类型所描述的元素可以全部
33、属于某一集合变量,也可以均不属于某一集合。实际上,对于具有N个元素的集合类型来说,其变量的取值共有2n种可能。,南阳理工学院软件学院 Delphi程序设计基础,判断Delphi语言集合类型声明的 合法性,TypeMySet1=set of ShortInt;MySet2=set of Byte;MyEnum=(meRed=3,meGreen,meBlue=256);MySet3=set of MyEnum;MySub=az;MySet4=set of Mysub;MySet5=set of Integer;,南阳理工学院软件学院 Delphi程序设计基础,你也可以直接使用set of 构造直接
34、声明变量: var MySet: set of az; . MySet := a,b,c;,南阳理工学院软件学院 Delphi程序设计基础,集合类型的使用,program Project1;$APPTYPE CONSOLE usesSysUtils;typeMyColor = (cRed,cGreen,cBlue,cx);Myset = set of Mycolor; varMyset1:Myset;MySet2: set of ac; beginMyset1:=cRed,cGreen,cBlue;Myset2:=a,b,c;if cRed in Myset1 thenwriteln(cRed
35、 is in Myset1)elsewriteln(cRed isnt in Myset1);if a in Myset2 thenwriteln(a is in Myset2)elsewriteln(a isnt in Myset2);readln; end.,南阳理工学院软件学院 Delphi程序设计基础,结构类型-数组类型,数组是相同类型的元素按照一定顺序组成的序列。数组中的每一个数据元素都可以通过数组变量名和唯一的一个索引号来存取,他们被顺序的安排在内存中的一段连续存储区域。,南阳理工学院软件学院 Delphi程序设计基础,数组可分为一维和多维数组,而且Delphi5开始,又引入了动态
36、数组,因此在Delphi语言中,数组又可以分为动态数组和静态数组两类。,南阳理工学院软件学院 Delphi程序设计基础,数组的声明,数组是高级数据类型,因此在使用数组之前应该使用保留字array对数组进行声明; 一维静态数组的声明: Type 数组标识符=array下标类型 of 基类型 二维静态数组的声明: Type 数组标识符=array下标类型 of array 下标类型 of 基类型 一维动态数组的声明: Type 数组标识符=array of 基类型 二维动态数组的声明: Type 数组标识符=array of array of 基类型,南阳理工学院软件学院 Delphi程序设计基础
37、,下标类型必须是以字节形式给出的有序类型。基类型可以使出文件类型以外的所有任意数据类型。例子见P75,南阳理工学院软件学院 Delphi程序设计基础,数组变量及其使用,在声明了数组类型之后,就可以在程序中定义其变量并在程序中使用。数组变量的定义仍然是使用保留字var, 但对于静态数组变量和动态数组变量来说,它们的存储分配是不同的。 静态数组在声明时通过下标给定了存储基类型数据的容量,因而,其变量所需的存储可以通过静态分配完成。 动态数组在声明时没有使用下标指定存储基类型数据的容量,所以,其变量所需的存储只能通过标准例程setlength来动态进行分配。,南阳理工学院软件学院 Delphi程序设
38、计基础,数组变量的访问,通过数组变量标识符和方括号界定的下标之来进行。对于静态数组变量来说,其下标值范围已经在类型声明时给出,而对于动态数组变量来说,动态分配存储之后,其下标值范围为0到容量-1。 要释放一个不再用到的动态数组,可以将nil赋值给该动态数组变量。,南阳理工学院软件学院 Delphi程序设计基础,program Project1;$APPTYPE CONSOLEusesSysUtils;typeMyArray1=array 110 of integer;MyArray2=array211,ac of string;MyArray3=array of real;MyArray4=a
39、rray of array of real; vara1:MyArray1;a2:MyArray2;a3:MyArray3;a4:MyArray4; beginWriteLn(sizeof(a1),SizeOf(a1);WriteLn(sizeof(a2),SizeOf(a2);WriteLn(sizeof(a3),SizeOf(a3);WriteLn(sizeof(a4),SizeOf(a4);/通过下标写静态数组变量a12:=2000;a22,a:=string;,南阳理工学院软件学院 Delphi程序设计基础,/通过下标写动态数组变量setlength(a3,1);a30:=2000.0
40、5;setlength(a4,2,2);a41,1:=-19.32;/读变量的值WriteLn(a12的值,a12);WriteLn(a22,a的值,a22,a);WriteLn(a30的值,a30:10:2);WriteLn(a41,1的值,a41,1:10:2);/各个数组变量的长度和下标值范围WriteLn(a1的长度,length(a1);Write(a1的最小下标值,low(a1), );Writeln(a1的最大下标值,high(a1);WriteLn(a3的长度,length(a3);Write(a3的最小下标值,low(a3), );Writeln(a3的最大下标值,high(
41、a3);WriteLn(a2第一维的长度,length(a2);Write(a2第一维的最小下标值,low(a2), );Writeln(a2第一维的最大下标值,high(a2);WriteLn(a2第二维的长度,length(a22);,南阳理工学院软件学院 Delphi程序设计基础,Write(a2第二维的最小下标值,low(a22), );Writeln(a2第二维的最大下标值,high(a22);WriteLn(a4第一维的长度,length(a4);Write(a4第一维的最小下标值,low(a4), );Writeln(a4第一维的最大下标值,high(a4);WriteLn(a4
42、第二维的长度,length(a40);Write(a4第二维的最小下标值,low(a40), );Writeln(a4第二维的最大下标值,high(a40);setlength(a3,0);WriteLn(a3的长度,length(a3);Write(a3的最小下标值,low(a3), );Writeln(a3的最大下标值,high(a3);readln; end.,南阳理工学院软件学院 Delphi程序设计基础,动态数组维数的动态变化,program Project1;$APPTYPE CONSOLEusesSysUtils; vara:array of array of string ;i
43、,j:integer; beginSetLength(a,10);for i:=(low(a) to (high(a) dobeginsetlength(ai,i);for j:=(low(ai) to (high(ai) dobeginai,j:=inttostr(i)+*+inttostr(j+1)+=+inttostr(i)*(j+1)+ ;write(ai,j);end;writeln;end;readln; end.,南阳理工学院软件学院 Delphi程序设计基础,南阳理工学院软件学院 Delphi程序设计基础,筛法求素数,南阳理工学院软件学院 Delphi程序设计基础,南阳理工学院
44、软件学院 Delphi程序设计基础,记录类型,将不同数据类型的数据组合在一起,在这种情况下,我们使用记录类型。,南阳理工学院软件学院 Delphi程序设计基础,记录类型的声明,使用保留字record进行声明 Type记录标识符=record域名表1:类型;域名表2:类型;域名表n:类型; End; 其中,类型可以是除文件类型之外的任意数据类型;域名表是一个或多个域名标识符,多个域名标识符之间用逗号隔开。,南阳理工学院软件学院 Delphi程序设计基础,TypeStudent=recordnum:integer;name:string;age:byte;sex:boolean;birthplac
45、e:string; End;,南阳理工学院软件学院 Delphi程序设计基础,记录类型变量的使用,使用保留字var定义,其存储分配方式是静态完成的。var s1,s2:Student; 利用编译器命令字完成对齐方式设置Record field alignment的属性值,南阳理工学院软件学院 Delphi程序设计基础,使用记录类型的变量,使用记录类型的变量就是要访问该记录的域。s1.num:=111;s1.name:=tomlee;s1.age:=20;s1.sex:=true;s1.birthplace:=henan,南阳理工学院软件学院 Delphi程序设计基础,若程序中需要多次访问记录中
46、的域需要使用with语句简化代码的编写,以免每次都要重复记录变量名。具体代码参见P81,南阳理工学院软件学院 Delphi程序设计基础,文件类型,文件是数据在外部存储介质上保存的一种形式,是相同类型数据的序列。在delphi语言中,可以处理3种文件类型:文本文件、类型文件、无类型文件。在下面的讲解中,我们所指的文件都是磁盘文件,但实际上,一些标准的输入输出设备如打印机,显示器等等,都可以以文件形式进行操作。,南阳理工学院软件学院 Delphi程序设计基础,文本文件及其声明,文本文件是指可以被任意文本编辑器编辑的ASCII文件,它由ASCII字符行组成,行于行之间可以用回车换行符分割,其实际磁盘
47、文件名后缀通常使用.txt。 文本文件的类型声明使用预定义的TextFile或者Text,其声明格式为:type 文本文件类型标识符=TextFile;var文本文件变量标识符:文本文件类型标识符;,南阳理工学院软件学院 Delphi程序设计基础,类型文件及其声明,类型文件是一种具有一定数据类型的文件,它由指定类型的数据组成,其实际磁盘文件名后缀通常使用.dat。类型文件的类型声明使用保留字 file of ,其声明格式为: Type类型文件类型标识符=file of 类型名; Var类型文件变量标识符:类型文件类型标识符,南阳理工学院软件学院 Delphi程序设计基础,无类型文件及其声明,无
48、类型文件是指包含任意格式数据的文件,它没有固定的数据结构,可以由文件的使用者决定每个记录的长度,其实际磁盘文件后缀名通常是用.dat。无类型文件的类型声明使用保留字file,其声明格式为type 无类型文件类型标识符=file ;var 无类型文件变量标识符:无类型文件类型标识符,南阳理工学院软件学院 Delphi程序设计基础,文件类型变量与实际文件的关联,文件类型变量在使用之前,必须经过Delphi语言标准例程AssignFile与实际文件相关联,文件变量在使用之后,必须通过Delphi语言标准例程closeFile接触与实际文件的关联,从而释放文件变量并关闭实际文件。 代码实现详见P83。,南阳理工学院软件学院 Delphi程序设计基础,类,类引用类型和接口类型,见下章,南阳理工学院软件学院 Delphi程序设计基础,