zoukankan      html  css  js  c++  java
  • 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.
    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
  • 相关阅读:
    sql中添加唯一索引(非主键)
    Ubuntu 安装 LAMP 主机之后运行出现乱码
    编写安全 PHP 应用程序的七个习惯
    首先在服务器上安装ssh的服务器端
    php安全简析
    正确的Linux菱形乱码修改方法
    php安全
    变量作用域
    bind9 详细解析
    DNS和DHCP服务器
  • 原文地址:https://www.cnblogs.com/rise-home/p/11971404.html
Copyright © 2011-2022 走看看