实例14 记录与集合
记录是Pascal语言的一种结构类型,相当于C语言中的struct类型,它是多种数据类型的组合,用record关键字声明,它的定义形式如下:
type
MyRec=record
aa:double;
bb:Integer;
cc:char;
end;
使用记录的方法如下:
var
Rec:MyRec;
begin
Rec.aa:=123.45;
Rec.bb:=12;
Rec.cc:='C';
end;
记录的使用方法与C语言的结构使用方法一样,先说明,后使用。使用时,用.符号连接记录名称与域:记录名.域名。
记录还有一种定义方式,如下所示:
type
Rcc=record
cc:Char;
nn:Integer;
case Integer of
0:(bb1:Integer);
1:(bb2:double);
2:(bb3:char);
end;
其中含有一个case,这里的case不代表case语句,但表达的意思与case语句相似。这个case与C语言中的Union(联合)一样,表示不同类型的数据在内存同占同一块区域,这样定义的好处是能够为记录节省存储空间。
集合可以说是记录的一种特殊形式,它也是由多个数据组成,但要求数据时有序的,比如有序的数、字符、枚举等,它规定集合元素最多不超过256个。有些数虽然是有序数,但是超过了256,也不能用集合这种方式。集合用关键字set of声明,比如下面的几种声明:
type
I_Set=set of 1..100; //集合元素从1-100
C_set=set of 'A'..'Z'; //集合元素从A-Z
N_set=set of Char; //集合元素从#0-#255;
TEnum=(aa1,aa2,aa3,aa4,aa5);
E_set=set of TEnum; //集合元素是枚举中的元素
以上的声明都是合法的,再看看下面的声明:
type
My_set1=set of 1..1000;
My_set2=set of Integer;
My_set3=set of double;
My_set4=set of string;
这4种声明都是不合法的,第一种与第二种的错误是,超过了集合规定的范围256,第三种与第四中不是有序类型。
集合如何运算?请看下面的程序代码,它将结合的几种运算方式都体现出来。
type
TA_Set=set of 'A'..'Z';
var
A_Set:TA_Set;
begin
A_Set:=['A'..'M']; //集合元素初始化
//关系运算第一种情况,是否在集合中
if 'C' in A_Set then
ShowMessage('C在集合中')
else
ShowMessage('C不在集合中');
//关系运算第二种情况,是否不在集合中
if not ('Z' in A_Set) then
ShowMessage('Z不在集合中')
else
ShowMessage('Z在集合中');
//集合中加元素的第一种方法,用Include
Include(A_Set,'O');
//集合中加元素的第二种方法,用+号
A_Set:=A_Set+['P'];
//集合中减元素的第一种方法,用Exclude
Exclude(A_Set,'B');
//集合中减元素的第二种方法,用-号
A_Set:=A_Set - ['D','E'];
//交集运算,用*号
if ['E','F','G','H'] * A_Set = ['E','F','G','H'] then
ShowMessage('交集中有E、F、G、H')
else
ShowMessage('交集中没有E、F、G、H');
end;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库