一、常量

  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.

最新文章

  1. Nginx中文详解、配置部署及高并发优化
  2. nRF51822之模拟IIC
  3. Linux基础 30分钟GDB调试快速突破
  4. 结合源码看nginx-1.4.0之nginx模块组织结构详解
  5. C#让程序自动在管理员权限下运行
  6. Spark笔记--使用Maven编译Spark源码(windows)
  7. 最简单的ASP动态页面生成伪静态方法
  8. Mysql SlowLog 工具 pt-query-diglist
  9. oninput,onpropertychange,onchange的使用方法和差别
  10. [Effective Modern C++] Item 3. Understand decltype - 了解decltype
  11. 一.HttpClient、JsonPath、JsonObject运用
  12. 解决clipboard手机端无法复制的一种思路
  13. 图文详解linux/windows mysql忘记root密码解决方案
  14. nyoj1246 逃离妖洞 BFS
  15. 关于工作中Git相关的总结
  16. OpenAI dota2大战人类顶尖选手视频
  17. [PHP] 算法-顺时针打印矩阵的PHP实现
  18. oracle左连接连表查询
  19. vue.js生命周期钩子函数及缓存
  20. Solidity数组

热门文章

  1. 扎西平措 201571030332 《面向对象程序设计(java)课程学习进度条》
  2. layUI学习第一日:myeclipse中使用layUI
  3. luoguP3306 [SDOI2013]随机数生成器
  4. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) E. Rock Is Push dp
  5. js json字符串与json对象互相转换(最全)
  6. spring context:component-scan
  7. vue项目打包之后样式错乱问题,如何处理
  8. Vue.js 源码分析(二十二) 指令篇 v-model指令详解
  9. DNA Sorting POJ - 1007
  10. 搭建rsyslog日志服务器