谁能为我分析以下pascal程序

来源:百度知道 编辑:UC知道 时间:2024/06/24 06:17:23
从键盘读取A,B 数组的元素,A,B 数组均已从小到大排好序(无相同元素),现将A,B 合并为数组C,同样要求数组C 也是从小到大排好序(有相同元素时只保留一个)。
程序中n 表示数组A,B 的长度,i,j,k 分别表示数组A,B,C 的取数或存数的指针。

program excp3;
const n=8; m=2*n;
type arr1=array [1..n] of integer;
arr2=array [1..m] of integer;
var a,b : arr1; c : arr2;i,j,k :integer;
procedure copy(x: arr1;var y:arr2; var i,j : integer);
begin i:=i+1;
y[i]:=x[j];j:=j+1;
end;
begin
for i:=1 to n do read(a[i] );readln;
for i:=1 to n do read( b[i] );readln;
i:=1;j:=1; k:=0 ;
while (I<=n) and (j<=n) do
if a[i]<b[j] then copy (a,c,k,i) { 如果A 数组值小于B 数组,则将A 赋值到C 数组}
else if b[j]<a[i] then copy (b,c,k,j) { 将B 赋值到C}
else begin
copy(a,c,k,i); {A与B 的值相同,指针均加1
j:=j+1 ;
end;
while I<= n do copy(a,c,k,i);
while j<=n do copy(b,c,k,j);
writeln
for i:=1 to k do write (c[i]:4);
writeln;
end.

program excp3;
const n=8; m=2*n;
type arr1=array [1..n] of integer;
arr2=array [1..m] of integer;
var a,b : arr1; c : arr2;i,j,k :integer;
procedure copy(x: arr1;var y:arr2; var i,j : integer);
begin // copy(x,y,i,j)就是把xj的元素赋值给yi
i:=i+1;
y[i]:=x[j];j:=j+1;
end;
begin
for i:=1 to n do read(a[i] );readln;
for i:=1 to n do read( b[i] );readln;
i:=1;j:=1; k:=0 ;
while (I<=n) and (j<=n) do //在a,b都没元素取完时,把较小的先赋值给c
if a[i]<b[j] then copy (a,c,k,i) { 如果A 数组值小于B 数组,则将A 赋值到C 数组}
else if b[j]<a[i] then copy (b,c,k,j) { 将B 赋值到C}
else begin
copy(a,c,k,i); {A与B 的值相同,指针均加1 ,同时赋值给c}
j:=j+1 ;
end;
while I<= n do copy(a,c,k,i); //若b的取完了,a的还有剩余,把剩下的全给c
while j<=n do copy(b,c,k,j); //同理于上一步
writeln
for i:=1 to k do write (c[i]:4);
writeln;
end.