free pascal的一个集合(set of)最多可放多少个整数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了free pascal的一个集合(set of)最多可放多少个整数?相关的知识,希望对你有一定的参考价值。
放integer/longint/int64都是32767个吗?
补充:诸位的说法有上机实际验证的方法吗?
9.1 集合
9.1 集合
1.集合的定义:
type 类型名=set of 基类型
例如:
type
num=set of char;
var
n:num;
或
var
n: set of char;
2.集合的表示:
用一组方括号括号一组元素来表示,元素之间用逗号分隔。如:
[A,B,C,D]--有四个枚举量的集合
['A','B','C','D']--有四个字符的集合
[1..20]--包含了1到20中所有整数的集合
[0]--只有一个元素0的单元素集
[]--空集
3.集合的运算:
(1)并(a+b):属于a或属于b
[0..7]+[0..4]的值为[0..7]
(2)交(a*b):既属于a又属于b
[0..7]*[0..4]的值为[0..4]
(3)差(a-b):属于a但不属于b
[0..7]-[0..4]的值为[5..7]
(4)相等(a=b):a,b的元素完全一样
[0..7]=[0..4]的值为false
(5)不等(<>):元素不一样
[0..7]<>[0..4]的值为true
(6)包含于(<=):
[0..7]<=[0..4]的值为false
(7)包含(>=):
[0..7]>=[0..4]的值为true
(8)成员(in):
1 in [0..4]的值为true
4.注意事项:
(1)集合运算相当快,在程序中常用集合表达式来描述复杂的测试。如
A)条件表达式: (ch='T') or (ch='t') or (ch='Y') or (ch='y') 可用集合表达式表示为:
ch in ['T','t','Y','y']
B)if (ch>=20) and (ch<=50) then ...;
可写成:
if ch in [20..50] then ...;
(2)集合类型是一种使用简便,节省内存面又运算速度快的数据类型。
(3)Turbo Pascal规定集合的元素个数不超过256个(当实际问题所需的元素个数大于256时, 可采用布尔数组代替集合类型)。所以如下定义是错误的: var i: set of integer;
(4)集合类型变量不能进行算术运算,了不允许用读/写语句直接输入/输出集合。 所以集合的建立:
A)要通过赋值语句实现;
B)或先初始化一个集合,然后通过并运算向集合中逐步加入各个元素.
(5)集合元素是无序的,所以ord,pred和succ函数不能用于集合类型的变量。
练习:
编程读入两个字符串,然后输出如下信息:
(1)出现在某一个字符串中至少一次的字母和数字;
(2)同时出现在两个字符串中至少一次的字母和数字;
(3)出现在一个字符串中而不出现在另一个字符串中的字母和数字;
(4)不出现在任何字符串中的字母和数字。
返回 参考技术A 只能放byte 0..255
或 char 单个字符
最大到255本回答被提问者采纳 参考技术B 集合貌似最多只能放255个 参考技术C 32767个
Free Pascal 多接口问题
【中文标题】Free Pascal 多接口问题【英文标题】:Free Pascal multiple interfaces problem 【发布时间】:2011-08-27 23:56:38 【问题描述】:这可能很困难——我在一个对象上使用了多个 CORBA 接口,所以它看起来像这样:
TBaseObject = class(TSuperBaseObject, IInterfaceA)
function Afunction; // implemented from IInterfaceA
end;
TOtherObject = class(TBaseObject, IInterfaceB);
function Bfunction; // implemented from IInterfaceB
end;
现在我有一个接受变体的函数,如果该变体是一个对象,它假定该对象是一个 IInterfaceA 对象:
case var.vtype of
...
vtObject : begin
Something := (var.vObject as IInterfaceA).AFunction; (1)
end;
end;
现在,一旦我运行该代码并将 TOtherObject 传递给函数,在第 (1) 行中,BFunction 会被强制参数调用!
我做错了什么还是编译器中的错误?另外,有什么明智的方法可以在不改变类结构的情况下绕过它?
如果有人想尝试,请提供 EAccessViolation 的完整代码 - http://pastebin.com/D7sDpDHx
【问题讨论】:
【参考方案1】:将此作为错误报告给 FPC 错误跟踪器 - http://bugs.freepascal.org/view.php?id=20076
事实证明,FPC 在内部无法识别 CORBA 接口。要解决问题,需要自己识别它们:
type IInterfaceA = interface['interface_a']
function AFunction;
end;
然后as
关键字将起作用。
【讨论】:
【参考方案2】:不确定FreePascal,但在Delphi中你会使用supports函数来查询接口。
var
IntfA : IInterfaceA;
IntfB : IInterfaceB;
begin
case var.vtype of
...
vtObject : begin
if supports(var.vObject,IInterfaceA,IntfA) then
Something := IntfA.AFunction
else if supports(var.vObject,IInterfaceB,IntfB) then
Something := IntfB.BFunction;
end;
end;
end;
【讨论】:
+1:FPC 好像没有supports 关键字,它也使用CORBA 风格的接口,不是COM,但答案让我走上了搜索的正确轨道。以上是关于free pascal的一个集合(set of)最多可放多少个整数?的主要内容,如果未能解决你的问题,请参考以下文章