pascal常用子程序.doc
文本预览下载声明
常用算法子程序
基本数学类:
两个变量交换数值:
procedure swap(a,b:integer;var c,d:integer);
begin
c:=b; d:=a;
end;
两组数据交换数值:
procedure swap(i,j:integer;); //传入两个数组的下标
var k,l:integer;
begin
for k:=1 to n do
begin
l:=a[i,k]; a[i,k]:=a[j,k]; a[j,k]:=l;
end;
end;
求两数的最大值:
function max(a,b:integer):integer;
begin
If ab then max:=a else max:=b;
end;
求一组数的最小值:
function min(a:arr)of integer;
var i:integer;
begin
min:=maxint;
for i:=1 to a[0] do
if mina[i] then min:=a[i];
end;
求两个数的最大公约数:
function??gcd(a,b:integer):integer;
?begin?
???if?b=0?then?gcd:=a
?????else?gcd:=gcd(b,a?mod?b);
end?;
判断一个数是否是素数
function?prime?(n:?integer):?Boolean;var?i:?integer;begin???? ?for?i:=2?to?trunc(sqrt(n))?do??????? if?n?mod?i=0?then?
begin??? prime:=false;? exit; end;??? ??prime:=true;end;
求出1~n范围内的所有素数
procedure getprime(n:longint; var a:arr);
var i,j,l:longint;
t:array[1..50000] of boolean;
begin
fillchar(t,sizeof(t),true);
t[1]:=false; i:=2;
while in do
begin
if p[i] then
begin
j:=i*2;
while jn do begin t[j]:=false; inc(j,i); end;
end;
inc(i);
end;
l:=0;
for i:=1 to n do
if t[i] then begin inc(l);a[l]:=i; end;
a[0]:=l;
end;
进位制转换:
(1)十进制转k进制:
///////////////////////////////////////////////////////整数///////////////////////////////////////////////////////////////
procedure trans_10_k(n,k:longint;var a:arr);
var i:longint;
begin
fillchar(a,sizeof(a),0);
while n0 do
begin
inc(a[0]); a[a[0]]:=n mod k; n:=n div k;
end;
If a[0]=0 then a[0]:=1;
end;
/////////////////////////////////////////////////////////小数///////////////////////////////////////////////////////////
procedure trans_10_k(m:real;l,k:integer; var a:arr); //小数(l=16时相当于十进
//制的第5位)
begin
fillchar(a,sizeof(a),0);
while (m0)and(a[0]=l) do
begin
m
显示全部