pascal的有关问题 有关Pascal中回溯的问题~

pascal\u4e2d\u6709\u5173\u6808\u7684\u95ee\u9898.

\u697c\u4e0a\u4e0d\u61c2PASCAL\u4e0d\u8981\u80e1\u4e71\u590d\u5236\uff01\uff01\uff01
\u7b80\u76f4\u5c31\u662f\u4eb5\u6e0e\u3002\u3002

\u6211\u8fd8\u6709\u6808\u7684PPT\u4e0a\u8bfe\u8bb2\u4e49\u3002\u8bf7\u5c06\u60a8\u7684\u90ae\u7bb1\u53d1\u7ed9\u6211\uff0c\u8c22\u8c22\u3002\u6211\u4f1a\u53d1\u9001\u9644\u4ef6\u81f3\u90ae\u7bb1\u3002

1 \u6808\u7684\u6982\u5ff5\u53ca\u8fd0\u7b97

\u6808\u7684\u5b9a\u4e49\uff1a\u6808\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u8868\u8fd9\u79cd\u8868\u53ea\u5728\u8868\u5934\u8fdb\u884c\u63d2\u5165\u548c\u5220\u9664\u64cd\u4f5c\u3002\u56e0\u6b64\uff0c\u8868\u5934\u5bf9\u4e8e\u6808\u6765\u8bf4\u5177\u6709\u7279\u6b8a\u7684\u610f\u4e49\uff0c\u79f0\u4e3a\u6808\u9876\u3002\u76f8\u5e94\u5730\uff0c\u8868\u5c3e\u79f0\u4e3a\u6808\u5e95\u3002\u4e0d\u542b\u4efb\u4f55\u5143\u7d20\u7684\u6808\u79f0\u4e3a\u7a7a\u6808\u3002

\u6808\u7684\u903b\u8f91\u7ed3\u6784\uff1a\u5047\u8bbe\u4e00\u4e2a\u6808S\u4e2d\u7684\u5143\u7d20\u4e3aan,an-1,..,a1\uff0c\u5219\u79f0a1\u4e3a\u6808\u5e95\u5143\u7d20\uff0can\u4e3a\u6808\u9876\u5143 \u7d20\u3002\u6808\u4e2d\u7684\u5143\u7d20\u6309a1 ,a2,..,an-1,an\u7684\u6b21\u5e8f\u8fdb\u6808\u3002\u5728\u4efb\u4f55\u65f6\u5019\uff0c\u51fa\u6808\u7684\u5143\u7d20\u90fd\u662f\u6808\u9876\u5143\u7d20\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u6808\u7684\u4fee\u6539\u662f\u6309\u540e\u8fdb\u5148\u51fa\u7684\u539f\u5219\u8fdb\u884c\u7684\uff0c\u5982\u56fe1\u6240\u793a\u3002\u56e0\u6b64\uff0c\u6808\u53c8\u79f0\u4e3a\u540e\u8fdb\u5148\u51fa(Last In First Out)\u8868\uff0c\u7b80\u79f0\u4e3aLIFO\u8868\u3002\u6240\u4ee5\uff0c\u53ea\u8981\u95ee\u9898\u6ee1\u8db3LIFO\u539f\u5219\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\u6808\u3002

\u6808\u7684\u8fd0\u7b97\uff1a\u4e3a\u4e00\u79cd\u62bd\u8c61\u6570\u636e\u7c7b\u578b\uff0c\u5e38\u7528\u7684\u6808\u8fd0\u7b97\u6709:

\u8fd0\u7b97 \u542b\u4e49
inistack(S) \u4f7fS\u6210\u4e3a\u4e00\u4e2a\u7a7a\u6808\u3002
getTop(S) \u8fd9\u662f\u4e00\u4e2a\u51fd\u6570\uff0c\u51fd\u6570\u503c\u4e3aS\u4e2d\u7684\u6808\u9876\u5143\u7d20\u3002
Pop(S) \u4ece\u6808S\u4e2d\u5220\u9664\u6808\u9876\u5143\u7d20\uff0c\u7b80\u79f0\u4e3a\u629b\u6808\u3002
Push(S,x) \u5728S\u7684\u6808\u9876\u63d2\u5165\u5143\u7d20x\uff0c\u7b80\u79f0\u4e3a\u5c06\u5143\u7d20x\u5165\u6808\u3002
Empty(S) \u8fd9\u662f\u4e00\u4e2a\u51fd\u6570\u3002\u5f53S\u4e3a\u7a7a\u6808\u65f6\uff0c\u51fd\u6570\u503c\u4e3atrue\uff0c\u5426\u5219\u51fd\u6570\u503c\u4e3afalse\u3002

2 \u6808\u7684\u5b58\u50a8\u4e0e\u5b9e\u73b0
\u6808\u7684\u6570\u7ec4\u5b9e\u73b0\uff1a\u7531\u4e8e\u6808\u662f\u4e00\u4e2a\u7279\u6b8a\u7684\u8868\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u6570\u7ec4\u6765\u5b9e\u73b0\u6808\u3002\u8003\u8651\u5230\u6808\u8fd0\u7b97\u7684\u7279\u6b8a\u6027\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u6570\u7ec4elements[1..maxlength]\u6765\u8868\u793a\u4e00\u4e2a\u6808\u65f6\uff0c\u5c06\u6808\u5e95\u56fa\u5b9a\u5728\u6570\u7ec4\u7684\u5e95\u90e8\uff0c\u5373elements[1]\u4e3a\u6700\u65e9\u5165\u6808\u7684\u5143\u7d20\uff0c\u5e76\u8ba9\u6808\u5411\u6570\u7ec4\u4e0a\u65b9(\u4e0b\u6807\u589e\u5927\u7684\u65b9\u5411)\u6269\u5c55\u3002\u540c\u65f6\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u6e38\u6807top\u6765\u6307\u793a\u5f53\u524d\u6808\u9876\u5143\u7d20\u6240\u5728\u7684\u5355\u5143\u3002\u5f53top=0\u65f6\uff0c\u8868\u793a\u8fd9\u4e2a\u6808\u4e3a\u4e00\u4e2a\u7a7a\u6808\u3002\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\uff0celements\u4e2d\u7684\u5143\u7d20\u5e8f\u5217elements[top],elements[top-1],..,elements[1]\u5c31\u6784\u6210\u4e86\u4e00\u4e2a\u6808\u3002\u8fd9\u79cd\u7ed3\u6784\u5982\u56fe2\u6240\u793a\u3002

\u56fe 2

\u5229\u7528\u4e0a\u8ff0\u7ed3\u6784\uff0c\u6211\u4eec\u53ef\u4ee5\u5f62\u5f0f\u5730\u5b9a\u4e49\u6808\u7c7b\u578bTStack\u5982\u4e0b\uff1a

Type

TStack=Record

top:integer;

element:array[1..maxlength] of TElement;

End;


\u5728\u8fd9\u79cd\u8868\u793a\u6cd5\u4e0b\uff0c\u6808\u76845\u79cd\u57fa\u672c\u8fd0\u7b97\u53ef\u5b9e\u73b0\u5982\u4e0b\u3002

procedure inistack(Var S:TStack);

begin

S.top:=0;

end;

function Empty(var S:Stack):Boolean;

begin

return(S.top=0);

end;

finction Top(var S:TStack):TElement;

begin

if Empty(S) then Error('The stack is empty.')

else return(S.element[S.top]);

end;

procedure Pop(var S:TStack);

begin

if Empty(S) then Error('The stack is empty.')

else dec(S.top); {S.top\u51cf1}

end;

procedure Push(var S:TStack\uff1bx:TElement;);

begin

if S.top=maxlength then Error('The stack is full.')

else begin

inc(S.top); {S.top\u589e1}

S.elements[S.top]:=x;

end;

end;


\u4ee5\u4e0a\u6bcf\u79cd\u64cd\u4f5c\u7684\u590d\u6742\u6027\u4e3aO(1)\u3002

\u5728\u4e00\u4e9b\u95ee\u9898\u4e2d\uff0c\u53ef\u80fd\u9700\u8981\u540c\u65f6\u4f7f\u7528\u591a\u4e2a\u540c\u7c7b\u578b\u7684\u6808\u3002\u4e3a\u4e86\u4f7f\u6bcf\u4e2a\u6808\u5728\u7b97\u6cd5\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u6ea2\u51fa\uff0c \u8981\u4e3a\u6bcf\u4e2a\u6808\u9876\u7f6e\u4e00\u4e2a\u8f83\u5927\u7684\u6808\u7a7a\u95f4\u3002\u8fd9\u6837\u505a\u5f80\u5f80\u9020\u6210\u7a7a\u95f4\u7684\u6d6a\u8d39\u3002\u5b9e\u9645\u4e0a\uff0c\u5728\u7b97\u6cd5\u8fd0\u884c\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5404\u4e2a\u6808\u4e00\u822c\u4e0d\u4f1a\u540c\u65f6\u6ee1\uff0c\u5f88\u53ef\u80fd\u6709\u7684\u6ee1\u800c\u6709\u7684\u7a7a\u3002\u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u8ba9\u591a\u4e2a\u6808\u5171\u4eab\u540c\u4e00\u4e2a\u6570\u7ec4\uff0c\u52a8\u6001\u5730\u4e92\u76f8\u8c03\u5242\uff0c\u5c06\u4f1a\u63d0\u9ad8\u7a7a\u95f4\u7684\u5229\u7528\u7387\uff0c\u5e76\u51cf\u5c11\u53d1\u751f\u6808\u4e0a\u6ea2\u7684\u53ef\u80fd\u6027\u3002 \u5047\u8bbe\u6211\u4eec\u8ba9\u7a0b\u5e8f\u4e2d\u7684\u4e24\u4e2a\u6808\u5171\u4eab\u4e00\u4e2a\u6570\u7ec4S[1..n]\u3002\u5229\u7528\u6808\u5e95\u4f4d\u7f6e\u4e0d\u53d8\u7684\u7279\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u4e24\u4e2a\u6808\u7684\u6808\u5e95\u5206\u522b\u8bbe\u5728\u6570\u7ec4S\u7684\u4e24\u7aef\uff0c\u7136\u540e\u5404\u81ea\u5411\u4e2d\u95f4\u4f38\u5c55\uff0c\u5982\u56fe3\u6240\u793a\u3002\u8fd9\u4e24\u4e2aS\u6808\u7684\u6808\u9876\u521d\u503c\u5206\u522b\u4e3a0\u548cn+1\u3002\u53ea\u6709\u5f53\u4e24\u4e2a\u6808\u7684\u6808\u9876\u76f8\u9047\u65f6\u624d\u53ef\u80fd\u53d1\u751f\u4e0a\u6ea2\u3002\u7531\u4e8e\u4e24\u4e2a\u6808\u4e4b\u95f4\u53ef\u4ee5\u4f59\u7f3a\u4e92\u8865\uff0c\u56e0\u6b64\u6bcf\u4e2a\u6808\u5b9e\u9645\u53ef\u7528\u7684\u6700\u5927\u7a7a\u95f4\u5f80\u5f80\u5927\u4e8en/2\u3002

3 \u6808\u7684\u5e94\u7528

1.\u8868\u8fbe\u5f0f\u7684\u6c42\u503c

\u95ee\u9898:\u80fd\u5426\u8bbe\u8ba1\u7b97\u6cd5\uff0c\u7f16\u5236\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u8ba9\u8ba1\u7b97\u673a\u626b\u63cf\u5982\u4e0b\u8868\u8fbe\u5f0f\uff0c\u5e76\u5c06\u5176\u503c\u6253\u5370\u51fa\u6765\u3002
# 3 * ( 4 + 8 ) / 2 -5 #
\u6ce8\uff1a\u7ed9\u8868\u8fbe\u5f0f\u8bbe\u7f6e#\uff0c\u6807\u5fd7\u626b\u63cf\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u3002
\u63d0\u793a\u7b97\u6cd5\uff1a\u8bbe\u4e24\u4e2a\u6808\uff0c\u4e00\u4e2a\u662f\u64cd\u4f5c\u6570\u6808\uff0c\u7528\u6765\u5b58\u653e\u64cd\u4f5c\u6570\uff0c\u59823\u30014\u30018\u7b49\uff0c\u53e6\u4e00\u4e2a\u662f\u8fd0\u7b97\u7b26\u6808\uff0c\u7528\u6765\u5b58\u653e\u8fd0\u7b97\u7b26\u3002
\u9996\u5148\u5c06\u6807\u5fd7\u201c#\u201d\u8fdb\u8fd0\u7b97\u7b26\u6808\u7684\u6808\u5e95\u3002
\u7136\u540e\u4f9d\u6b21\u626b\u63cf\uff0c\u6309\u7167\u6808\u7684\u540e\u8fdb\u5148\u51fa\u539f\u5219\u8fdb\u884c\uff1a
\uff081\uff09\u9047\u5230\u64cd\u4f5c\u6570\uff0c\u8fdb\u64cd\u4f5c\u6570\u6808\uff1b
\uff082\uff09\u9047\u5230\u8fd0\u7b97\u7b26\u65f6\uff0c\u5219\u9700\u5c06\u6b64\u8fd0\u7b97\u7b26\u7684\u4f18\u5148\u7ea7\u4e0e\u6808\u9876\u8fd0\u7b97\u7b26\u7684\u4f18\u5148\u7ea7\u6bd4\u8f83\uff0c
\u82e5\u82e5\u9ad8\u4e8e\u6808\u9876\u5143\u7d20\u5219\u8fdb\u6808\uff0c\u7ee7\u7eed\u626b\u63cf\u4e0b\u4e00\u7b26\u53f7\uff0c
\u5426\u5219\uff0c\u5c06\u8fd0\u7b97\u7b26\u6808\u7684\u6808\u9876\u5143\u7d20\u9000\u6808\uff0c\u5f62\u6210\u4e00\u4e2a\u64cd\u4f5c\u7801Q\uff0c\u540c\u65f6\u64cd\u4f5c\u6570\u6808\u7684\u6808\u9876\u5143\u7d20\u4e24\u6b21\u9000\u6808\uff0c\u5f62\u6210\u4e24\u4e2a\u64cd\u4f5c\u6570a\u3001b\uff0c\u8ba9\u8ba1\u7b97\u673a\u5bf9\u64cd\u4f5c\u6570\u4e0e\u64cd\u4f5c\u7801\u5b8c\u6210\u4e00\u6b21\u8fd0\u7b97\u64cd\u4f5c\uff0c\u5373aQb\uff0c\u5e76\u5c06\u5176\u8fd0\u7b97\u7ed3\u679c\u5b58\u653e\u5728\u64cd\u4f5c\u6570\u6808\u4e2d\u2026\u2026

\u6a21\u62df\u8ba1\u7b97\u673a\u5904\u7406\u7b97\u672f\u8868\u8fbe\u5f0f\u8fc7\u7a0b\u3002\u4ece\u952e\u76d8\u4e0a\u8f93\u5165\u7b97\u672f\u8868\u8fbe\u5f0f\u4e32\uff08\u53ea\u542b\uff0b\u3001\uff0d\u3001\u00d7\u3001\u00f7\u8fd0\u7b97\u7b26\uff0c\u5145\u8bb8\u542b\u62ec\u53f7\uff09\uff0c\u8f93\u51fa\u7b97\u672f\u8868\u8fbe\u5f0f\u7684\u503c\u3002\u8bbe\u8f93\u5165\u7684\u8868\u8fbe\u5f0f\u4e32\u662f\u5408\u6cd5\u7684\u3002

\u9644\u6e90\u7a0b\u5e8f\uff1a

program exsj_1;
const
max=100;
var
number:array[0..max] of integer;
symbol:array[1..max] of char;
s,t:string;
i,p,j,code:integer;
procedure push;{\u7b97\u7b26\u5165\u6808\u8fd0\u7b97}
begin
inc(p);symbol[p]:=s[i];
end;

procedure pop;{\u8fd0\u7b97\u7b26\u6808\u9876\u5143\u7d20\u51fa\u6808,\u5e76\u53d6\u51fa\u64cd\u4f5c\u6570\u6808\u5143\u7d20\u5b8c\u6210\u76f8\u5e94\u7684\u8fd0\u7b97}
begin
dec(p);
case symbol[p+1] of
'+':inc(number[p],number[p+1]);
'-':dec(number[p],number[p+1]);
'*':number[p]:=number[p]*number[p+1];
'/':number[p]:=number[p] div number[p+1];
end;
end;

function can:boolean;{\u5224\u65ad\u8fd0\u7b97\u7b26\u7684\u4f18\u5148\u7ea7\u522b,\u5efa\u7acb\u6807\u5fd7\u51fd\u6570}
begin
can:=true;
if (s[i] in ['+','-']) and (symbol[p]'(') then exit;
if (s[i] in ['*','/']) and (symbol[p] in ['*','/']) then exit;
can:=false;
end;

begin
write('String : '); readln(s); s:='('+s+')'; i:=1; p:=0;
while i<=length(s) do
begin
while s[i]='(' do {\u5de6\u62ec\u53f7\u5904\u7406]
begin
push; inc(i);
end;
j:=i;
repeat {\u53d6\u6570\u5165\u64cd\u4f5c\u6570\u6808}
inc(i);
until (s[i]'9');
t:=copy(s,j,i-j); val(t,number[p],code);
repeat
if s[i]=')' then {\u53f3\u62ec\u53f7\u5904\u7406}
begin
while symbol[p]'(' do pop;
dec(p); number[p]:=number[p+1];
end
else
begin {\u6839\u636e\u6807\u5fd7\u51fd\u6570\u503c\u4f5c\u8fd0\u7b97\u7b26\u5165\u6808\u6216\u51fa\u6808\u8fd0\u7b97\u5904\u7406}
while can do pop;
push;
end;
inc(i);
until (i>length(s)) or (s[i-1]')');
end;
write('Result=',number[0]);
readln;
end.

2.\u80cc\u5305\u95ee\u9898

\u95ee\u9898\uff1a\u5047\u8bbe\u6709n\u4ef6\u8d28\u91cf\u5206\u914d\u4e3aw1\uff0cw2\uff0c...\uff0cwn\u7684\u7269\u54c1\u548c\u4e00\u4e2a\u6700\u591a\u80fd\u88c5\u8f7d\u603b\u8d28\u91cf\u4e3aT\u7684\u80cc\u5305\uff0c\u80fd\u5426\u4ece\u8fd9n\u4ef6\u7269\u54c1\u4e2d\u9009\u62e9\u82e5\u5e72\u4ef6\u7269\u54c1\u88c5\u5165\u80cc\u5305\uff0c\u4f7f\u5f97\u88ab\u9009\u7269\u54c1\u7684\u603b\u8d28\u91cf\u6070\u597d\u7b49\u4e8e\u80cc\u5305\u6240\u80fd\u88c5\u8f7d\u7684\u6700\u5927\u8d28\u91cf\uff0c\u5373wi1+wi2+...+wik=T\u3002\u82e5\u80fd\uff0c\u5219\u80cc\u5305\u95ee\u9898\u6709\u89e3\uff0c\u5426\u5219\u65e0\u89e3\u3002
\u7b97\u6cd5\u601d\u60f3\uff1a\u9996\u5148\u5c06n\u4ef6\u7269\u54c1\u6392\u6210\u4e00\u5217\uff0c\u4f9d\u6b21\u9009\u53d6\uff1b\u82e5\u88c5\u5165\u67d0\u4ef6\u7269\u54c1\u540e\uff0c\u80cc\u5305\u5185\u7269\u54c1\u7684\u603b\u8d28\u91cf\u4e0d\u8d85\u8fc7\u80cc\u5305\u6700\u5927\u88c5\u8f7d\u8d28\u91cf\u65f6\uff0c\u5219\u88c5\u5165\uff08\u8fdb\u6808\uff09\uff1b\u5426\u5219\u653e\u5f03\u8fd9\u4ef6\u7269\u54c1\u7684\u9009\u62e9\uff0c\u9009\u62e9\u4e0b\u4e00\u4ef6\u7269\u54c1\u8bd5\u63a2\uff0c\u76f4\u81f3\u88c5\u5165\u7684\u7269\u54c1\u603b\u548c\u6b63\u597d\u662f\u80cc\u5305\u7684\u6700\u5927\u8f6c\u8f7d\u8d28\u91cf\u4e3a\u6b62\u3002\u8fd9\u65f6\u6211\u4eec\u79f0\u80cc\u5305\u88c5\u6ee1\u3002
\u82e5\u88c5\u5165\u82e5\u5e72\u7269\u54c1\u7684\u80cc\u5305\u6ca1\u6709\u6ee1\uff0c\u800c\u4e14\u53c8\u65e0\u5176\u4ed6\u7269\u54c1\u53ef\u4ee5\u9009\u5165\u80cc\u5305\uff0c\u8bf4\u660e\u5df2\u88c5\u5165\u80cc\u5305\u7684\u7269\u54c1\u4e2d\u6709\u4e0d\u5408\u683c\u8005\uff0c\u9700\u4ece\u80cc\u5305\u4e2d\u53d6\u51fa\u6700\u540e\u88c5\u5165\u7684\u7269\u54c1\uff08\u9000\u6808\uff09\uff0c\u7136\u540e\u5728\u672a\u88c5\u5165\u7684\u7269\u54c1\u4e2d\u6311\u9009\uff0c\u91cd\u590d\u6b64\u8fc7\u7a0b\uff0c\u76f4\u81f3\u88c5\u6ee1\u80cc\u5305\uff08\u6709\u89e3\uff09\uff0c\u6216\u65e0\u7269\u54c1\u53ef\u9009\uff08\u65e0\u89e3\uff09\u4e3a\u6b62\u3002
\u5177\u4f53\u5b9e\u73b0\uff1a\u8bbe\u7528\u6570\u7ec4weight[1..N]\uff0cstack[1,N]\u5206\u522b\u5b58\u653e\u7269\u54c1\u91cd\u91cf\u548c\u5df2\u7ecf\u88c5\u5165\u80cc\u5305\uff08\u6808\uff09\u7684\u7269\u54c1\u5e8f\u53f7\uff0cMaxW\u8868\u793a\u80cc\u5305\u7684\u6700\u5927\u88c5\u8f7d\u91cf\u3002\u6bcf\u8fdb\u6808\u4e00\u4e2a\u7269\u54c1\uff0c\u5c31\u4eceMaxW\u4e2d\u51cf\u53bb\u8be5\u7269\u54c1\u7684\u8d28\u91cf,\u8bbei\u4e3a\u5f85\u9009\u7269\u54c1\u5e8f\u53f7,\u82e5MaxW-weight[i]>=0\uff0c\u5219\u8be5\u7269\u54c1\u53ef\u9009\uff1b\u82e5MaxW-weight[i] n\uff0c\u5219\u9700\u9000\u6808\uff0c\u82e5\u6b64\u65f6\u6808\u7a7a\uff0c\u5219\u8bf4\u660e\u65e0\u89e3\u3002
\u7528Pascal\u5b9e\u73b0\u7684\u53c2\u8003\u51fd\u6570\uff1a

Function knapstack(n,MaxW,weight);
begin
top:=0; i:=1; {i\u4e3a\u5f85\u9009\u7269\u54c1\u5e8f\u53f7}
while (MaxW>0) and ( i < = n ) do
begin
if (MaxW-weight[i]>=0) and ( i < = n ) then
begin top:=top+1; stack[top]:=i;MaxW=MaxW-weight[i] end;
{\u7b2ci\u4ef6\u7269\u54c1\u88c5\u5165\u80cc\u5305}
if MaxW=0 then return(true)
else begin
if (i=n) and (top>0) then {\u80cc\u5305\u5185\u6709\u4e0d\u5408\u9002\u7269\u54c1}
begin {\u53d6\u6808\u9876\u7269\u54c1\uff0c\u6062\u590dMaxW\u7684\u503c}
i:=stack[top]; top:=top-1;MaxW=MaxW+weight[i];
if top>0 then begin
i:=stack[top]; top:=top-1;MaxW=MaxW+weight[i];
end;
end;
i:=i+1;
end;
end;
return(false) {\u95ee\u9898\u65e0\u89e3}
end;

\u7ec3\u4e60:\u5b8c\u6574\u5b8c\u6210\u80cc\u5305\u95ee\u9898

\u7b54\u6848\u662f
No.1: 0 0 0 1 1 1
No.2: 0 0 1 0 1 1
No.3: 0 0 1 1 0 1
No.4: 0 1 0 0 1 1
No.5: 0 1 0 1 0 1
total\u662f\u7528\u6765\u8bb0\u5f55\u7ed3\u679c\u603b\u6570\u7684
n\u662f\u4eba\u6570\u7684\u4e00\u534a
i,k,x,y\u90fd\u662f\u5faa\u73af\u53d8\u91cf
P.S.:\u4f60\u8fd9\u4e2a\u7a0b\u5e8f\u6709\u7684\u5730\u65b9\u6709\u8bed\u6cd5\u9519\u8bef\uff0c\u9700\u8981\u81ea\u5df1\u6539\u4e00\u4e0b\uff1a
\u7b2c\u4e00\u884c\u6539\u6210Program pl(input\uff0coutput);\uff5b\u5e94\u8be5\u662f\u9017\u53f7\uff5d
\u7b2c\u4e09\u884c\u6539\u6210var b:array[1..max*2] of -1..2;\uff5b\u6709\u7a7a\u683c\uff5d
\u7b2c\u4e8c\u5341\u4e03\u884c\u6539\u6210 total:=0; k:=1; d[0]:=0; d[1]\uff1a=0;\uff5b\u5c11\u4e86\u4e2a\u5192\u53f7\uff5d
\u7b2c\u4e09\u5341\u4e03\u884c\u6539\u6210 if (b[k]=0) and (x<=n) then done:=true\uff1b\uff5b\u6700\u540e\u5c11\u5206\u53f7\uff5d
\u7b2c\u4e09\u5341\u516b\u884c\u6539\u6210 if (b[k]=1) and (x>=y) then done:=true \uff1b\uff5b\u6700\u540e\u5c11\u5206\u53f7\uff5d

Pascal语言函数集(含Delphi控件属性)

abort 函数
引起放弃的意外处理
abs 函数 绝对值函数
addexitproc 函数 将一过程添加到运行时库的结束过程表中
addr 函数
返回指定对象的地址
adjustlinebreaks函数 将给定字符串的行分隔符调整为cr/lf序列
align 属性 使控件位于窗口某部分
alignment 属性 控件标签的文字位置
allocmem 函数
在堆栈上分配给定大小的块
allowgrayed 属性 允许一个灰度选择
ansicomparestr 函数 比较字符串(区分大小写)
ansicomparetext 函数 比较字符串(不区分大小写)
ansilowercase 函数 将字符转换为小写
ansiuppercase 函数 将字符转换为大写
append 函数
以附加的方式打开已有的文件
arctan 函数 余切函数
assignfile 函数 给文件变量赋一外部文件名
assigned 函数 测试函数或过程变量是否为空
autosize 属性 自动控制标签的大小
backgrounddi2001.jpg 属性 背景色
beginthread 函数
以适当的方式建立用于内存管理的线程
bevelinner 属性
控件方框的内框方式
bevelouter 属性 控件方框的外框方式
bevelwidth 属性 控件方框的外框宽度
blockread 函数 读一个或多个记录到变量中
blockwrite 函数 从变量中写一个或多个记录
borderstyle 属性 边界类型
borderwidth 属性 边界宽度
break 命令 终止for、while、repeat循环语句
brush 属性 画刷
caption 属性 标签文字的内容
changefileext 函数 改变文件的后缀
chdir 函数 改变当前目录
checked 属性 确定复选框选中状态
chr 函数 返回指定序数的字符
closefile 命令 关闭打开的文件
color 属性 标签的颜色
columns 属性 显示的列数
comparestr 函数 比较字符串(区分大小写)
concat 函数 合并字符串
continue 命令 继续for、while、repeat的下一个循环
copy 函数 返回一字符串的子串
cos 函数
余弦函数
ctl3d 属性 是否具有3d效果
cursor 属性
鼠标指针移入后的形状
date 函数 返回当前的日期
datetimetofiledate函数 将delphi的日期格式转换为dos的日期格式
datetimetostr 函数 将日期时间格式转换为字符串
datetimetostring 函数 将日期时间格式转换为字符串
datetostr 函数 将日期格式转换为字符串
dayofweek 函数 返回星期的数值
dec 函数 递减变量值
decodedate 函数 将日期格式分解为年月日
decodetime 函数 将时间格式分解为时、分、秒、毫秒
delete 函数 从字符串中删除子串
deletefile 命令 删除文件
diskfree 函数 返回剩余磁盘空间的大小
disksize 函数 返回指定磁盘的容量
dispose 函数 释放动态变量所占的空间
disposestr 函数 释放字符串在堆栈中的内存空间
ditherbackgrounddi2001.jpg?
使背景色的色彩加重或减少50%
dragcursor 属性 当鼠标按下时光标的形状
dragmode 属性 按动的作用方式
dropdowncount 属性 容许的显示数据项的数目
editmask 属性 编辑模式
enabled 属性 是否使标签呈现打开状态
encodedate 函数 将年月日合成为日期格式
encodetime 函数
将时、分、秒、毫秒合成为时间格式
endmargin 属性 末尾边缘
eof 函数 对有类型或无类型文件测试是否到文件尾
eoln 函数 返回文本文件的行结束状态

erase 命令 删除外部文件
exceptaddr 函数 返回引起当前意外的地址
exclude 函数 从集合中删除一些元素
exceptobject 函数 返回当前意外的索引
exit 命令 立即从当前的语句块中退出
exp 函数 指数函数
expandfilename 函数 返回包含绝对路径的字符串
extendedselect 属性 是否允许存在选择模式,true时,multiselect才有意义
extractfiledir 函数 返回驱动器和路径
extractfileext 函数 返回文件的后缀
extractfilename 函数 返回文件名
extractfilepath 函数 返回指定文件的路径
fileage 函数 返回文件已存在的时间
fileclose 命令 关闭指定的文件
filecreate 命令 用指定的文件名建立新文件
filedatetodatetime 函数 将dos的日期格式转换为delphi的日期格式
fileexists 函数 检查文件是否存在
filegatattr 函数 返回文件的属性
filegetdate 函数 返回文件的dos日期时间标记
fileopen 命令 用指定的存取模式打开指定的文件
filepos 函数 返回文件的当前指针位置
fileread 命令 从指定的文件读取
filesearch 命令 在目录中搜索指定的文件
fileseek 函数 改变文件的指针
filesetattr 函数 设置文件属性
filesetdate 函数 设置文件的dos日期时间标记
filesize 函数 返回当前文件的大小
filewrite 函数 对指定的文件做写操作
fillchar 函数 用指定的值填充连续字节的数
findclose 命令 终止findfirst/findnext序列
findfirst 命令 对指定的文件名及属性搜索目录
findnext 命令 返回与文件名及属性匹配的下一入口
floattodecimal 函数 将浮点数转换为十进制数
floattostrf 函数 将浮点数转换为字符串
floattostr 函数 将浮点数转换为字符串
floattotext 函数 将给定的浮点数转换为十进制数
floattotextfmt 函数 将给定的浮点数转换为十进制数
flush 函数 将缓冲区的内容刷新到输出的文本文件中
fmtloadstr 函数
从程序的资源字符串表中装载字符串
fmtstr 函数 格式化一系列的参数,其结果以参数
result 返回
font 属性 设置字体
format 函数 格式化一系列的参数并返回pascal字符串
formatbuf 函数 格式化一系列的参数
formatdatetime函数 用指定的格式来格式化日期和时间
formatfloat 函数 指定浮点数格式
frac 函数 返回参数的小数部分
freemem 函数 按给定大小释放动态变量所占的空间
getdir 返回指定驱动器的当前目录
getheapstatus 返回内存管理器的当前状态
getmem 建立一指定大小的动态变量,并将指针指向该处
getmemorymanager 返回内存管理器的入口点
glyph 函数 按钮上的图象
halt 停止程序的执行并返回到操作系统
hi 返回参数的高地址位
high 返回参数的上限值
hint 属性 提示信息
int 返回参数的整数部分
include 添加元素到集合中
insert 在字符串中插入子串
inttohex 将整型数转换为十六进制数
inttostr 将整型数转换为字符串
ioresult 返回最新的i/o操作完成状态
isvalidident 测试字符串是否为有效的标识符
items 属性 默认显示的节点
kind 属性 摆放样式
largechange 属性 最大改变值
layout 属性 图象布局
length 函数 返回字符串的动态长度
lines 属性 缺省显示内容
ln 函数
自然对数函数
lo 函数 返回参数的低地址位
loadstr 函数 从应用程序的可执行文件中装载字符资源
lowercase 函数 将给定的字符串变为小写
low 函数 返回参数的下限值
max 属性 最大值
maxlength 属性 最大长度
min 属性 最小值
mkdir 命令 建立一子目录
move 函数 从源到目标复制字节
multiselect 属性 允许同时选择几个数据项
name 属性 控件的名字
new 函数 建立新的动态变量并设置一指针变量指向它
newstr 函数 在堆栈上分配新的字符串
now 函数 返回当前的日期和时间
odd 测试参数是否为奇数
onactivate 事件 焦点移到窗体上时触发
onclick 事件 单击窗体空白区域触发
ondblclick 事件 双击窗体空白区域触发
onclosequery 事件 使用者试图关闭窗体触发
onclose 事件 窗体关闭后才触发
oncreate 事件 窗体第一次创建时触发
ondeactivate 事件 用户切换到另一应用程序触发
ondragdrop 事件 鼠标拖放操作结束时触发
ondragover 事件 有其他控件从他上面移过触发
onmousedown 事件 按下鼠标键时触发
onmouseup 事件 释放鼠标键时触发
onmousemove 事件 移动鼠标时触发
onhide 事件 隐藏窗体时触发
onkeydown 事件 按下键盘某键时触发
onkeypress 事件 按下键盘上的单个字符键时触发
onkeyup 事件 释放键盘上的某键时触发
onpaint 事件 窗体上有新部分暴露出来触发
onresize 事件 重新调整窗体大小触发
onshow 事件 在窗体实际显示之前瞬间触发
ord 返回序数类的序数
outlinestyle 属性 类型
outofmemoryerror 引起
outofmemory 意外
pageindex 属性 页索引
pages 属性 页
paramcount 函数 返回在命令行上传递给程序的参数数量
paramstr 函数 返回指定的命令行参数
pen 属性 画刷设置
pi 函数 返回圆周率pi
picture 属性 显示图象
pictureclosed 属性 设置closed位图
pictureleaf 属性 设置leaf位图
pictureminus 属性 设置minus位图
pictureopen 属性 设置open位图
pictureplus 属性 设置plus位图
pos 函数 在字符串中搜索子串
pred 函数 返回先前的参数
random 函数 返回一随机函数
randomize 函数 用一随机数初始化内置的随机数生成器
read 函数 对有格式的文件,读一文件组件到变量中;对文本文件,读一个或多个值到一个或多个变量中
readln 函数 执行read过程,然后跳到文件下一行
readonly 属性 只读属性
reallocmem 函数 分配一动态变量
rename 函数 重命名外部文件
renamefile 函数 对文件重命名
reset 函数 打开已有的文件
rewrite 函数 建立并打开一新的文件
rmdir 函数 删除空的子目录
round 函数 将实数值舍入为整型值
runerror 函数 停止程序的执行
scrollbars 属性 滚动条状态
seek 函数 将文件的当前指针移动到指定的组件上
seekeof 函数 返回文件的文件结束状态
seekeoln 函数 返回文件的行结束状态
selectedcolor 属性 选中颜色
setmemorymanager 函数 设置内存管理器的入口点
settextbuf 函数 给文本文件指定i/o缓冲区
shape 属性 显示的形状
showexception 函数 显示意外消息与地址
sin 函数 正弦函数
sizeof 函数 返回参数所占的字节数
smallchange 属性 最小改变值
sorted 属性 是否允许排序
sqr 函数 平方函数
sqrt 函数 平方根函数
startmargin 属性 开始边缘
state 属性 控件当前状态
str 函数 将数值转换为字符串
stralloc 函数
给以null结束的字符串分配最大长度-1的缓冲区
strbufsize 函数 返回存储在由stralloc分配的字符缓冲区的最大字符数
strcat 函数 将一字符串附加到另一字符串尾并返回合并的字符串
strcomp 函数 比较两个字符串
strcopy 函数 将一个字符串复制到另一个字符串中
strdispose 函数 释放堆栈上的字符串
strecopy 函数 将一字符串复制到另一个字符串并返回结果字符串尾部的指针
strend 函数 返回指向字符串尾部的指针
stretch 属性 自动适应控件的大小
strfmt 函数 格式化一系列的参数
stricomp 函数 比较两个字符串(不区分大小写)
stringtowidechar 函数 将ansi字符串转换为unicode字符串
strlcat 函数 将一字符串中的字符附加到另一字符串尾并返回合并的字符串
strlcomp 函数 以最大长度比较两个字符串
strlcopy 函数 将一个字符串中的字符复制到另一个字符串中
strlen 函数 返回字符串中的字符数
strlfmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针
strlicomp 函数 以最大长度比较两个字符串(不区分大小写)
strlower 函数 将字符串中的字符转换为小写
strmove 函数 将一个字符串中的字符复制到另一个字符串中
strnew 函数 在堆栈上分配一个字符串
strpas 函数 将以null结束的字符串转换为pascal类的字符串
strpcopy 函数 将pascal类的字符串复制为以null结束的字符串
strplcopy 函数 从pascal类的最大长度字符串复制为以null结束的字符串
strpos 函数 返回一个字符串在另一个字符串中首次出现指针
strrscan 函数 返回字符串中最后出现字符的指针
strscan 函数 返回字符串中出现首字符的指针
strtodate 函数 将字符串转换为日期格式
strtodatetime 函数 将字符串转换为日期/时间格式
strtofloat 函数 将给定的字符串转换为浮点数
strtoint 函数 将字符串转换为整型
strtointdef 函数 将字符串转换为整型或默认值
strtotime 函数 将字符串转换为时间格式
strupper 函数 将字符串中的字符转换为大写
style 属性 类型选择
suce 函数 返回后继的参数
swap 函数 交换参数的高低地址位
tabs 属性 标记每一项的内容
tabindex 属性 标记索引
text 属性
显示的文本
texttofloat 函数 将字符串(以null结束的格式)转换为浮点数
time 函数 返回当前的时间
timetostr 函数 将时间格式转换为字符串
trim 函数 从给定的字符串中删除前导和尾部的空格及控制字符
trimleft 函数 从给定的字符串中删除首部的空格及控制字符
trimright 函数 从给定的字符串中删除尾部的空格及控制字符
trunc 函数 将实型值截取为整型值
truncate 函数 截去当前文件位置后的内容
unselectedcolor 属性 未选中颜色
upcase
将字符转换为大写
uppercase 将给定的字符串变为大写
val 函数 将字符串转换为整型值
vararraycreate 函数 以给定的界限和维数建立变体数组
vararraydimcount 函数 返回给定变体的维数
vararrayhighbound 函数 返回给定变体数组维数的上界
vararraylock 函数 锁定给定的变体数组
vararraylowbound 函数 返回给定变体数组维数的下界
vararrayof 函数 返回指定变体的数组元素
vararrayredim 函数 通过改变上限来调整变体的大小
vararrayunlock 函数 解锁指定的变体数组
varastype 函数 将变体转换为指定的类型
varcase 函数 将变体转换为指定的类型并保存它
varclear 函数 清除指定的变体
varcopy 函数 将指定的变体复制为指定的变体
varformdatetime 函数 返回包含日期时间的变体
varisarray 函数 测试变体是否为数组
varisempty 函数 测试变体是否为unassigned
varisnull 函数 测试变体是否为null
vartodatetime 函数 将给定的变体转换为日期时间
vartype 函数 将变体转换为指定的类型并保存它
visible 属性 控件的可见性
wantreturns 属性 为true时,按回车键产生一个回车符;为false时,按下ctrl+enter才产生回车符
write 命令 对有格式的文件,写一变量到文件组件中;对文本文件,写一个或多个值到文件中
writeln 命令 执行write过程,然后输出一行结束标志
widecharlentostring 函数 将ansi字符串转换为unicode字符串
widecharlentostrwar 函数 将unicode字符串转换为ansi字符串变量
widechartostring 函数 将unicode字符串转换为ansi字符串
widechartostrvar 函数 将unicode字符串转换为ansi字符串变量

Pascal中的常用数学函数

求绝对值函数abs(x)
定义:function Abs(X): (Same type as parameter);
说明:X可以是整型,也可以是实型;返回值和X的类型一致例子:
var
r: Real;
i: Integer;
begin
r := Abs(-2.3); { 2.3 }
i := Abs(-157); { 157 }
end.

取整函数int(x)
定义:function Int(X: Real): Real; 注意:X是实型数,返回值也是实型的;返回的是X的整数部分,也就是说,X被截尾了(而不是四舍五入)例子:
var R: Real;
begin
R := Int(123.567); { 123.0 }
R := Int(-123.456); { -123.0 }
end.

截尾函数trunc(x)
定义:function Trunc(X: Real): Longint; 注意:X是实型表达式. Trunc 返回Longint型的X的整数部分例子:
begin
Writeln(1.4, ' becomes ', Trunc(1.4)); { 1 }
Writeln(1.5, ' becomes ', Trunc(1.5)); { 1 }
Writeln(-1.4, 'becomes ', Trunc(-1.4)); { -1 }
Writeln(-1.5, 'becomes ', Trunc(-1.5)); { -1 }
end.

四舍五入函数round(x)
定义:function Round(X: Real): Longint; 注意:X是实型表达式. Round 返回Longint型的X的四舍五入值.如果返回值超出了Longint的表示范围,则出错. 例子:
begin
Writeln(1.4, ' rounds to ', Round(1.4)); { 1 }
Writeln(1.5, ' rounds to ', Round(1.5)); { 2 }
Writeln(-1.4, 'rounds to ', Round(-1.4));{ -1 }
Writeln(-1.5, 'rounds to ', Round(-1.5));{ -2 }
end.

取小数函数frac(x)
定义:function Frac(X: Real): Real; 注意:X 是实型表达式. 结果返回 X 的小数部分; 也就是说,Frac(X) = X - Int(_X). 例子:
var
R: Real;
begin
R := Frac(123.456); { 0.456 }
R := Frac(-123.456); { -0.456 }
end.

求平方根函数sqrt(x)和平方函数sqr(x)
定义:
平方根:function Sqrt(X: Real): Real;
注意:X 是实型表达式. 返回实型的X的平方根. 平方:function Sqr(X): (Same type as parameter);
注意:X 是实型或整型表达式.返回值的类型和X的类型一致,大小是X的平方,即X*X.
例子:
begin
Writeln('5 squared is ', Sqr(5)); { 25 }
Writeln('The square root of 2 is ',Sqrt(2.0)); { 1.414 }

Pascal函数实例

标准数据类型的含义及符号

(1)整型数的取值范围:-32768<=n<=32768;整型运算操作:+、-、*、div、mod;整型关系操作:=、<>、>=、<=,结果为布尔型;有关整型的标准函数:

整型函数

函数名 函数值 例
前接函数 pred(x) x-1 pred(4)=3
后继函数 succ(x) x+1 succ(-3)=-2
绝对值函数abs(x) |x| abs(-1)=1
平方函数sqr(x) x^2 sqr(-5)=25
奇函数 odd(x) x为奇数时值为True odd(1)=true
x为偶数时值为False odd(16)=false
字符函数chr(x) 序号为x的ASCII字符 chr(65)=\'\'a\'\'
a对应的序号65

(2)实型数的绝对值取值范围:1E-38~1E+38;计算机实数的表示标准形式往往类如1.2E-8,-1234.56E+3等形式;实数范围比整数大,但实型数的运算速度比整形数慢,另外实型数在存储时会出现小的误差;
实型的运算操作:+、-、*、/。只要有一个运算对象是实型量,其运算结果总是实型量,即其可与整型量混合计算。

实型的关系操作;=、<>、>=、<=,结果为布尔型,即两种结果:true或false。

实型函数种类:
abs(x);
sqr(x);
sin(x)正弦函数,求数学三角正弦函数的值,如sin(1.570789)=0.99999,注意X值要以弧度作单位;
cos(x)余弦函数;
arctan(x)反正切函数;
ln(x)自然对数;
exp(x)指数函数;求ex的值。
Sqrt(x)平方根函数;如sqrt(1.44)=1.2
trunc(x)截尾函数;截去实数x的小数部分,保留整数,例:trunc(-3.3)=-3;
round(x)舍入函数;将实数x四舍五入得到最接近的整数,例;round(3.3)=3,round(-8.9)=-9;

注意:实型数据没有pred和succ函数。

(3)布尔型数据的值只有两个:false和true,前者序号为0,后者序号为1。布尔类型数据最少,但用途广泛,主要用于程序设计中的流程控制和逻辑判断。

布尔型数据可作如下运算操作:
not(逻辑非),and(逻辑与),or(逻辑与)。

布尔型的标准函数:
ORD(X) 序号函数,例:ORD(FALSE)=0,ORD(TRUE)=1;
RRED(X) 前趋函数,例:PRED(TRUE)=FALSE,但X的值为TRUE时,只有前接值,没有后趋值;
SUCC(X)后继函数,例:SUCC(FALSE)=TRUE,但X的值为FALSE时,只有后继值,没有前趋值;
EOF(X)和EOLN(X)文件结束函数,行结束函数,此处不予以讨论。

(4)字符型数据取值范围:ASCⅡ码表中的一部分,包含几十个大小写英文字母与数字及数字、各种符号(含空格),注意每个字符符号均有相应的序号,而序号可视为整型数,所以字符型与整型是可以转换的。

在PASCAL程序中,用单引号括起来的一个字符表视字符型数据,如\'\'A\'\',\'\'8\'\',\'\'+\'\',\'\' \'\',分别表示字母A,数字8,字符+和空格。注意整型或实型的8与字符型的8是有本质的区别的。

字符型数据不可直接进行运算操作+、-、*、/;

字符型数据可做如下关系操作:>,<,=,<>,<=,>=,运算结果是布尔类型的值,即TRUE或FALSE。

字符性的标准函数:
ORD(x) 求X的序号,例如:ORD(\'\'C\'\')=67;ORD(\'\'0\'\')=48;ORD(\'\'A\'\')=65;
ORD(\'\'A\'\')=97;
PRED(X) 求X的前接值,例如:PRED(\'\'6\'\')=\'\'5\'\';
SUCC(X) 求X的后续值,例如:SUCC(\'\'6\'\')=\'\'7\'\'
CHR(X) 求序号为X的相应自负,是ORD的逆函数,例如:CHR(67)=\'\'C\'\';
CHR(ORD(\'\'X\'\')-1);

例如如下关系也成立;
ORD(\'\'9\'\')-ORD(\'\'1\'\')=57-49=8;
SUCC(X)=CHR(ORD(X)+1);如SUCC(\'\'B\'\')=CHR(ORD(\'\'B\'\')+1)=CHR(66+1)-C\'\';
PRED(X)=CHR(ORD(X)-1);如PRED( \'\'B\'\')=CHR(ORD(\'\'B\'\')-1)=CHR(66-1)=\'\'A\'\'。

http://www.ycyz.com.cn/lyx/CHENGXU/NOIP/PASCALjiao%27an.htm

Pascal语言函数集(含Delphi控件属性)

abort 函数
引起放弃的意外处理
abs 函数 绝对值函数
addexitproc 函数 将一过程添加到运行时库的结束过程表中
addr 函数
返回指定对象的地址
adjustlinebreaks函数 将给定字符串的行分隔符调整为cr/lf序列
align 属性 使控件位于窗口某部分
alignment 属性 控件标签的文字位置
allocmem 函数
在堆栈上分配给定大小的块
allowgrayed 属性 允许一个灰度选择
ansicomparestr 函数 比较字符串(区分大小写)
ansicomparetext 函数 比较字符串(不区分大小写)
ansilowercase 函数 将字符转换为小写
ansiuppercase 函数 将字符转换为大写
append 函数
以附加的方式打开已有的文件
arctan 函数 余切函数
assignfile 函数 给文件变量赋一外部文件名
assigned 函数 测试函数或过程变量是否为空
autosize 属性 自动控制标签的大小
backgrounddi2001.jpg 属性 背景色
beginthread 函数
以适当的方式建立用于内存管理的线程
bevelinner 属性
控件方框的内框方式
bevelouter 属性 控件方框的外框方式
bevelwidth 属性 控件方框的外框宽度
blockread 函数 读一个或多个记录到变量中
blockwrite 函数 从变量中写一个或多个记录
borderstyle 属性 边界类型
borderwidth 属性 边界宽度
break 命令 终止for、while、repeat循环语句
brush 属性 画刷
caption 属性 标签文字的内容
changefileext 函数 改变文件的后缀
chdir 函数 改变当前目录
checked 属性 确定复选框选中状态
chr 函数 返回指定序数的字符
closefile 命令 关闭打开的文件
color 属性 标签的颜色
columns 属性 显示的列数
comparestr 函数 比较字符串(区分大小写)
concat 函数 合并字符串
continue 命令 继续for、while、repeat的下一个循环
copy 函数 返回一字符串的子串
cos 函数
余弦函数
ctl3d 属性 是否具有3d效果
cursor 属性
鼠标指针移入后的形状
date 函数 返回当前的日期
datetimetofiledate函数 将delphi的日期格式转换为dos的日期格式
datetimetostr 函数 将日期时间格式转换为字符串
datetimetostring 函数 将日期时间格式转换为字符串
datetostr 函数 将日期格式转换为字符串
dayofweek 函数 返回星期的数值
dec 函数 递减变量值
decodedate 函数 将日期格式分解为年月日
decodetime 函数 将时间格式分解为时、分、秒、毫秒
delete 函数 从字符串中删除子串
deletefile 命令 删除文件
diskfree 函数 返回剩余磁盘空间的大小
disksize 函数 返回指定磁盘的容量
dispose 函数 释放动态变量所占的空间
disposestr 函数 释放字符串在堆栈中的内存空间
ditherbackgrounddi2001.jpg?
使背景色的色彩加重或减少50%
dragcursor 属性 当鼠标按下时光标的形状
dragmode 属性 按动的作用方式
dropdowncount 属性 容许的显示数据项的数目
editmask 属性 编辑模式
enabled 属性 是否使标签呈现打开状态
encodedate 函数 将年月日合成为日期格式
encodetime 函数
将时、分、秒、毫秒合成为时间格式
endmargin 属性 末尾边缘
eof 函数 对有类型或无类型文件测试是否到文件尾
eoln 函数 返回文本文件的行结束状态

erase 命令 删除外部文件
exceptaddr 函数 返回引起当前意外的地址
exclude 函数 从集合中删除一些元素
exceptobject 函数 返回当前意外的索引
exit 命令 立即从当前的语句块中退出
exp 函数 指数函数
expandfilename 函数 返回包含绝对路径的字符串
extendedselect 属性 是否允许存在选择模式,true时,multiselect才有意义
extractfiledir 函数 返回驱动器和路径
extractfileext 函数 返回文件的后缀
extractfilename 函数 返回文件名
extractfilepath 函数 返回指定文件的路径
fileage 函数 返回文件已存在的时间
fileclose 命令 关闭指定的文件
filecreate 命令 用指定的文件名建立新文件
filedatetodatetime 函数 将dos的日期格式转换为delphi的日期格式
fileexists 函数 检查文件是否存在
filegatattr 函数 返回文件的属性
filegetdate 函数 返回文件的dos日期时间标记
fileopen 命令 用指定的存取模式打开指定的文件
filepos 函数 返回文件的当前指针位置
fileread 命令 从指定的文件读取
filesearch 命令 在目录中搜索指定的文件
fileseek 函数 改变文件的指针
filesetattr 函数 设置文件属性
filesetdate 函数 设置文件的dos日期时间标记
filesize 函数 返回当前文件的大小
filewrite 函数 对指定的文件做写操作
fillchar 函数 用指定的值填充连续字节的数
findclose 命令 终止findfirst/findnext序列
findfirst 命令 对指定的文件名及属性搜索目录
findnext 命令 返回与文件名及属性匹配的下一入口
floattodecimal 函数 将浮点数转换为十进制数
floattostrf 函数 将浮点数转换为字符串
floattostr 函数 将浮点数转换为字符串
floattotext 函数 将给定的浮点数转换为十进制数
floattotextfmt 函数 将给定的浮点数转换为十进制数
flush 函数 将缓冲区的内容刷新到输出的文本文件中
fmtloadstr 函数
从程序的资源字符串表中装载字符串
fmtstr 函数 格式化一系列的参数,其结果以参数
result 返回
font 属性 设置字体
format 函数 格式化一系列的参数并返回pascal字符串
formatbuf 函数 格式化一系列的参数
formatdatetime函数 用指定的格式来格式化日期和时间
formatfloat 函数 指定浮点数格式
frac 函数 返回参数的小数部分
freemem 函数 按给定大小释放动态变量所占的空间
getdir 返回指定驱动器的当前目录
getheapstatus 返回内存管理器的当前状态
getmem 建立一指定大小的动态变量,并将指针指向该处
getmemorymanager 返回内存管理器的入口点
glyph 函数 按钮上的图象
halt 停止程序的执行并返回到操作系统
hi 返回参数的高地址位
high 返回参数的上限值
hint 属性 提示信息
int 返回参数的整数部分
include 添加元素到集合中
insert 在字符串中插入子串
inttohex 将整型数转换为十六进制数
inttostr 将整型数转换为字符串
ioresult 返回最新的i/o操作完成状态
isvalidident 测试字符串是否为有效的标识符
items 属性 默认显示的节点
kind 属性 摆放样式
largechange 属性 最大改变值
layout 属性 图象布局
length 函数 返回字符串的动态长度
lines 属性 缺省显示内容
ln 函数
自然对数函数
lo 函数 返回参数的低地址位
loadstr 函数 从应用程序的可执行文件中装载字符资源
lowercase 函数 将给定的字符串变为小写
low 函数 返回参数的下限值
max 属性 最大值
maxlength 属性 最大长度
min 属性 最小值
mkdir 命令 建立一子目录
move 函数 从源到目标复制字节
multiselect 属性 允许同时选择几个数据项
name 属性 控件的名字
new 函数 建立新的动态变量并设置一指针变量指向它
newstr 函数 在堆栈上分配新的字符串
now 函数 返回当前的日期和时间
odd 测试参数是否为奇数
onactivate 事件 焦点移到窗体上时触发
onclick 事件 单击窗体空白区域触发
ondblclick 事件 双击窗体空白区域触发
onclosequery 事件 使用者试图关闭窗体触发
onclose 事件 窗体关闭后才触发
oncreate 事件 窗体第一次创建时触发
ondeactivate 事件 用户切换到另一应用程序触发
ondragdrop 事件 鼠标拖放操作结束时触发
ondragover 事件 有其他控件从他上面移过触发
onmousedown 事件 按下鼠标键时触发
onmouseup 事件 释放鼠标键时触发
onmousemove 事件 移动鼠标时触发
onhide 事件 隐藏窗体时触发
onkeydown 事件 按下键盘某键时触发
onkeypress 事件 按下键盘上的单个字符键时触发
onkeyup 事件 释放键盘上的某键时触发
onpaint 事件 窗体上有新部分暴露出来触发
onresize 事件 重新调整窗体大小触发
onshow 事件 在窗体实际显示之前瞬间触发
ord 返回序数类的序数
outlinestyle 属性 类型
outofmemoryerror 引起
outofmemory 意外
pageindex 属性 页索引
pages 属性 页
paramcount 函数 返回在命令行上传递给程序的参数数量
paramstr 函数 返回指定的命令行参数
pen 属性 画刷设置
pi 函数 返回圆周率pi
picture 属性 显示图象
pictureclosed 属性 设置closed位图
pictureleaf 属性 设置leaf位图
pictureminus 属性 设置minus位图
pictureopen 属性 设置open位图
pictureplus 属性 设置plus位图
pos 函数 在字符串中搜索子串
pred 函数 返回先前的参数
random 函数 返回一随机函数
randomize 函数 用一随机数初始化内置的随机数生成器
read 函数 对有格式的文件,读一文件组件到变量中;对文本文件,读一个或多个值到一个或多个变量中
readln 函数 执行read过程,然后跳到文件下一行
readonly 属性 只读属性
reallocmem 函数 分配一动态变量
rename 函数 重命名外部文件
renamefile 函数 对文件重命名
reset 函数 打开已有的文件
rewrite 函数 建立并打开一新的文件
rmdir 函数 删除空的子目录
round 函数 将实数值舍入为整型值
runerror 函数 停止程序的执行
scrollbars 属性 滚动条状态
seek 函数 将文件的当前指针移动到指定的组件上
seekeof 函数 返回文件的文件结束状态
seekeoln 函数 返回文件的行结束状态
selectedcolor 属性 选中颜色
setmemorymanager 函数 设置内存管理器的入口点
settextbuf 函数 给文本文件指定i/o缓冲区
shape 属性 显示的形状
showexception 函数 显示意外消息与地址
sin 函数 正弦函数
sizeof 函数 返回参数所占的字节数
smallchange 属性 最小改变值
sorted 属性 是否允许排序
sqr 函数 平方函数
sqrt 函数 平方根函数
startmargin 属性 开始边缘
state 属性 控件当前状态
str 函数 将数值转换为字符串
stralloc 函数
给以null结束的字符串分配最大长度-1的缓冲区
strbufsize 函数 返回存储在由stralloc分配的字符缓冲区的最大字符数
strcat 函数 将一字符串附加到另一字符串尾并返回合并的字符串
strcomp 函数 比较两个字符串
strcopy 函数 将一个字符串复制到另一个字符串中
strdispose 函数 释放堆栈上的字符串
strecopy 函数 将一字符串复制到另一个字符串并返回结果字符串尾部的指针
strend 函数 返回指向字符串尾部的指针
stretch 属性 自动适应控件的大小
strfmt 函数 格式化一系列的参数
stricomp 函数 比较两个字符串(不区分大小写)
stringtowidechar 函数 将ansi字符串转换为unicode字符串
strlcat 函数 将一字符串中的字符附加到另一字符串尾并返回合并的字符串
strlcomp 函数 以最大长度比较两个字符串
strlcopy 函数 将一个字符串中的字符复制到另一个字符串中
strlen 函数 返回字符串中的字符数
strlfmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针
strlicomp 函数 以最大长度比较两个字符串(不区分大小写)
strlower 函数 将字符串中的字符转换为小写
strmove 函数 将一个字符串中的字符复制到另一个字符串中
strnew 函数 在堆栈上分配一个字符串
strpas 函数 将以null结束的字符串转换为pascal类的字符串
strpcopy 函数 将pascal类的字符串复制为以null结束的字符串
strplcopy 函数 从pascal类的最大长度字符串复制为以null结束的字符串
strpos 函数 返回一个字符串在另一个字符串中首次出现指针
strrscan 函数 返回字符串中最后出现字符的指针
strscan 函数 返回字符串中出现首字符的指针
strtodate 函数 将字符串转换为日期格式
strtodatetime 函数 将字符串转换为日期/时间格式
strtofloat 函数 将给定的字符串转换为浮点数
strtoint 函数 将字符串转换为整型
strtointdef 函数 将字符串转换为整型或默认值
strtotime 函数 将字符串转换为时间格式
strupper 函数 将字符串中的字符转换为大写
style 属性 类型选择
suce 函数 返回后继的参数
swap 函数 交换参数的高低地址位
tabs 属性 标记每一项的内容
tabindex 属性 标记索引
text 属性
显示的文本
texttofloat 函数 将字符串(以null结束的格式)转换为浮点数
time 函数 返回当前的时间
timetostr 函数 将时间格式转换为字符串
trim 函数 从给定的字符串中删除前导和尾部的空格及控制字符
trimleft 函数 从给定的字符串中删除首部的空格及控制字符
trimright 函数 从给定的字符串中删除尾部的空格及控制字符
trunc 函数 将实型值截取为整型值
truncate 函数 截去当前文件位置后的内容
unselectedcolor 属性 未选中颜色
upcase
将字符转换为大写
uppercase 将给定的字符串变为大写
val 函数 将字符串转换为整型值
vararraycreate 函数 以给定的界限和维数建立变体数组
vararraydimcount 函数 返回给定变体的维数
vararrayhighbound 函数 返回给定变体数组维数的上界
vararraylock 函数 锁定给定的变体数组
vararraylowbound 函数 返回给定变体数组维数的下界
vararrayof 函数 返回指定变体的数组元素
vararrayredim 函数 通过改变上限来调整变体的大小
vararrayunlock 函数 解锁指定的变体数组
varastype 函数 将变体转换为指定的类型
varcase 函数 将变体转换为指定的类型并保存它
varclear 函数 清除指定的变体
varcopy 函数 将指定的变体复制为指定的变体
varformdatetime 函数 返回包含日期时间的变体
varisarray 函数 测试变体是否为数组
varisempty 函数 测试变体是否为unassigned
varisnull 函数 测试变体是否为null
vartodatetime 函数 将给定的变体转换为日期时间
vartype 函数 将变体转换为指定的类型并保存它
visible 属性 控件的可见性
wantreturns 属性 为true时,按回车键产生一个回车符;为false时,按下ctrl+enter才产生回车符
write 命令 对有格式的文件,写一变量到文件组件中;对文本文件,写一个或多个值到文件中
writeln 命令 执行write过程,然后输出一行结束标志
widecharlentostring 函数 将ansi字符串转换为unicode字符串
widecharlentostrwar 函数 将unicode字符串转换为ansi字符串变量
widechartostring 函数 将unicode字符串转换为ansi字符串
widechartostrvar 函数 将unicode字符串转换为ansi字符串变量

Pascal中的常用数学函数

求绝对值函数abs(x)
定义:function Abs(X): (Same type as parameter);
说明:X可以是整型,也可以是实型;返回值和X的类型一致例子:
var
r: Real;
i: Integer;
begin
r := Abs(-2.3); { 2.3 }
i := Abs(-157); { 157 }
end.

取整函数int(x)
定义:function Int(X: Real): Real; 注意:X是实型数,返回值也是实型的;返回的是X的整数部分,也就是说,X被截尾了(而不是四舍五入)例子:
var R: Real;
begin
R := Int(123.567); { 123.0 }
R := Int(-123.456); { -123.0 }
end.

截尾函数trunc(x)
定义:function Trunc(X: Real): Longint; 注意:X是实型表达式. Trunc 返回Longint型的X的整数部分例子:
begin
Writeln(1.4, ' becomes ', Trunc(1.4)); { 1 }
Writeln(1.5, ' becomes ', Trunc(1.5)); { 1 }
Writeln(-1.4, 'becomes ', Trunc(-1.4)); { -1 }
Writeln(-1.5, 'becomes ', Trunc(-1.5)); { -1 }
end.

四舍五入函数round(x)
定义:function Round(X: Real): Longint; 注意:X是实型表达式. Round 返回Longint型的X的四舍五入值.如果返回值超出了Longint的表示范围,则出错. 例子:
begin
Writeln(1.4, ' rounds to ', Round(1.4)); { 1 }
Writeln(1.5, ' rounds to ', Round(1.5)); { 2 }
Writeln(-1.4, 'rounds to ', Round(-1.4));{ -1 }
Writeln(-1.5, 'rounds to ', Round(-1.5));{ -2 }
end.

取小数函数frac(x)
定义:function Frac(X: Real): Real; 注意:X 是实型表达式. 结果返回 X 的小数部分; 也就是说,Frac(X) = X - Int(_X). 例子:
var
R: Real;
begin
R := Frac(123.456); { 0.456 }
R := Frac(-123.456); { -0.456 }
end.

求平方根函数sqrt(x)和平方函数sqr(x)
定义:
平方根:function Sqrt(X: Real): Real;
注意:X 是实型表达式. 返回实型的X的平方根. 平方:function Sqr(X): (Same type as parameter);
注意:X 是实型或整型表达式.返回值的类型和X的类型一致,大小是X的平方,即X*X.
例子:
begin
Writeln('5 squared is ', Sqr(5)); { 25 }
Writeln('The square root of 2 is ',Sqrt(2.0)); { 1.414 }

Pascal函数实例

标准数据类型的含义及符号

(1)整型数的取值范围:-32768<=n<=32768;整型运算操作:+、-、*、div、mod;整型关系操作:=、<>、>=、<=,结果为布尔型;有关整型的标准函数:

整型函数

函数名 函数值 例
前接函数 pred(x) x-1 pred(4)=3
后继函数 succ(x) x+1 succ(-3)=-2
绝对值函数abs(x) |x| abs(-1)=1
平方函数sqr(x) x^2 sqr(-5)=25
奇函数 odd(x) x为奇数时值为True odd(1)=true
x为偶数时值为False odd(16)=false
字符函数chr(x) 序号为x的ASCII字符 chr(65)=\'\'a\'\'
a对应的序号65

(2)实型数的绝对值取值范围:1E-38~1E+38;计算机实数的表示标准形式往往类如1.2E-8,-1234.56E+3等形式;实数范围比整数大,但实型数的运算速度比整形数慢,另外实型数在存储时会出现小的误差;
实型的运算操作:+、-、*、/。只要有一个运算对象是实型量,其运算结果总是实型量,即其可与整型量混合计算。

实型的关系操作;=、<>、>=、<=,结果为布尔型,即两种结果:true或false。

实型函数种类:
abs(x);
sqr(x);
sin(x)正弦函数,求数学三角正弦函数的值,如sin(1.570789)=0.99999,注意X值要以弧度作单位;
cos(x)余弦函数;
arctan(x)反正切函数;
ln(x)自然对数;
exp(x)指数函数;求ex的值。
Sqrt(x)平方根函数;如sqrt(1.44)=1.2
trunc(x)截尾函数;截去实数x的小数部分,保留整数,例:trunc(-3.3)=-3;
round(x)舍入函数;将实数x四舍五入得到最接近的整数,例;round(3.3)=3,round(-8.9)=-9;

注意:实型数据没有pred和succ函数。

(3)布尔型数据的值只有两个:false和true,前者序号为0,后者序号为1。布尔类型数据最少,但用途广泛,主要用于程序设计中的流程控制和逻辑判断。

布尔型数据可作如下运算操作:
not(逻辑非),and(逻辑与),or(逻辑与)。

布尔型的标准函数:
ORD(X) 序号函数,例:ORD(FALSE)=0,ORD(TRUE)=1;
RRED(X) 前趋函数,例:PRED(TRUE)=FALSE,但X的值为TRUE时,只有前接值,没有后趋值;
SUCC(X)后继函数,例:SUCC(FALSE)=TRUE,但X的值为FALSE时,只有后继值,没有前趋值;
EOF(X)和EOLN(X)文件结束函数,行结束函数,此处不予以讨论。

(4)字符型数据取值范围:ASCⅡ码表中的一部分,包含几十个大小写英文字母与数字及数字、各种符号(含空格),注意每个字符符号均有相应的序号,而序号可视为整型数,所以字符型与整型是可以转换的。

在PASCAL程序中,用单引号括起来的一个字符表视字符型数据,如\'\'A\'\',\'\'8\'\',\'\'+\'\',\'\' \'\',分别表示字母A,数字8,字符+和空格。注意整型或实型的8与字符型的8是有本质的区别的。

字符型数据不可直接进行运算操作+、-、*、/;

字符型数据可做如下关系操作:>,<,=,<>,<=,>=,运算结果是布尔类型的值,即TRUE或FALSE。

字符性的标准函数:
ORD(x) 求X的序号,例如:ORD(\'\'C\'\')=67;ORD(\'\'0\'\')=48;ORD(\'\'A\'\')=65;
ORD(\'\'A\'\')=97;
PRED(X) 求X的前接值,例如:PRED(\'\'6\'\')=\'\'5\'\';
SUCC(X) 求X的后续值,例如:SUCC(\'\'6\'\')=\'\'7\'\'
CHR(X) 求序号为X的相应自负,是ORD的逆函数,例如:CHR(67)=\'\'C\'\';
CHR(ORD(\'\'X\'\')-1);

例如如下关系也成立;
ORD(\'\'9\'\')-ORD(\'\'1\'\')=57-49=8;
SUCC(X)=CHR(ORD(X)+1);如SUCC(\'\'B\'\')=CHR(ORD(\'\'B\'\')+1)=CHR(66+1)-C\'\';
PRED(X)=CHR(ORD(X)-1);如PRED( \'\'B\'\')=CHR(ORD(\'\'B\'\')-1)=CHR(66-1)=\'\'A\'\'。
very good
good
welcome
5
2

45
5
64
65464
64
4165
4654
64
6
46
46
4
63
31

416
46
4
41
31
54
64

.选择排序

选择排序的基本思想是:

对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,......,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。

例1:输入序列数据按非减顺序输出.

程序如下:

program xzpx;
const n=7;
var a:array[1..n] of integer;
i,j,k,t:integer;
begin
write('Enter date:');
for i:= 1 to n do read(a[i]);
writeln;
for i:=1 to n-1 do
begin
k:=i;
for j:=i+1 to n do
if a[j]<a[k] then k:=j;
if k<>i then
begin t:=a[i];a[i]:=a[k];a[k]:=t;end;
end;
write('output data:');
for i:= 1 to n do write(a[i]:6);
writeln;
end.

2.插入排序
插入排序的基本思想:经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置p,原来p后的元素一一向右移动一个位置,使得L[1..i]又是排好序的序列。

例2:输入序列数据按非减顺序输出.

程序1:

program crpx;
const n=7;
var a:array[1..n] of integer;
i,j,k,t:integer;
begin
write('Enter date:');
for i:= 1 to n do read(a[i]);
writeln;
for i:=2 to n do
begin
k:=a[i];j:=i-1;
while (k<a[j]) and (j>0) do
begin a[j+1]:=a[j];j:=j-1 end;
a[j+1]:=k;
end;
write('output data:');
for i:= 1 to n do write(a[i]:6);
writeln;
end.

3.冒泡排序

冒泡排序又称交换排序其基本思想是:对待排序的记录的关键字进行两两比较,如发现两个

记录是反序的,则进行交换,直到无反序的记录为止。

例:输入序列数据按非减顺序输出。

程序1:

program mppx;
const n=7;
var a:array[1..n] of integer;
i,j,k,t:integer;
begin
write('Enter date:');
for i:= 1 to n do read(a[i]);
for i:=1 to n -1 do
for j:=n downto i+1 do
if a[j-1]<a[j] then
begin t:=a[j-1];a[j-1]:=a[j];a[j]:=t end;
write('output data:');
for i:= 1 to n do write(a[i]:6);
writeln;
end.

程序2:

program mppx;
const n=7;
var a:array[1..n] of integer;
i,j,k,t:integer;
bool:boolean;
begin
write('Enter date:');
for i:= 1 to n do read(a[i]);
i:=1;bool:=true;
while (i<n) and bool do
begin
bool:=false;
for j:=n downto i+1 do
if a[j-1]<a[j] then
begin t:=a[j-1];a[j-1]:=a[j];a[j]:=t;bool:=true end;
i:=i+1;
end;
write('output data:');
for i:= 1 to n do write(a[i]:6);
writeln;
end.

程序3:

program mppx;
const n=7;
var a:array[1..n] of integer;
i,j,k,t:integer;
begin
write('Enter date:');
for i:= 1 to n do read(a[i]);
writeln;
k:=n;
while k>0 do
begin
j:=k-1;k:=0;
for i:=1 to j do
if a[i]>a[i+1] then
begin t:=a[i];a[i]:=a[i+1];a[i+1]:=t;k:=i;end;
end;
write('output data:');
for i:= 1 to n do write(a[i]:6);
writeln;
end.

返回

4.2快速排序

快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束.

例:输入一组数据小到大排序.

程序1:

program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x,t1:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin t1:=b[j];b[j]:=b[i];b[i]:=t1; end
until i=j;
b[i]:=x;
i:=i+1;j:=j-1;
if s<j then quicksort(b,s,j);
if i<t then quicksort(b,i,t);
end;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.

程序2:

program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin b[i]:=b[j];i:=i+1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin b[j]:=b[i];j:=j-1; end
until i=j;
b[i]:=x;
i:=i+1;j:=j-1;
if s<j then quicksort(b,s,j);
if i<t then quicksort(b,i,t);
end;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.

返回

4.3希尔排序

基本思想:将整个无序序列分割成若干小的子序列分别进行插入排序或冒泡排序。

序列分割方法:将相隔某个增量h的元素构成一个子序列。在排序过程中,逐次减小这个增量,最后当h减到1时,进行一次插入排序或冒泡排序,排序就完成。增量序列一般采用:d1=n div 2 ,di=di-1 div 2 ;i=2,3,4.....其中n为待排序序列的长度。

程序1:(子序列是插入排序)

program xepx;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i,j,t,d:integer;
bool:boolean;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
d:=n;
while d>1 do
begin
d:=d div 2;
for j:=d+1 to n do
begin
t:=a[j];i:=j-d;
while (i>0) and (a[i]>t) do
begin a[i+d]:=a[i];i:=i-d;end;
a[i+d]:=t;
end;
end;
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.

程序2:(子序列是冒泡排序)

program xepx;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i,temp,d:integer;
bool:boolean;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
d:=n
while d>1 do
begin
d:=d div 2;
repeat
bool:=true;
for i:=1 to n-d do
if a[i]>a[i+d] then
begin temp:=a[i];a[i]:=a[i+d];a[i+d]:=temp; bool:=false end;
until bool;
end;
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.

返回

4.4 堆排序与二叉树排序

1.堆排序

堆:设有数据元素的集合(R1,R2,R3,...Rn)它们是一棵顺序二叉树的结点且有

Ri<=R2i 和Ri<=R2i+1(或>=)

堆的性质:堆的根结点上的元素是堆中的最小元素,且堆的每一条路径上的元素都是有序的。

堆排序的思想是:

1)建初始堆(将结点[n/2],[ n/2]-1,...3,2,1分别调成堆)

2)当未排序完时

输出堆顶元素,删除堆顶元素,将剩余的元素重新建堆。

程序如下:

program duipx;
const n=8;
type arr=array[1..n] of integer;
var a:arr;i:integer;
procedure sift(var a:arr;l,m:integer);
var i,j, t:integer;
begin
i:=l;j:=2*i;t:=a[i];
while j<=m do
begin
if (j<m) and (a[j]>a[j+1]) then j:=j+1;
if t>a[j] then
begin a[i]:=a[j];i:=j;j:=2*i; end
else exit;
a[i]:=t;
end;

end;
begin
for i:=1 to n do read(a[i]);
for i:=(n div 2) downto 1 do
sift(a,i,n);
for i:=n downto 2 do
begin
write(a[1]:4);
a[1]:=a[i];
sift(a,1,i-1);
end;
writeln(a[1]:4);
end.

2.二叉树排序

排序二叉树:每一个参加排列的数据对应二叉树的一个结点,且任一结点如果有左(右)子树,则左(右)子树各结点的数据必须小(大)于该结点的数据。中序遍历排序二叉树即得排序结果。程序如下:

program pxtree;
const
a:array[1..8] of integer=(10,18,3,8,12,2,7,3);
type point=^nod;
nod=record
w:integer;
right,left:point ;
end;
var root,first:point;k:boolean;i:integer;
procedure hyt(d:integer;var p:point);
begin
if p=nil then
begin
new(p);
with p^ do begin w:=d;right:=nil;left:=nil end;
if k then begin root:=p; k:=false end;
end
else with p^ do if d>=w then hyt(d,right) else hyt(d,left);
end;
procedure hyt1(p:point);
begin
with p^ do
begin
if left<>nil then hyt1(left);
write(w:4);
if right<>nil then hyt1(right);
end
end;
begin
first:=nil;k:=true;
for i:=1 to 8 do hyt(a[i],first);
hyt1(root);writeln;
end.

返回

4.5 归并排序

归并就是将多个有序的数列合成一个有序的数列。将两个有序序列合并为一个有序序列叫二路归并(merge).归并排序就是n长度为1的子序列,两两归并最后变为有序的序列。

1.二路归并

例1:将有序表L1=(1,5,7),L2=(2,3,4,6,8,9,10)合并一个有序表 L.

program gb;

const m=3;n=7;

type arrl1=array[1..m] of integer;

arrl2=array[1..n] of integer;

arrl=array[1..m+n] of integer;

var a:arrl1;

b:arrl2;

c:arrl;

i,j,k,r:integer;

begin

write('Enter l1(sorted):');

for i:=1 to m do read(a[i]);

write('Enter l2(sorted):');

for i:=1 to n do read(b[i]);

i:=1;j:=1;k:=0;

while (i<=m) and (j<=n) do

begin

k:=k+1;

if a[i]<=b[j] then begin c[k]:=a[i];i:=i+1; end

else begin c[k]:=b[j];j:=j+1;end;

end;

if i<=m then for r:=i to m do c[m+r]:=a[r];

if j<=n then for r:=j to n do c[n+r]:=b[r];

writeln('Output data:');

for i:=1 to m+n do write(c[i]:5);

writeln;

end.

2.归并排序

program gbpx;
const maxn=7;
type arr=array[1..maxn] of integer;
var a,b,c:arr;
i:integer;
procedure merge(r:arr;l,m,n:integer;var r2:arr);
var i,j,k,p:integer;
begin
i:=l;j:=m+1;k:=l-1;
while (i<=m)and (j<=n) do
begin
k:=k+1;
if r[i]<=r[j] then begin r2[k]:=r[i];i:=i+1 end
else begin r2[k]:=r[j];j:=j+1 end
end;
if i<=m then
for p:=i to m do begin k:=k+1;r2[k]:=r[p] end;
if j<=n then
for p:=j to n do begin k:=k+1;r2[k]:=r[p] end;
end;
procedure mergesort( var r,r1:arr;s,t:integer);
var k:integer; c:arr;
begin
if s=t then r1[s]:=r[s] else
begin
k:=(s+t) div 2;
mergesort(r,c,s,k);
mergesort(r,c,k+1,t);
merge(c,s,k,t,r1)
end;
end;
begin
write('Enter data:');
for i:= 1 to maxn do
read(a[i]);
mergesort(a,b,1,maxn);
for i:=1 to maxn do
write(b[i]:9);
writeln;
end.

返回

4.6 线形排序

以上我们讨论的算法均是基于比较的排序算法,在排序算法中有基于数字本身的算法:计数、桶、基数排序。

1.计数排序

基本思想是对于序列中的每一元素x,确定序列中小于x的元素的个数。

例:n个整数序列且每个值在[1,m],排序之。

program jspx;
const m=6;n=8;
var i,j:integer;
a,b:array[1..n] of integer;
c:array[1..m] of integer;
begin
writeln('Enter data:');
for i:=1 to n do read(a[i]);
for i:=1 to m do c[i]:=0;
for i:=1 to n do c[a[i]]:=c[a[i]]+1;
for i:=2 to m do c[i]:=c[i]+c[i-1];
for i:=n downto 1 do
begin
b[c[a[i]]]:=a[i];
c[a[i]]:=c[a[i]]-1;
end;
writeln('Sorted data:');
for i:= 1 to n do
write(b[i]:6);
end.

2.桶排序

桶排序的思想是若待排序的记录的关键字在一个明显有限范围内(整型)时,可设计有限个有序桶,每个桶装入一个值,顺序输出各桶的值,将得到有序的序列。

例:输入n个0到100之间的整数,由小到大排序输出。

program tpx;
const n=7;
var b:array[0..100] of integer;
k:0..100;
i:integer;
begin
write('Enter date:(0-100)');
for i:=0 to 100 do b[i]:=0;
for i:= 1 to n do
begin
read(k);
b[k]:=b[k]+1;
end;
writeln('Output data:');
for i:=0 to 100 do
while b[i]>0 do begin write(i:6);b[i]:=b[i]-1 end;
writeln;
end.

3.基数排序

基本思想是对n个元素依次按k,k-1,...1位上的数字进行桶排序。

program jspx;
const n=8;
type link=^node;
node=record
data:integer;
next:link;
end;
var i,j,l,m,k:integer;
a:array[1..n] of integer;
s:string;
q,head:array[0..9] of link;
p,p1:link;
begin
writeln('Enter data:');
for i:=1 to n do read(a[i]);
for i:=5 downto 1 do
begin
for j:=0 to 9 do
begin
new(head[j]);
head[j]^.next:=nil;
q[j]:=head[j]
end;
for j:=1 to n do
begin
str(a[j],s);
for k:=1 to 5-length(s) do
s:='0'+ s;
m:=ord(s[i])-48;
new(p);
p^.data:=a[j];
p^.next:=nil;
q[m]^.next:=p;
q[m]:=p;
end;
l:=0;
for j:=0 to 9 do
begin
p:=head[j];
while p^.next<>nil do
begin
l:=l+1;p1:=p;p:=p^.next;dispose(p1);a[l]:=p^.data;
end;
end;
end;
writeln('Sorted data:');
for i:= 1 to n do
write(a[i]:6);
end.

4.7各种排序算法的比较

1.稳定性比较

插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的

选择排序、希尔排序、快速排序、堆排序是不稳定的

2.时间复杂性比较

插入排序、冒泡排序、选择排序的时间复杂性为O(n2)

其它非线形排序的时间复杂性为O(nlog2n)

线形排序的时间复杂性为O(n);

3.辅助空间的比较

线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为O(1);

4.其它比较

插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。

反而在这种情况下,快速排序反而慢了。

当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。

若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。

当n较大时,关键字元素比较随机,对稳定性没要求宜用快速排序。

当n较大时,关键字元素可能出现本身是有序的,对稳定性有要求时,空间允许的情况下。

宜用归并排序。

当n较大时,关键字元素可能出现本身是有序的,对稳定性没有要求时宜用堆排序

求素数:
程序如下
program lx;
label 10;
var
a;array[1..200]of integer;
x, y , n:integer;
begin
for x:=2 to 200 do begin
for y:=2 to x-1 do
if x mod y =0 then goto 10;
n:=n+1;
a[n]:=x;
10:
end;
end.

  • PASCAL闂
    绛旓細绗竴棰橈細vara:array[1..100]oflongint;n,m,x,y,i,j:longint;beginfori:=1to10doread(a[i]);n:=a[1];fori:=2to10doifa[i]>nthenbeginn:=a[i];x:=i;end;writeln(n,'',x);end.杩欓灏辨槸鏅氱殑璇诲叆鐒跺悗鎵炬渶澶э紝姣旇緝涓や釜鏁扮殑澶у皬锛屾妸澶х殑鍋氫竴涓爣璁帮紝鍐嶄笌涓嬩竴涓瘮杈冿紝濡傛灉...
  • pascal鐨勯棶棰
    绛旓細.閫夋嫨鎺掑簭 閫夋嫨鎺掑簭鐨勫熀鏈濇兂鏄細瀵瑰緟鎺掑簭鐨勮褰曞簭鍒楄繘琛宯-1閬嶇殑澶勭悊锛岀1閬嶅鐞嗘槸灏哃[1..n]涓渶灏忚呬笌L[1]浜ゆ崲浣嶇疆锛岀2閬嶅鐞嗘槸灏哃[2..n]涓渶灏忚呬笌L[2]浜ゆ崲浣嶇疆锛...锛岀i閬嶅鐞嗘槸灏哃[i..n]涓渶灏忚呬笌L[i]浜ゆ崲浣嶇疆銆傝繖鏍凤紝缁忚繃i閬嶅鐞嗕箣鍚庯紝鍓峣涓褰曠殑浣嶇疆灏卞凡缁忔寜浠庡皬鍒板ぇ...
  • pascal鍒濈骇棰樼洰
    绛旓細鏌愪粨搴5鏈1鏃ユ湁绮100鍚紝5鏈2鏃ュ張璋冭繘20鍚紝5鏈3鏃ュ崠鍑哄簱瀛樼殑3鍒嗕箣浜岋紝5鏈4鏃ュ張璋冭繘搴撳瓨鐨3鍊嶇伯椋燂紝闂浠撳簱浠5鏈1鏃ュ埌5鏈4鏃ユ湡闂存瘡澶╃殑绮鍒嗗埆鏄灏戝惃锛(杈撳嚭姣忓ぉ鐨勫簱瀛橀噺)鍒嗘瀽锛氬湪杩欎釜闂涓紝涓昏瑕佹弿杩颁粠5鏈1鏃ュ埌5鏈4鏃ユ湡闂翠粨搴撶殑绮搴撳瓨閲忥紝涓旀槗鐭ュ畠鏄笉鏂彉鍖栫殑銆傚洜姝ゆ垜浠彲浠...
  • pascal 鐨鍒濈骇棰
    绛旓細銆闂鎻忚堪銆戦櫠闄跺鐨勯櫌瀛愰噷鏈変竴妫佃嫻鏋滄爲,姣忓埌绉嬪ぉ鏍戜笂灏变細缁撳嚭10涓嫻鏋溿傝嫻鏋滄垚鐔熺殑鏃跺,闄堕櫠灏变細璺戝幓鎽樿嫻鏋溿傞櫠闄舵湁涓30鍘樼背楂樼殑鏉垮嚦,褰撳ス涓嶈兘鐩存帴鐢ㄦ墜鎽樺埌鑻规灉鐨勬椂鍊,灏变細韪╁埌鏉垮嚦涓婂啀璇曡瘯銆傜幇鍦ㄥ凡鐭10涓嫻鏋滃埌鍦伴潰鐨勯珮搴,浠ュ強闄堕櫠鎶婃墜浼哥洿鐨勬椂鍊欒兘澶熻揪鍒扮殑鏈澶ч珮搴,璇峰府闄堕櫠绠椾竴涓嬪ス鑳藉鎽樺埌鐨勮嫻鏋滅殑鏁扮洰銆
  • Pascal闂(鎬!!!)
    绛旓細222 娌℃湁鍙樹綋鏂规硶璋冪敤DISPATCHER 223 涓嶈兘寤虹珛鍙樹綋鏁扮粍 224 鍙樹綋涓嶅寘鍚暟缁 225 鍙樹綋鏁扮粍杈圭晫閿欒 226 TLS鍒濆鍖栭敊璇 Pascal缂栬瘧閿欒瀵圭収琛 涓嬮潰鍒楀嚭鍦ㄧ紪璇戠▼搴忔椂鍙兘鍑虹幇鐨勯敊璇紝鍦ㄩ泦鎴愮幆澧冧笅锛孴urbo Pascal灏嗚嚜鍔ㄥ姞杞芥簮绋嬪簭骞跺畾浣嶄簬鍑洪敊澶勩俵鍐呭瓨婧㈠嚭 2缂烘爣璇嗙 3鏍囪瘑绗︽湭瀹氫箟 4鏍囪瘑绗﹂噸瀹氫箟 5璇硶閿欒...
  • pascal闂
    绛旓細姝hВ锛氬姣忎釜i鐐圭淮鎶extA[i],nextB[i]琛ㄧずi寰鍚嶢鐨勮瘽鍘诲摢閲,B鐨勮瘽鍘诲摢閲屻傝繖涓彲浠ョ敤閾捐〃鏉ヨ绠楋紝鎴戜滑鎶婃墍鏈夋暟浠庡皬鍒板ぇ鎺掑簭锛岀劧鍚庝覆鎴愪竴涓摼琛ㄣ備粠1鍒皀姣忔鎵綡i鍦ㄩ摼琛ㄩ噷鐨勫墠鍚4涓垽鏂竴涓嬶紝鐒跺悗鎶奌i浠庨摼琛ㄩ噷鍒犳帀銆傜劧鍚庤繖鏍锋垜浠啀鐢╪extAB[i]琛ㄧずi寰鍚嶢璧颁竴娆璧颁竴娆″埌鍝噷銆傞偅涔堝彲浠ュ彂鐜癷->...
  • pascal闂
    绛旓細//閽堝闂1锛屽皢鍘熺▼搴忎腑鐨刧鏀逛负c鍙锛屽瓙绋嬪簭涓彲鐩存帴淇敼涓荤▼搴忎腑鐨勫彉閲 end;begin writeln ('input to check if the number is ');readln(b);writeln ('It has');check(b); //姝ゅ鏀瑰姩閽堝闂1锛屾病鏈夊繀瑕佺敤涓や釜鍙傛暟 writeln;if c=1 then writeln('no')else writeln('yes or 1')...
  • 闂嚑涓緢鍋忕殑闂(pascal)
    绛旓細1銆佹暟缁勫垵濮嬪寲涓紝鍒濆鍖栫殑鍊煎彧鑳戒负0锛屽鏋滃垵濮嬪寲鍏跺畠鐨勬暟锛岄偅涔堜細閫犳垚绯荤粺鏃犳硶璇嗗埆锛岀劧鍚庡畾涔夊埌涓涓湭鐭ョ殑鏁颁腑锛岀劧鍚庨犳垚绋嬪簭浜х敓閿欒銆2銆乤-c*b蹇紝鍥犱负杩欐槸鐩存帴鐨勮繍绠楋紙鍙互鍙g畻寰楀嚭锛夋槸涓绉嶈繍绠楃鍙凤紝涓嶉渶瑕佽皟鐢ㄥ唴閮ㄧ郴缁熺▼搴忥紝浣嗘槸mod瀹冮渶瑕佽皟鐢ㄥ唴閮ㄧ郴缁熺▼搴忥紝缁忚繃姣旇緝锛屽洜涓篴-c*b鏄2娆¤繍绠楋紝mod...
  • 鍑犻亾Pascal灏闂 璺眰绛旀!!!
    绛旓細2銆佺涓涓湴鍧鏄100 闀垮害涓2 绗簩涓槸102 绗笁涓槸104鈥︹︽墍浠ュ緱 n=锛坣-1)*2+100 3銆丆 绾挎ф帰鏌ユ硶鏄疕ash琛ㄧ殑搴旂敤锛岃嚜宸卞幓缃戜笂鐪 5銆9 6銆4娆°傚厛璺熶腑闂存暟15姣旓紝姣15灏忥紱鍐嶈窡鍓嶅崐娈电殑涓棿鏁7姣旇緝锛氭瘮7澶э紱鍙墿涓2涓暟浜嗭紝璺10姣旇緝锛屾瘮10澶э紱璺14姣旇緝锛屾瘮14灏忥紱7銆乶-i+1 鏍...
  • PASCAL 绋嬪簭闂
    绛旓細鎴戜滑鐭ラ亾,[琛ㄧず鍖呮嫭,)琛ㄧず涓嶅寘鎷,鎵浠andom璇彞鍙細浜х敓0鍒1浣嗕笉鍖呮嫭1鐨勬暟 2.readln璇彞琛ㄧず涓鐩磋鍏ユ暟鎹洿鍒伴亣鍒扮涓涓崲琛岀 鎴戜滑鐭ラ亾鍦╢p涓,绋嬪簭涓杩愯缁撴潫灏辩珛鍒婚鍑篸os灞忓箷,鍙互鎸塧lt+F5鏌ョ湅dos灞忓箷涓殑鍐呭 鍍忎笂闈㈣繖绉嶅湪绋嬪簭鐨勬湯灏惧姞涓readln,灏辩浉褰撲簬璁╃▼搴忚鍏ヤ竴琛岀殑鏁版嵁(杩欎簺鏁版嵁骞舵病鏈夊疄闄...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网