Pascal 字节集,a和b的值是多少

Pascal 字节集,a和b的值是多少,pascal,freepascal,Pascal,Freepascal,有人能给我解释一下这段代码是怎么回事吗。我知道c=3,但不明白a和b的值是多少?尝试writeln(a,b)但给了我一个错误…好的,我将解释您可能通过调试或简单地阅读有关Pascal的教科书来发现的问题: 该行: program Project1; var a,b:set of byte; c:set of byte; i:integer; begin a:=[3]; b:=[2]; c:=(a+b)*(a-b); FOR i:= 0 TO 5 DO

有人能给我解释一下这段代码是怎么回事吗。我知道c=3,但不明白a和b的值是多少?尝试
writeln(a,b)但给了我一个错误…

好的,我将解释您可能通过调试或简单地阅读有关Pascal的教科书来发现的问题:

该行:

program Project1;
var 
  a,b:set of byte;
  c:set of byte;
  i:integer;

begin
  a:=[3]; 
  b:=[2]; 
  c:=(a+b)*(a-b);
  FOR i:= 0 TO 5 DO
    IF i IN c THEN write(i:2);
  readln;
end.
是否有下列情况:

c := (a+b)*(a-b);
比如说,
x:=a+b;y:=a-b,则可以按如下方式取消:

a + b is the union of the two sets, i.e. all elements that are 
      in a or in b or in both, so here, that is [2, 3];
a - b is the difference of the two sets, i.e. it is a minus the
      elements of a that happen to be in b too. In this case, no 
      common elements to be removed, so the result is the same as a, 
      i.e. [3]
x * y is the intersection of the two sets, i.e. elements that are in 
      x as well as in y (i.e. a set with the elements both have in common).

你用谷歌搜索过帕斯卡集吗
+
给出两个集合的并集,
-
给出两个集合的差,
*
给出两个集合的交集。了解操作员是什么。然后看看每个子表达式。什么是a+b?什么是a-b。这些中间值的乘积是什么。不要不努力就放弃。没有调试就不要放弃。老实说,今天有很多人认为,与其调试自己的程序,不如在这里提问。你为什么不调试?你有调试器吗?若否,原因为何?如果是,请使用它。您希望从
writeln(a,b)
中学到什么
a
b
只设置了一次,之后再也不会更改,所以您不希望它们的值与您设置的值相同吗?无论如何,
a
b
c
都是集合,您不能直接编写“集合”类型。当你说的时候,我知道
c=3
这不是真的,因为
c
是一个集合,但3不仅仅是一个数字。您知道的是
i=3
i
在0和5之间的唯一值,其中
i
c
集中(如果您考虑
for
循环)。FWIW,
c=3
是错误的。它应该是
c=[3]
3
是一个元素,
[3]
是一个只有一个元素的集合。FWIW,我这个年龄(57岁)及以下的大多数人在学校都应该有某种集合理论,例如借助于Venn图。非常感谢!有人能推荐一个免费的好的在线笔记本,我可以从中学习帕斯卡语吗?
x := a + b; // [3] + [2] --> [2, 3]
y := a - b; // [3] - [2] --> [3]
c := x * y; // [2, 3] * [3] --> [3]