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.

原文地址:https://www.cnblogs.com/rise-home/p/11971404.html

时间: 2024-10-11 05:27:14

Delphi-基础(常量、集合、数组[动态数组、多维数组])的相关文章

一句话动态开辟二维数组

#include<iostream> using namespace std; //动态开辟int p[4][5]数组 void main() { //为了验证正确性,我们先把开辟的一维数组赋值给 pp int *pp=new int[20]; int i=0,j=0; for(i=0;i<20;i++)//为一维数组中每一个元素赋值,并输出该元素地址 { pp[i]=i; cout<<&(pp[i])<<" ";//即 pp+i }

C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include <stdlib.h> int main() { int a1=20, a2=345, a3=700, a4=22; int b1=56720, b2=9999, b3=20098, b4=2; int c1=233, c2=205, c3=1, c4=6666; int d1=34, d2=0, d3

C语言 动态创建二维数组

/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #include <malloc.h> #define RANK 10 #define COLUMN 7 int main() { int i,j; int (*p)[COLUMN]; //动态生成二维数组,指定列数为COLUMN,如果想改,自己该里面 //的参数,如果想定义n行2列就为: p=(int (*

C++动态申请二维数组与拷贝构造函数

一.C++动态申请二维数组 在C++中不能直接动态申请二维数组,经过一番搜索,发现一种动态申请二维数组较好的方法. 代码如下(MATRIX_TYPE为某一种类型,Lines和Columns): MATRIX_TYPE** elem; //C++二维矩阵动态申请空间 elem = new MATRIX_TYPE*[Lines]; elem[0] = new MATRIX_TYPE[Lines * Columns]; for(int i = 1; i < Lines; i++) elem[i] =

动态创建二维数组

vector创建二维数组 初始化二维数组 vector<vector <int> > ivec(n ,vector<int>(m)); //n*m的二维vector vector<vector <int> > ivec(n , vector<int>(m, 0)); //n*m的二维vector,所有元素为0 动态创建m*n的二维 方法一: vector<vector <int> > ivec; ivec.re

C++中动态申请二维数组并释放方法

C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/delete (3)STL容器中的vector 下面逐一介绍: 第一种:malloc/free 1.动态开辟一维数组 [cpp] view plaincopy //动态开辟一维数组 void dynamicCreate1Array() { int m; int i; int *p; printf("

【C语言】动态创建二维数组

//动态创建二维数组 #include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { int i,j; int n,m; //以n行5列为例 int (*p)[5]; printf("请输入行数:"); scanf("%d",&n); p=(int(*)[5])malloc(5*n*sizeof(int)); for(i=0;i<n;i+

动态申请 二维数组 以及初始化、 赋值

二维堆数组 可以利用指针的指针 例如 int ** array = new int[i][j]; 但是这样不能通过编译,因为堆数组不像基于栈数组那样工作,为其分配的内存是不连续的,因此堆数组分配足够的内存是不对的,应当先分配基于堆数组第一维数组下标分配一个连续的数组.该数组的每一个元素实际上是指向一个数组的指针. 一个测试小例: #include <iostream> #include <stdio.h> #include <cstring> using namespa

c++ 动态创建二维数组

为了做一个东西需要用到动态创建二维数组,特此记录. #include <iostream> #include "time.h" using namespace std; int main() { srand((unsigned)time(NULL)); int x_num; int y_num; cout<<"please input x_num:"; cin>>x_num; cout<<"please in

动态申请二维数组

int main() {int **p;int m,n; cout << "请输入行数和列数:" << endl;cin >> m >> n; p = new int *[m]; for(int i = 0;i <= m-1;i++){    p[i]=new int[n];} for(int row = 0;row <= m-1;row++){    for(int col = 0; col <= n-1;col++)