一、常量

  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. 爬虫---爬取b站小视频

    前面通过python爬虫爬取过图片,文字,今天我们一起爬取下b站的小视频,其实呢,测试过程中需要用到视频文件,找了几个网站下载,都需要会员什么的,直接写一篇爬虫爬取视频~~~ 分析b站小视频 1.进入 ...

  2. mysql里字符集的配置

    [client]default-character-set=utf8[mysqld]character-set-server = utf8[mysql]default-character-set=ut ...

  3. 3.Python爬虫入门_正则表达式(简单例子)

    #2019-11-23 import requests import time import re #Python正则表达式库 if __name__=='__main__': #海量爬取图片数据 # ...

  4. 【Eureka篇三】Eureka如何管理服务调用(6)

    在Eureka Client启动时,将自身的服务的信息发送到Eureka Server.然后进行2调用当前服务器节点中的其他服务信息,保存到Eureka Client中.当服务间相互调用其它服务时,在 ...

  5. 解决VMware15 centos7 桥接模式ssh突然不能访问的问题

    因为想让虚拟机拥有自己的局域网IP, 所以用了桥接, 这样方便测试. 问题来了: 1.ssh突然连接不上了,虚拟机上的项目也无法访问了. 2.虚拟机照常联网,与主机互ping什么的也都没问题,以前从来 ...

  6. React内容

    React Fiber   16版本 registerServiceWorker 的作用 PWA  progressive web application  写手机app应用   在断网的情况下,第二 ...

  7. ESP8266 LUA脚本语言开发: 外设篇-GPIO中断检测

    https://nodemcu.readthedocs.io/en/master/modules/gpio/#gpiomode 测试引脚 GPIO0 gpio.mode(,gpio.INT) func ...

  8. Codechef September Challenge 2019 Division 2

    Preface 这确实应该是我打过的比较水的CC了(其实就打过两场) 但由于我太弱了打的都是Div2,所以会认为上一场更简单,其实上一场Div的数据结构是真的毒 好了废话不多说快速地讲一下 A Eas ...

  9. ES6中Class与export简单用法

    一.Class ES6中的Class用法类似Java的Class用法,但class的本质是js一个function //定义类 class Person { //定义构造方法 constructor( ...

  10. Entity Framework 6 中如何获取 EntityTypeConfiguration 的 Edm 信息?(一)

    1. 案例1 - 类型和表之间的EF代码优先映射 从EF6.1开始,有一种更简单的方法可以做到这一点.有关 详细信息,请参阅我的新EF6.1类型和表格之间的映射. 直接贴代码了 从EF6.1开始,有一 ...