问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

集合的定义(turbo pascal)

发布网友 发布时间:2022-05-29 04:47

我来回答

1个回答

热心网友 时间:2024-12-15 00:18

Pascal系统把具有共同特征的同一有序类型的对象汇集在一起,形成一个集合,可将集合类型的所有元素作为一个整体进行集合运算。
[例5.11]用随机函数产生20个互不相同的40到100的随机整数,然后按从小到大顺序打印。
解:按以下步骤处理:
①为使产生的随机整数互不相同。因此,每产生一个数,都要判断集合中已否包含,如果没有包含,就放到集合中,并统计个数,直到20个。
②将集合中的数移到数组中,此题利用下标序号从小到大的特征进行映射排序打印。
Pascal程序:
Program Exam511;
Uses Crt ;
Var a: Array[40..100] Of boolean;
dd: set Of 40..100; {定义集合dd}
n: Integer;
Procere Init; {定义产生并处理随机数的过程}
Var i,m: Integer;
Begin
n:=0;dd:=[ ]; {集合dd初值为空}
repeat
begin
Randomize; {将随机发生器作初始化处理}
m:=Random(100); {产生随机整数m}
if not (m in dd) and (m > 40 ) then
begin
dd:=dd+[m]; inc(n) {把m放入集合dd中}
end;
end
until n=20;
End;
Procere Print; {定义打印过程}
Var i,j,k:Integer;
Begin
fillchar(a,sizeof(a),false); {将数组a的各元素置false值}
For i:=40 To 100 Do
if i in dd then a[ i ]:=true; {以集合元素值为下标的数组元素赋真值}
For i:=40 To 100 Do {以下标号为序(从小到大)输出}
If a[ i ] Then Write(i:4); {输出a数组中元素值为真的下标号}
End;
Begin {主程序}
Clrscr;
init; {产生随机数,并存入集合中}
print; {打印}
Repeat Until KeyPressed;
End.
程序中定义了集合类型DD,集合的元素为子界类型。
Var 集合变量名:set of 元素的类型;
定义集合类型的一般格式是:
集合的值放在一对方括号中,各元素用逗号隔开,与排列的顺序无关,因此,[9,2,5]和[2,5,9]的值相等,没有任何元素的集合是空集合,用[ ]表示。如果集合的元素是连续的,可用子界表示,如[5,6,7,8,9]可表示为[5 .. 9] 。
集合变量名:= 集合表达式;
集合的赋值格式为:
集合有以下几种运算:
1.集合的交、并、差运算:(设两个集合 a:=[1,2,4,6] 和 b:=[4,6,7,8] )
①集合的并: a+b即组合成新的集合(为[1,2,4,6,7,8]);
②集合的交: a*b即将a,b集合中的公共元素组合成新的集合(为[4,6,]);
③集合的差: a-b即在a中的元素去掉在b中出现的之后,所剩下的集合(为[1,2])。
2.集合的比较:
①相等:a=b,若两个集合中的元素个数相等,每个元素相同,则两个集合相等,比较结果为真(ture),否则为假(false);
②不等:a < > b表示两个集合不相等;
③包含:a > = b表示a集合包含b集合中的所有元素;
a < = b表示a集合是b集合的子集。
3.集合的测试运算:检查某个数据在集合中,测试结果为ture;不在集合中,测试结果为false;例如:
6 in [8,6,9,4] 结果为ture; { 6在集合[8,6,9,4]中为真 }
2 in [8,6,9,4] 结果为false; { 2在集合[8,6,9,4]中为假 }
从程序Exam511的输出部分可看到,集合类型的值不能直接输出,要用测试方法进行输出或转换成数组元素的值。
[例5.12]用集合进行筛法求200以内的素数。
解:①将[2..200]放入集合S中;
②取S中的第一个元素值nxt,放入集合P中,同时将S中的凡是nxt的倍数的元素全部“划”去;
③重复步骤②,直至S集合为空;
④用测试运算打印P集合中全部元素值。
Pascal程序:
Program Exam512;
Uses crt;
const n=200;
var s,p: set of 2..n; { s,p为集合类型}
nxt,j,t: byte;
begin
clrscr;
s:=[2..n]; {将[2..n]赋给s}
p:=[ ];
nxt:=2; t:=0;
repeat
while not(nxt in s) do
nxt:=succ(nxt); {后继函数}
p:=p+[nxt]; j:=nxt; {将nxt放入P中}
while j<=n do
begin
s:=s-[j]; inc(j,nxt) {筛掉S中的处理过的元素}
end;
if nxt in p then {用测试运算进行输出}
begin
inc(t); write(nxt :6);
if t mod 6=0 then writeln
end;
until s = [ ];
readln
end.
集合内的元素个数不能超过255个,如果要用超过255个成员的集合类型求素数,必须用小集合的数组来表示大集合,即把大集合分成若干个小集合,每个小集合只是数组的元素,(数组元素为一个小集合)整个数组就是一个大集合。筛法运用在每个数组元素(小集合)中进行。
[例5.13]将自然数1--9这九个数分成三组,将每组的三个数字拼成为三位数,每个数字不能重复,且每个三位数都是完全平分数。请找出这样的三个三位数。
解:①自定义函数yes,用集合判定九个数字是否有重复,采用逆向思维,假设做邓了三个三位完全平方数:
将三个三位完全平方数分离成单个数字放入集合dd中,检查集合dd,如果自然数1~9每个数恰好都在集合dd中,函数yes赋真(ture) ;只要有一个不在集合中,九个数字没有占完集合中的九个位置,则必有重复,函数值为假(false),因为集合中对相同数字视为同一成员,如果有重复,则集合中不足9个成员(用测试运算)。
②程序用1131平方产生三位的完全平方数。用循环方式每次取三个数为一组,存入a数组。
③对a数组的三位数调用自定义函数yes处理;
④如果函数yes值为真,就打印a数组中的三个数。
Pascal程序:
Program exam513;
Uses Crt;
Var a: Array[1..3] Of Integer;
i, j, k, x: Integer;
Function yes: Boolean; {处理是否有重复数字}
Var i: Integer;
d: Set Of 0 .. 9; {集合元素为子界类型}
Begin
d:=[ ]; {集合的初值为空集合}
For i:=1 To 3 Do {将a数组中三个数分离成单个数并放入集合d}
d:=d+[a[ i ] Div 100, (a[ i ] Mod 100) Div 10, a[ i ] Mod 10];
yes:=true;
For i:=1 To 9 Do
If Not ( i In d ) Then yes:=false; {只要有一个不在集合中即为假}
End;
Begin
writeln;
or i:=11 to 29 do {在三位完全平方数范围内循环推出三个数}
Begin
a[1]:=i*i; {第一个三位的完全平方数}
for j:=i+1 to 30 do
begin
a[2]:=j*j; {第一个三位的完全平方数}
for k:=j+1 to 31 do
begin
a[3]:=k*k; {第一个三位的完全平方数}
If yes Then {调用自定义yes函数结果为真就输出}
For x:=1 To 3 Do Writeln( x:8, ':', a[x]:8 );
end
end
end;
Repeat Until KeyPressed;
End.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
轻度慢性萎缩性胃炎 活动期,伴轻度肠 化 胃角多发糜烂。医生说了我... 胃窦粘膜慢性轻度萎缩性炎伴轻度肠化胃窦粘膜慢性轻度萎缩性炎? 芬兰留学读研费用是多少 芬兰留学读研时间 去芬兰留学学费生活费一年要多少 芬兰留学读研费用是多少? 芬兰留学读研学费多少? 感冒好多天了,可不可以打蓝球或者其它运动出出汗啊? 感冒打喷嚏,鼻塞然后可以让自己多出出汗吗 宝宝感冒了能去游泳吗 附近冷库出租电话? 冷藏库怎么出租 首都机场附近哪里有小型冷库出租?最好是15㎡左右的,温度要求-18度... 我有一套小型冷库不知道做什么生意合适? 哪里有出租冷库的,十几个平方就可以 苏州同里有小冷库出租吗? 大家好,我有个小冷库,容量18立方米,想出租,不知道什么价格,电费怎样... 梓涵怎么读 志与梓读音一样吗 幸拼音组词 有机山茶油明贡源炒菜对人身体好吗? 有机山茶油正确吃法 ga高热量食物有哪些 在生活中高热量的食物有什么? 高热量的食物有哪些,请说二十个 为什么我没有QQ邮箱 2016 《关于新形势下党内政治生活的若干准则》试题及答案 ...关于新形势下党内政治生活的若干准则》、修订《党内监督条例》,重 ... 党内政治生活若干准则和党内监督条例的区别 关于新形势下党内政治生活的若干准则中国共产党党内监督条例这两个文件... 考生自己设定全集u 和另两个不同的非空集合 a b , ,并计算 a b ∩... 自然数概念的一般概念 伪装地理位置软件怎么用 对于集合A,如果定义了一种运算“⊕”,使得集合A中的元素间满足下列4个... ...等于{1,2,3,4,5,6}的集合M的个数是? A,5 b.6 c. 7 d, 8 开了qq绿钻可以下载(离线)听付费歌曲嘛?或者有没有更划算的一些办法,求... 绿钻能不能播放qq音乐付费歌曲 QQ音乐买了绿钻之后能听收费的歌吗 东北财经大学金融学考研有哪些教材,专业课考哪些内容,有什么合适的参考... 求东北财经大学金融学研究生学哥学姐告诉一下专业课需要考什么,准备什 ... 东北财经大学金融工程研究生的专业课都考什么啊? ...绑定一个淘宝号,那么解绑之后,这个手机号还能再注册新淘宝号吗... 大二金融专业(东北财经大学)应该考哪些证,要考研的话应该从什么时候开始... 支付宝和淘宝手机解绑后能用该手机注册另一个淘宝和支付宝账号吗 狗狗可以上轻轨吗? 坐轻轨可以带宠物吗 轻轨和火车上能带小宠物狗吗? 轻轨上能带狗吗 重庆宠物小狗可以上轻轨吗 在重庆 现在狗狗可以上轻轨么?