关于pascal中的boolean类型的问题(急!!!!)

来源:百度知道 编辑:UC知道 时间:2024/05/26 20:00:40
program hh;
const n=4;
var i,k:integer;
x:array[1..n] of integer;
st:string[n];
t:string[n];
procedure input;
var i:integer;
begin
write('Enter string=');readln(st);
t:=st;
end;
function place(k:integer):boolean; {这个函数怎么回事?解释一下~~~~~}
var i:integer;
begin
place:=true;
for i:=1 to k-1 do
if x[i]=x[k] then
begin place:=false; break end ;
end;
procedure print;
var i:integer;
begin
for i:=1 to n do write(t[x[i]]);
writeln;
end;
begin
input;
k:=1;x[k]:=0;
while k>0 do
begin
x[k]:=x[k]+1;
while (x[k]<=n) and (not place(k)){not place(k)到底是满足条件,还是不满足条件啊~解释一下……} do x[k]:=x[k]+1;
if x[k]>n then k:=k-1
else if k=n then print
else begin k:=k+1;x[k]:=0 end
end ;
end.

{函数place怎么回事?解释一下~~~~~}
{not place(k)

answer1:
function place(k:integer):boolean;
var i:integer;
begin
place:=true; {把place赋初值 true}
for i:=1 to k-1 do
if x[i]=x[k] then
begin place:=false; break end ; {如果x[i]=x[k],那么place赋为 false,并且退出循环}
end;
{注意,plase是一个变量!!!}
answer2:
not place(k) 指当place(k)为true时 not place(k)=false 这不关什么满不满足条件,这就是一个boolean的表达式

Place函数是判断数组X中第K个数之前有没有数和第K个数的值相同,如果有就返回值为1的BOOLEAN类型的值,没有就返回0

至于下面那个While判断 NOT Place(k) 表示Place(k)值为0 才能满足向下执行

能把原题目发下吗。。
这个函数就是boolean型的嘛。。
应该是判断如果新生成的x[k]与x[1]~x[k-1]有重复那么就把place改为false
其实place函数可以改为一个过程
最上面var里加个place:boolean;
procedure check(k:longint);
begin
place:=true;
for i:=1 to k-1 do
if x[i]=x[k] then
begin
place:=false;
break;
end ;
end;
这过程跟那个place函数没区别,只不过place函数在那句判断里打得比较方便。。而且place