Delphi-基础(常量、集合、数组[动态数组、多维数组])
一、常量
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-基础(常量、集合、数组[动态数组、多维数组])的更多相关文章
- C++中动态申请二维数组并释放方法
C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/ ...
- 由一维数组表示的N维数组实现(C++)
工作中,经常需要表示多维数组(如二维矩阵),常见的做法是使用T **pArr: T **pArr = new T*[M];//创建二维数组[M][N] ;i<M;i++) { pArr[i] = ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- C语言动态生成二维数组
# 动态创建二维数组示例 #include "stdlib.h" #include "stdio.h" #include <malloc.h> in ...
- C语言 动态创建二维数组
/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #inclu ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- 如何在C++中动态建立二维数组(转)
http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...
- 消除VS中动态申请二维数组C6011,C6385,C6386的警告
动态申请二维数组,无非就是通过指针来实现.@wowpH 过程分三步:1.申请内存,2.使用数组,3.释放内存. 代码如下: /************************************* ...
- C语言基础练习——最大值及其位置(二维数组)
C语言基础练习——最大值及其位置(二维数组) 时间限制: 1 Sec 内存限制: 10 MB 题目描述 有一个n×m的矩阵,要求编程序求出: 每行元素的最大值,以及其所在的行号和列号.求出所有元素的 ...
- [zt]C++二维数组讲解、二维数组的声明和初始化
定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...
随机推荐
- grep: /usr/include/php/main/php.h: No such file or directory
异常 grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/include/php/Zend/zend_mod ...
- 1.Java基础_Java核心机制简介
Java的两种核心机制 Java虚拟机机制 Java垃圾回收机制 解释名词 J2SDK&JRE: J2SDK=JDK=Software Development Kit(软件开发包) JRE=J ...
- aiohttp_spider
aiohttp_spider_def: import asyncio import re import aiohttp import aiomysql from pyquery import PyQu ...
- Xmind最新的安装与破解教程
参考链接:https://www.jianshu.com/p/e1693dad4dde Tips: hosts文件的默认位置:C:\Windows\System32\drivers\etc
- Flink/CEP/规则引擎/风控
基于 Apache Flink 和规则引擎的实时风控解决方案 对一个互联网产品来说,典型的风控场景包括:注册风控.登陆风控.交易风控.活动风控等,而风控的最佳效果是防患于未然,所以事前事中和事后三 ...
- 最短路问题的三种算法&模板
最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...
- web 服务
package main import ( "strings" "fmt" "net/http" "log" ) fun ...
- SecureCRT 8.1工具下载和破解附Xshell6
附教程:https://jingyan.baidu.com/article/eae078275917861fec548592.html 这一篇教程实际上已经说得非常明确了,只需要把注册机放在和secu ...
- 【转】 AOP(面向切面编程)、Filter(过虑器)、Interceptor(拦截器)
AOP(面向切面编程) 面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承.多态和封装.而封装就要求将功能分散到不同的对象中去,这在软 ...
- 'GL_EXT_shader_framebuffer_fetch' : extension is not supported
在使用安卓模拟器加载Flutter应用时, 提示'GL_EXT_shader_framebuffer_fetch' : extension is not supported: D/skia (1404 ...