一、常量
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.
View Code
三、集合
集合是由具有某些共同特征的元素结构的一个整体。在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.
View Code
四、数组
数组:按照一定编号存放了一堆类型相同数据的容器
定义
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.
View Code
五、动态数组
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.
View Code
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.
View Code
六、多维数组
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.
View Code
七、基础练习
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.
View Code