一、常量

  1、常量定义:一开始定义好的值,以后在程序的运行过程中不允许改变

 const
Pi : Double = 3.141592; //定义为常量
{常量的定义方式,可以不进行类型的声明,编译器会根据具体值决定常量的的类型}
Pi2 = 3.1415;

2、常量使用  

  枚举:常量集
  type
  枚举名=(标识符1,标识符2,标识符3,......)

 type
{正常情况下,枚举类型的索引是从0开始}
EColors = (RED,GREEN,BLUE);
EWeek = (SUN=,MON=,TUE=,WED=,THU=,FRI=,SAT=);
var
Color : EColors;
Week : EWeek; begin
Color := EColors.RED;
Week := EWeek.SUN;
Writeln(Ord(Color),',',Ord(Week));
REDln;
end.

二、子界

  使用:为了防治出现越界
  注意事项:
  1、子界要求上界和下界必须是有序的数据类型 整数、字符、枚举
  2、子界的上界大于或者等于下界

  格式:type 子界

 {定义格式}
type
{枚举}
EColors = (RED,GREEN,BLUE);
{子界}
TSubBoundNumber = ..;
TSubBoundChar = 'a'..'z'; begin
Writeln(Low(TSubBoundNumber)); //下界
Writeln(High(TSubBoundChar)); //上界
REDln;
end.

打印出闰年还是平年,每个月的天数和所属季节

 {打印出闰年还是平年,每个月的天数和所属季节}
type
{子界}
TSubBoundMonths = ..;
{枚举}
ESeason = (Spring,Summer,Autumn,Winter); var
Season : ESeason;
Month : TSubBoundMonths;
User_Year:Integer;
Is_Leap_Year:Boolean;
User_Month : Integer; procedure SubBound();
begin
Writeln('请输入一个年份:');
REDln(User_Year);
{默认为闰年}
Is_Leap_Year := True;
while Is_Leap_Year do
begin
if (User_Year mod ) = then begin
if not((User_Year mod ) = ) then begin
Writeln('闰年',User_Year);
Is_Leap_Year := False;
end;
end;
if (User_Year mod ) = then begin
Writeln('闰年',User_Year);
Is_Leap_Year := False;
end
else begin
Is_Leap_Year := False;
Writeln('平年',User_Year) end;
end; end;
procedure Months();
begin
{季节}
Writeln('请输入一个月份:');
REDln(User_Month);
begin
if (User_Month >= Low(TSubBoundMonths)) and (User_Month <= High(TSubBoundMonths)) then
if (User_Month >= ) and (User_Month <= ) then begin
Writeln('当前季节为春季');
case User_Month of
: begin
Writeln('31天');
end;
: begin
if Is_Leap_Year then begin
Writeln('29天');
end else begin
Writeln('28天');
end;
end;
: begin
Writeln('31天');
end;
end;
end; end;
end; begin
// Writeln(Low(TSubBoundNumber)); //下界
// Writeln(High(TSubBoundChar)); //上界 SubBound();
Months();
REDln;
end.

三、集合

集合是由具有某些共同特征的元素结构的一个整体。在pascal中,一个集合是由一有序类型的一组数据元素组成,者一有序类型成为该集合的而基本类型。

集合定义:

 type
<类型名称>=set of<基类型>;

声明集合的变量(可使用集合类型的名称来声明,也直接利用集合类型的本身来声明)

 Var
Vset1:set1;
Vset2:set of byte;

注意:
1、一个集合类型的所有成员必须是同一有序类型且最多包含256个成员。
2、集合类型具有唯一性,即同一集合类型中不允许包含相同的成员。
3、集合类型成员具有无序性,其中的成员没有序数。无法向枚举型一样用序数标识集合成员。
4、集合类型的值域由BaseType 的值域决定。

集合定义方式

 {定义方式}
type {type主要作用是让用户可以自定义类型}
TMySet = set of Char;
TMySet1 = set of 'a'..'z';
var
TMySet2 : set of 'a'..'z';

集合示例

 uses
System.SysUtils,System.TypInfo; type
{定义一个枚举}
TColors = (RED,GREEN,BLUE);
type
TSetColors = set of TColors;
var
sc : TSetColors;
indexs : Integer;
procedure set_test1;
begin
for indexs := Ord(Low(TColors)) to Ord(High(TColors)) do begin Writeln(GetEnumName(TypeInfo(TColors),indexs)) //显示枚举内信息
end; end;
begin
{遍历集合元素:无序的}
set_test1();
Readln;
end.

四、数组

数组:按照一定编号存放了一堆类型相同数据的容器

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

注意事项
1、数组在使用之前必须要声明长度(下标、元素总数)

 type   {定义变量}
MyArray = array[..] of Char;
var {变量声明}
NameArray : MyArray;
Indexs : Integer; {静态数组元素遍历}
procedure MyProc;
begin
NameArray[] := 'a';
NameArray[] := 'b';
NameArray[] := 'c';
NameArray[] := 'd';
for Indexs := Low(NameArray) to High(NameArray) do begin
Writeln(NameArray[Indexs]); //屏幕输出
end; end; type
TMyFlexibleArray = array[..] of Char;
var
TMyArray : TMyFlexibleArray;
Elem : Char; //与数组类型保持一致
procedure MyProc1;
begin
TMyArray[] := 'a';
TMyArray[] := 'b';
TMyArray[] := 'c';
TMyArray[] := 'd';
for Elem in TMyArray do //取数组里面的元素
begin
Writeln(Elem); //输出数组中的具体元素
end;
Writeln(Length(TMyArray)); //取数组最大可用数(可用元素) end; begin
// MyProc();
MyProc1();
Readln;
end.

五、动态数组

 {动态数组}
type
StringArray = array of string;
var
NArray : StringArray;
NameArray1 : StringArray;
Indexs1 : Integer;
Elem1 : string; procedure Dynamic_MyProc1;
begin
SetLength(NArray,); //设置长度,并未创建元素 NameArray1 := StringArray.Create('xiaoqian','xiaoming'); //创建数组,设置长度
NameArray1 := ['xiaoming','xiaoyang','xioaogang']; ////创建数组,设置长度
// Writeln(Length(NArray),',',Low(NArray));
Writeln(Length(NameArray1),',',Low(NameArray1));
{遍历1数组 for to }
for Indexs1 := Low(NameArray1) to High(NameArray1) do begin
Writeln(NameArray1[Indexs1]);
end;
{遍历2数组 for in}
for Elem1 in NameArray1 do
begin
Writeln(Elem1);
end;
end; begin Dynamic_MyProc1();
Readln;
end.
 {动态数组2}
type
StringArray1 = array of string;
var
NameArray2 : StringArray1;
AddressArray : StringArray1;
DataArray : StringArray1;
DataArray1: StringArray1;
Name : string;
Indexs2 :Integer;
NameArray3 : StringArray1; procedure Dynamic_MyProc2;
begin
NameArray2 := ['北京','南京','天津'];
AddressArray := ['林志玲','萧蔷'];
{Concat 连接连个数组}
DataArray := Concat(NameArray2,AddressArray); {拷贝数组,High(DataArray1),Copy含头不含尾}
for Name in DataArray do begin
// Writeln(Name) //北京 南京 天津 林志玲 萧蔷
end; DataArray1 := Copy(DataArray,Low(DataArray),High(DataArray));
for Indexs2 := Low(DataArray1) to Length(DataArray1) do begin
// Writeln(DataArray1[Indexs2]) //北京 南京 天津 林志玲 萧蔷
end; {Insert插入}
NameArray3 := ['','']; //等待插入的数据
Insert(NameArray3,DataArray,);
for Name in DataArray do begin
// Writeln(Name) //北京 南京 天津 林志玲 萧蔷 11 22
end; {Delete删除}
Delete(DataArray,Length(DataArray)-,Length(DataArray));
for Name in DataArray do begin
Writeln(Name) //北京 南京 天津 林志玲 萧蔷
end; end; begin Dynamic_MyProc2();
Readln;
end.

六、多维数组

 {多维数组:1、静态多维数组 2、动态多维数组}
type
{声明一个动态的二位数组}
TStringDynamicArray2 = array of array of string;
{声明一个静态二维数组}
TStringStaticArray3 = array[..] of array[..] of string;
var
TDynamicNameArray : TStringDynamicArray2;
TStaticArray : TStringStaticArray3;
I,J : Integer;
{初始化动态二位数组}
procedure TStringDynamic_Array2;
begin
TDynamicNameArray := [['张三','李四','王五'],['成都','重庆','西安']];
{遍历二维数组}
for I := Low(TDynamicNameArray) to High(TDynamicNameArray) do begin
for J := Low(TDynamicNameArray[I]) to High(TDynamicNameArray[I]) do begin
Writeln(TDynamicNameArray[I][J]);
end; end; Writeln(TDynamicNameArray[][]);
end; {初始化静态二位数组}
procedure TStringStatic_Array3;
begin
TStaticArray[][] := '开心麻花';
for I := Low(TStaticArray) to High(TStaticArray) do begin
for J := Low(TStaticArray[I]) to High(TStaticArray[I]) do begin
Writeln(TStaticArray[I][J]);
end; end;
end; begin
// TStringDynamic_Array2();
TStringStatic_Array3();
Readln;
end.

七、基础练习

 type
{定义一个学生的信息的记录类型}
TStudent = record
Id: string; //学号
Name: string; //姓名
end; {数组存储信息}
TStudentList = array of TStudent;
var
Student: TStudent;
Studentlist : TStudentList; {查看菜单}
procedure ShowMemo();
begin
Writeln('');
Writeln('*****Memo*****');
Writeln('1、增加');
Writeln('2、查询');
Writeln('3、修改');
Writeln('4、删除');
Writeln('');
end; {添加用户信息}
procedure AddStudent();
var
UserName : string;
ArrayLength : Integer;
Uuid:TGUID; //生成一个唯一标识
begin
Writeln('您选择了增加功能,请输入学生姓名');
Readln(UserName);
Student.Name := UserName;
ArrayLength := Length(Studentlist);
CreateGUID(Uuid);
Student.Id := GUIDToString(Uuid);
// Writeln(GUIDToString(Uuid)); //输出Uuid 信息 Insert(Student,Studentlist,ArrayLength-); //添加
if (Length(Studentlist)>ArrayLength) then begin
Writeln('添加成功!'); //输出Uuid 信息
end else begin
Writeln('添加失败');
end; end; {查询用户信息}
procedure SelectStudent();
var
Student1 : TStudent;
begin
Writeln('您选择了查询功能,查询结果如下:');
for Student1 in Studentlist do begin
with Student1 do begin
Writeln('姓名:',Name,#$,'编号:',Id);
end;
end;
end; {删除用户信息}
procedure DeleteStudent();
var
Student2 : TStudent;
DelUserName : string;
IsTrue : string;
Indexs : Integer;
ArrayLength : Integer;
begin
Writeln('您选择了删除功能,请输出删除名字');
Readln(DelUserName);
Indexs := ;
{获取删除之前的数据总和}
ArrayLength := Length(Studentlist);
for Student2 in Studentlist do begin
with Student2 do begin
if (DelUserName=Name) then begin
{删除操作需要谨慎,需要用户二次确认}
Writeln('您确认删除',Name,',',Id,'信息吗?Y/N');
Readln(IsTrue);
if (IsTrue = 'Y') then begin
Delete(Studentlist,Indexs,);
{删除后,比对元素总数,判断是否成功}
if (Length(Studentlist) > ArrayLength) then begin
Writeln('删除成功');
end
else begin
Writeln('删除!');
end;
end;
Exit;
end;
end;
Inc(Indexs); //每次增加1
end;
end; {更新/修改}
procedure UpdateUser();
var
Uname : string;
I : Integer;
IsExist : Boolean;
begin
IsExist := False; {默认不存在这条信息}
Writeln('您选择了修改功能,请输出需要的用户姓名:');
Readln(Uname);
{遍历数组,查询需要修改的数据}
for I := Low(Studentlist) to High(Studentlist) do begin
with Studentlist[I] do begin
if (Uname = Name) then begin
Writeln('请输出新的名字');
Readln(Uname); //重新给Uanme 赋值
Name := Uname;
IsExist := True;
Break;
end;
end;
end;
if (IsExist = False) then begin
Writeln('此信息不存在');
end;
end; {用户选择功能}
procedure UserChoose();
var
UserChooseIndex: Integer;
begin
Writeln('请输入你的功能选项:');
{获取用户输入编号}
Readln(UserChooseIndex);
{判断用户输入编号}
case UserChooseIndex of
:
begin
AddStudent();
end;
:
begin
SelectStudent();
end;
:
begin
UpdateUser();
end;
:
begin
DeleteStudent();
end; else
begin
Writeln('请输出正确的功能编号');
end;
end;
end; begin
{初始化学生信息列表}
Studentlist := [];
{无限循环}
while True do
begin
ShowMemo();
UserChoose();
end;
Readln;
end.

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

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

    C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/ ...

  2. 由一维数组表示的N维数组实现(C++)

    工作中,经常需要表示多维数组(如二维矩阵),常见的做法是使用T **pArr: T **pArr = new T*[M];//创建二维数组[M][N] ;i<M;i++) { pArr[i] = ...

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

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  4. C语言动态生成二维数组

    # 动态创建二维数组示例 #include "stdlib.h" #include "stdio.h" #include <malloc.h> in ...

  5. C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #inclu ...

  6. 转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...

  7. 如何在C++中动态建立二维数组(转)

    http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...

  8. 消除VS中动态申请二维数组C6011,C6385,C6386的警告

    动态申请二维数组,无非就是通过指针来实现.@wowpH 过程分三步:1.申请内存,2.使用数组,3.释放内存. 代码如下: /************************************* ...

  9. C语言基础练习——最大值及其位置(二维数组)

    C语言基础练习——最大值及其位置(二维数组) 时间限制: 1 Sec  内存限制: 10 MB 题目描述 有一个n×m的矩阵,要求编程序求出: 每行元素的最大值,以及其所在的行号和列号.求出所有元素的 ...

  10. [zt]C++二维数组讲解、二维数组的声明和初始化

    定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...

随机推荐

  1. 苏州市java岗位的薪资状况(1)

    8月份已经正式离职,这两个月主要在做新书校对工作.9月份陆续投了几份简历,参加了两次半面试,第一次是家做办公自动化的公司,开的薪水和招聘信息严重不符,感觉实在是在浪费时间,你说你给不了那么多为什还往上 ...

  2. July 13th, 2018. Friday, Week 28th.

    Don't let the mistakes and disappointments of the past control and direct your future. 不要让你的未来被过去的错误 ...

  3. coco数据集标注图转为二值图python(附代码)

    coco数据集大概有8w张以上的图片,而且每幅图都有精确的边缘mask标注. 后面后分享一个labelme标注的json或xml格式转二值图的源码(以备以后使用) 而我现在在研究显著性目标检测,需要的 ...

  4. LinkCutTree学习笔记

    LinkCutTree 学习笔记 参考来源 https://www.zybuluo.com/xzyxzy/note/1027479 https://www.cnblogs.com/zhoushuyu/ ...

  5. MODBUS协议入门(转载)

    http://blog.sina.com.cn/s/blog_65ba9a5e0101df1g.html

  6. NAT技术详解

    一.IPv4协议和NAT的由来 1.IPv4协议介绍 2011年2月3日,IANA宣布:IPv4地址空间最后5个地址块已经被分配给下属的5个地区委员会.2011年4月15日,亚太区委员会APNIC对外 ...

  7. JAVA基础系列:反射

    1. 定义 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这 种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. ...

  8. 解决 cannot find reference 'LSHForest' in '__init__.py'

    from sklearn.neighbors import LSHForest cannot find reference 'LSHForest' in '__init__.py'报错 pip3 li ...

  9. 生成 RSA 公钥和私钥的方法

    在使用 RSA 加密算法时,需要使用到一对 公钥 和 私钥,生成 公钥 和 私钥 需要借助 openssl 这款工具,下载这款工具的地址如下: http://slproweb.com/products ...

  10. 十、Spring之BeanFactory源码分析(二)

    Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...