Delphi-基礎(常量、集合、數組[動態數組、多維數組])

1、常量數組

  一、常量定義:一開始定義好的值,之後在程序的運行過程當中不容許改變ide

1 const
2   Pi : Double = 3.141592;   //定義爲常量
3   {常量的定義方式,能夠不進行類型的聲明,編譯器會根據具體值決定常量的的類型}
4   Pi2 = 3.1415;

 

二、常量使用  ui

  枚舉:常量集
  type
  枚舉名=(標識符1,標識符2,標識符3,......)spa

 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.

 

2、子界code

  使用:爲了防治出現越界
  注意事項:
  一、子界要求上界和下界必須是有序的數據類型 整數、字符、枚舉
  二、子界的上界大於或者等於下界blog

  格式: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

 

3、集合string

集合是由具備某些共同特徵的元素結構的一個總體。在pascal中,一個集合是由一有序類型的一組數據元素組成,者一有序類型成爲該集合的而基本類型。it

 

集合定義:

1 type
2 <類型名稱>=set of<基類型>;

 

聲明集合的變量(可以使用集合類型的名稱來聲明,也直接利用集合類型的自己來聲明)

1 Var
2 Vset1:set1;
3 Vset2:set of byte;

 

注意:
一、一個集合類型的全部成員必須是同一有序類型且最多包含256個成員。
二、集合類型具備惟一性,即同一集合類型中不容許包含相同的成員。
三、集合類型成員具備無序性,其中的成員沒有序數。沒法向枚舉型同樣用序數標識集合成員。
四、集合類型的值域由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

 

4、數組

數組:按照必定編號存放了一堆類型相同數據的容器

定義
array[indexType1, ..., indexTypen] of baseType;

注意事項
一、數組在使用以前必需要聲明長度(下標、元素總數)

 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

 

5、動態數組

 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

 

6、多維數組

 1 {多維數組:一、靜態多維數組 二、動態多維數組}
 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

 

7、基礎練習

  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('一、增長');
 20   Writeln('二、查詢');
 21   Writeln('三、修改');
 22   Writeln('四、刪除');
 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
相關文章
相關標籤/搜索