问一个关于pascal编程的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 00:19:57
问题在这里:
1. while not(nxt in s) do 这个句子中 nxt=2 s集合中有2那么 not(nxt in s) 怎么会为true 这个循环怎么进行?
2.最后如何删除元素2使s为空集
用集合进行筛法求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;

1、集合元素应该用[]括起来,所以这一句应该改成
while not([nxt] in s)
这样就没问题了。
2、程序中所有的nxt in s都改成[nxt] in s,这样子第一次循环时2这个元素就已经从集合中删除了。
关于集合的介绍,也许对你有帮助:
集合是由具有某些共同特征的元素构成的一个整体。在pascal中,一个集合是由具有同一有序类型的一组数据元素所组成,这一有序类型称为该集合的基类型。

(一)集合类型的定义和变量的说明
集合类型的一般形式为:
set of <基类型>;
说明: ①基类型可以是任意顺序类型, 而不能是实型或其它构造类型。同时,基类型的数据的序号不得超过255。例如下列说明是合法的:
type letters=set of 'A'..'Z';
numbers=set of 0..9;
s1=set of char;
ss=(sun,mon,tue,wed,thu,fri,sat);
s2=set of ss;
②与其它自定义类型一样, 可以将类型说明与变量说明合并在一起.如:
type numbers=set of 0..9;
var s:numbers;
与 var s:set of 0..9;等价。

(二)集合的值
集合的值是用"〔"和"〕"括起来,中间为用逗号隔开的若干个集合的元素。如:
[] 空集
[1,2,3]
['a','e','i','o','u']
都是集合。
说明:
①集合的值放在一对方括号中,各元素之间用逗号隔开。
②在集合中可以没有任何元素,这样的集合称为空集。
③在集合中,如果元素的值是连续的,则可用子界型的表示方法表示。例如: