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.
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.
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.
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.
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.
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.
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.