Delphi-基础(常量集合数组[动态数组多维数组])
Posted rise-home
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi-基础(常量集合数组[动态数组多维数组])相关的知识,希望对你有一定的参考价值。
一、常量
1、常量定义:一开始定义好的值,以后在程序的运行过程中不允许改变
1 const 2 Pi : Double = 3.141592; //定义为常量 3 {常量的定义方式,可以不进行类型的声明,编译器会根据具体值决定常量的的类型} 4 Pi2 = 3.1415;
2、常量使用
枚举:常量集
type
枚举名=(标识符1,标识符2,标识符3,......)
1 type 2 {正常情况下,枚举类型的索引是从0开始} 3 EColors = (RED,GREEN,BLUE); 4 EWeek = (SUN=7,MON=1,TUE=2,WED=3,THU=4,FRI=5,SAT=6); 5 var 6 Color : EColors; 7 Week : EWeek; 8 9 begin 10 Color := EColors.RED; 11 Week := EWeek.SUN; 12 Writeln(Ord(Color),‘,‘,Ord(Week)); 13 REDln; 14 end.
二、子界
使用:为了防治出现越界
注意事项:
1、子界要求上界和下界必须是有序的数据类型 整数、字符、枚举
2、子界的上界大于或者等于下界
格式:type 子界
1 {定义格式} 2 type 3 {枚举} 4 EColors = (RED,GREEN,BLUE); 5 {子界} 6 TSubBoundNumber = 1..10; 7 TSubBoundChar = ‘a‘..‘z‘; 8 9 10 begin 11 Writeln(Low(TSubBoundNumber)); //下界 12 Writeln(High(TSubBoundChar)); //上界 13 REDln; 14 end.
打印出闰年还是平年,每个月的天数和所属季节
1 {打印出闰年还是平年,每个月的天数和所属季节} 2 type 3 {子界} 4 TSubBoundMonths = 1..12; 5 {枚举} 6 ESeason = (Spring,Summer,Autumn,Winter); 7 8 var 9 Season : ESeason; 10 Month : TSubBoundMonths; 11 User_Year:Integer; 12 Is_Leap_Year:Boolean; 13 User_Month : Integer; 14 15 procedure SubBound(); 16 begin 17 Writeln(‘请输入一个年份:‘); 18 REDln(User_Year); 19 {默认为闰年} 20 Is_Leap_Year := True; 21 while Is_Leap_Year do 22 begin 23 if (User_Year mod 4) = 0 then begin 24 if not((User_Year mod 100) = 0) then begin 25 Writeln(‘闰年‘,User_Year); 26 Is_Leap_Year := False; 27 end; 28 end; 29 if (User_Year mod 400) = 0 then begin 30 Writeln(‘闰年‘,User_Year); 31 Is_Leap_Year := False; 32 end 33 else begin 34 Is_Leap_Year := False; 35 Writeln(‘平年‘,User_Year) 36 37 end; 38 end; 39 40 end; 41 procedure Months(); 42 begin 43 {季节} 44 Writeln(‘请输入一个月份:‘); 45 REDln(User_Month); 46 begin 47 if (User_Month >= Low(TSubBoundMonths)) and (User_Month <= High(TSubBoundMonths)) then 48 if (User_Month >= 1) and (User_Month <= 3) then begin 49 Writeln(‘当前季节为春季‘); 50 case User_Month of 51 1 : begin 52 Writeln(‘31天‘); 53 end; 54 2 : begin 55 if Is_Leap_Year then begin 56 Writeln(‘29天‘); 57 end else begin 58 Writeln(‘28天‘); 59 end; 60 end; 61 3 : begin 62 Writeln(‘31天‘); 63 end; 64 end; 65 end; 66 67 end; 68 end; 69 70 begin 71 // Writeln(Low(TSubBoundNumber)); //下界 72 // Writeln(High(TSubBoundChar)); //上界 73 74 SubBound(); 75 Months(); 76 REDln; 77 end.
三、集合
集合是由具有某些共同特征的元素结构的一个整体。在pascal中,一个集合是由一有序类型的一组数据元素组成,者一有序类型成为该集合的而基本类型。
集合定义:
1 type 2 <类型名称>=set of<基类型>;
声明集合的变量(可使用集合类型的名称来声明,也直接利用集合类型的本身来声明)
1 Var 2 Vset1:set1; 3 Vset2:set of byte;
注意:
1、一个集合类型的所有成员必须是同一有序类型且最多包含256个成员。
2、集合类型具有唯一性,即同一集合类型中不允许包含相同的成员。
3、集合类型成员具有无序性,其中的成员没有序数。无法向枚举型一样用序数标识集合成员。
4、集合类型的值域由BaseType 的值域决定。
集合定义方式
1 {定义方式} 2 type {type主要作用是让用户可以自定义类型} 3 TMySet = set of Char; 4 TMySet1 = set of ‘a‘..‘z‘; 5 var 6 TMySet2 : set of ‘a‘..‘z‘;
集合示例
1 uses 2 System.SysUtils,System.TypInfo; 3 4 type 5 {定义一个枚举} 6 TColors = (RED,GREEN,BLUE); 7 type 8 TSetColors = set of TColors; 9 var 10 sc : TSetColors; 11 indexs : Integer; 12 procedure set_test1; 13 begin 14 for indexs := Ord(Low(TColors)) to Ord(High(TColors)) do begin 15 16 Writeln(GetEnumName(TypeInfo(TColors),indexs)) //显示枚举内信息 17 end; 18 19 end; 20 begin 21 {遍历集合元素:无序的} 22 set_test1(); 23 Readln; 24 end.
四、数组
数组:按照一定编号存放了一堆类型相同数据的容器
定义
array[indexType1, ..., indexTypen] of baseType;
注意事项
1、数组在使用之前必须要声明长度(下标、元素总数)
1 type {定义变量} 2 MyArray = array[0..4] of Char; 3 var {变量声明} 4 NameArray : MyArray; 5 Indexs : Integer; 6 7 {静态数组元素遍历} 8 procedure MyProc; 9 begin 10 NameArray[0] := ‘a‘; 11 NameArray[1] := ‘b‘; 12 NameArray[2] := ‘c‘; 13 NameArray[3] := ‘d‘; 14 for Indexs := Low(NameArray) to High(NameArray) do begin 15 Writeln(NameArray[Indexs]); //屏幕输出 16 end; 17 18 end; 19 20 type 21 TMyFlexibleArray = array[0..4] of Char; 22 var 23 TMyArray : TMyFlexibleArray; 24 Elem : Char; //与数组类型保持一致 25 procedure MyProc1; 26 begin 27 TMyArray[0] := ‘a‘; 28 TMyArray[1] := ‘b‘; 29 TMyArray[2] := ‘c‘; 30 TMyArray[3] := ‘d‘; 31 for Elem in TMyArray do //取数组里面的元素 32 begin 33 Writeln(Elem); //输出数组中的具体元素 34 end; 35 Writeln(Length(TMyArray)); //取数组最大可用数(可用元素) 36 37 end; 38 39 begin 40 // MyProc(); 41 MyProc1(); 42 Readln; 43 end.
五、动态数组
1 {动态数组} 2 type 3 StringArray = array of string; 4 var 5 NArray : StringArray; 6 NameArray1 : StringArray; 7 Indexs1 : Integer; 8 Elem1 : string; 9 10 procedure Dynamic_MyProc1; 11 begin 12 SetLength(NArray,20); //设置长度,并未创建元素 13 14 NameArray1 := StringArray.Create(‘xiaoqian‘,‘xiaoming‘); //创建数组,设置长度 15 NameArray1 := [‘xiaoming‘,‘xiaoyang‘,‘xioaogang‘]; ////创建数组,设置长度 16 // Writeln(Length(NArray),‘,‘,Low(NArray)); 17 Writeln(Length(NameArray1),‘,‘,Low(NameArray1)); 18 {遍历1数组 for to } 19 for Indexs1 := Low(NameArray1) to High(NameArray1) do begin 20 Writeln(NameArray1[Indexs1]); 21 end; 22 {遍历2数组 for in} 23 for Elem1 in NameArray1 do 24 begin 25 Writeln(Elem1); 26 end; 27 end; 28 29 begin 30 31 Dynamic_MyProc1(); 32 Readln; 33 end.
1 {动态数组2} 2 type 3 StringArray1 = array of string; 4 var 5 NameArray2 : StringArray1; 6 AddressArray : StringArray1; 7 DataArray : StringArray1; 8 DataArray1: StringArray1; 9 Name : string; 10 Indexs2 :Integer; 11 NameArray3 : StringArray1; 12 13 procedure Dynamic_MyProc2; 14 begin 15 NameArray2 := [‘北京‘,‘南京‘,‘天津‘]; 16 AddressArray := [‘林志玲‘,‘萧蔷‘]; 17 {Concat 连接连个数组} 18 DataArray := Concat(NameArray2,AddressArray); 19 20 {拷贝数组,High(DataArray1),Copy含头不含尾} 21 for Name in DataArray do begin 22 // Writeln(Name) //北京 南京 天津 林志玲 萧蔷 23 end; 24 25 DataArray1 := Copy(DataArray,Low(DataArray),High(DataArray)); 26 for Indexs2 := Low(DataArray1) to Length(DataArray1) do begin 27 // Writeln(DataArray1[Indexs2]) //北京 南京 天津 林志玲 萧蔷 28 end; 29 30 {Insert插入} 31 NameArray3 := [‘11‘,‘22‘]; //等待插入的数据 32 Insert(NameArray3,DataArray,10); 33 for Name in DataArray do begin 34 // Writeln(Name) //北京 南京 天津 林志玲 萧蔷 11 22 35 end; 36 37 {Delete删除} 38 Delete(DataArray,Length(DataArray)-2,Length(DataArray)); 39 for Name in DataArray do begin 40 Writeln(Name) //北京 南京 天津 林志玲 萧蔷 41 end; 42 43 end; 44 45 begin 46 47 Dynamic_MyProc2(); 48 Readln; 49 end.
六、多维数组
1 {多维数组:1、静态多维数组 2、动态多维数组} 2 type 3 {声明一个动态的二位数组} 4 TStringDynamicArray2 = array of array of string; 5 {声明一个静态二维数组} 6 TStringStaticArray3 = array[0..3] of array[0..2] of string; 7 var 8 TDynamicNameArray : TStringDynamicArray2; 9 TStaticArray : TStringStaticArray3; 10 I,J : Integer; 11 {初始化动态二位数组} 12 procedure TStringDynamic_Array2; 13 begin 14 TDynamicNameArray := [[‘张三‘,‘李四‘,‘王五‘],[‘成都‘,‘重庆‘,‘西安‘]]; 15 {遍历二维数组} 16 for I := Low(TDynamicNameArray) to High(TDynamicNameArray) do begin 17 for J := Low(TDynamicNameArray[I]) to High(TDynamicNameArray[I]) do begin 18 Writeln(TDynamicNameArray[I][J]); 19 end; 20 21 end; 22 23 Writeln(TDynamicNameArray[0][1]); 24 end; 25 26 {初始化静态二位数组} 27 procedure TStringStatic_Array3; 28 begin 29 TStaticArray[0][0] := ‘开心麻花‘; 30 for I := Low(TStaticArray) to High(TStaticArray) do begin 31 for J := Low(TStaticArray[I]) to High(TStaticArray[I]) do begin 32 Writeln(TStaticArray[I][J]); 33 end; 34 35 end; 36 end; 37 38 begin 39 // TStringDynamic_Array2(); 40 TStringStatic_Array3(); 41 Readln; 42 end.
七、基础练习
1 type 2 {定义一个学生的信息的记录类型} 3 TStudent = record 4 Id: string; //学号 5 Name: string; //姓名 6 end; 7 8 {数组存储信息} 9 TStudentList = array of TStudent; 10 var 11 Student: TStudent; 12 Studentlist : TStudentList; 13 14 {查看菜单} 15 procedure ShowMemo(); 16 begin 17 Writeln(‘‘); 18 Writeln(‘*****Memo*****‘); 19 Writeln(‘1、增加‘); 20 Writeln(‘2、查询‘); 21 Writeln(‘3、修改‘); 22 Writeln(‘4、删除‘); 23 Writeln(‘‘); 24 end; 25 26 {添加用户信息} 27 procedure AddStudent(); 28 var 29 UserName : string; 30 ArrayLength : Integer; 31 Uuid:TGUID; //生成一个唯一标识 32 begin 33 Writeln(‘您选择了增加功能,请输入学生姓名‘); 34 Readln(UserName); 35 Student.Name := UserName; 36 ArrayLength := Length(Studentlist); 37 CreateGUID(Uuid); 38 Student.Id := GUIDToString(Uuid); 39 // Writeln(GUIDToString(Uuid)); //输出Uuid 信息 40 41 Insert(Student,Studentlist,ArrayLength-1); //添加 42 if (Length(Studentlist)>ArrayLength) then begin 43 Writeln(‘添加成功!‘); //输出Uuid 信息 44 end else begin 45 Writeln(‘添加失败‘); 46 end; 47 48 end; 49 50 {查询用户信息} 51 procedure SelectStudent(); 52 var 53 Student1 : TStudent; 54 begin 55 Writeln(‘您选择了查询功能,查询结果如下:‘); 56 for Student1 in Studentlist do begin 57 with Student1 do begin 58 Writeln(‘姓名:‘,Name,#$09,‘编号:‘,Id); 59 end; 60 end; 61 end; 62 63 {删除用户信息} 64 procedure DeleteStudent(); 65 var 66 Student2 : TStudent; 67 DelUserName : string; 68 IsTrue : string; 69 Indexs : Integer; 70 ArrayLength : Integer; 71 begin 72 Writeln(‘您选择了删除功能,请输出删除名字‘); 73 Readln(DelUserName); 74 Indexs := 0; 75 {获取删除之前的数据总和} 76 ArrayLength := Length(Studentlist); 77 for Student2 in Studentlist do begin 78 with Student2 do begin 79 if (DelUserName=Name) then begin 80 {删除操作需要谨慎,需要用户二次确认} 81 Writeln(‘您确认删除‘,Name,‘,‘,Id,‘信息吗?Y/N‘); 82 Readln(IsTrue); 83 if (IsTrue = ‘Y‘) then begin 84 Delete(Studentlist,Indexs,1); 85 {删除后,比对元素总数,判断是否成功} 86 if (Length(Studentlist) > ArrayLength) then begin 87 Writeln(‘删除成功‘); 88 end 89 else begin 90 Writeln(‘删除!‘); 91 end; 92 end; 93 Exit; 94 end; 95 end; 96 Inc(Indexs); //每次增加1 97 end; 98 end; 99 100 {更新/修改} 101 procedure UpdateUser(); 102 var 103 Uname : string; 104 I : Integer; 105 IsExist : Boolean; 106 begin 107 IsExist := False; {默认不存在这条信息} 108 Writeln(‘您选择了修改功能,请输出需要的用户姓名:‘); 109 Readln(Uname); 110 {遍历数组,查询需要修改的数据} 111 for I := Low(Studentlist) to High(Studentlist) do begin 112 with Studentlist[I] do begin 113 if (Uname = Name) then begin 114 Writeln(‘请输出新的名字‘); 115 Readln(Uname); //重新给Uanme 赋值 116 Name := Uname; 117 IsExist := True; 118 Break; 119 end; 120 end; 121 end; 122 if (IsExist = False) then begin 123 Writeln(‘此信息不存在‘); 124 end; 125 end; 126 127 {用户选择功能} 128 procedure UserChoose(); 129 var 130 UserChooseIndex: Integer; 131 begin 132 Writeln(‘请输入你的功能选项:‘); 133 {获取用户输入编号} 134 Readln(UserChooseIndex); 135 {判断用户输入编号} 136 case UserChooseIndex of 137 1: 138 begin 139 AddStudent(); 140 end; 141 2: 142 begin 143 SelectStudent(); 144 end; 145 3: 146 begin 147 UpdateUser(); 148 end; 149 4: 150 begin 151 DeleteStudent(); 152 end; 153 154 else 155 begin 156 Writeln(‘请输出正确的功能编号‘); 157 end; 158 end; 159 end; 160 161 begin 162 {初始化学生信息列表} 163 Studentlist := []; 164 {无限循环} 165 while True do 166 begin 167 ShowMemo(); 168 UserChoose(); 169 end; 170 Readln; 171 end.
以上是关于Delphi-基础(常量集合数组[动态数组多维数组])的主要内容,如果未能解决你的问题,请参考以下文章