###### tags: `Pascal Programming D1`
# Merge2SortedLists TB P.439
program Merge2SortedLists;
const
numA=4;
numB=3;
numC=numA+numB;
type
ArrayTypeA=array[1..numA] of integer;
ArrayTypeB=array[1..numB] of integer;
ArrayTypeC=array[1..numC] of integer;
var
ListA : ArrayTypeA;
ListB : ArrayTypeB;
ListC : ArrayTypeC;
procedure InputData;
begin
ListA[1]:=1; ListB[1]:=2;
ListA[2]:=3; ListB[2]:=3;
ListA[3]:=5; ListB[3]:=4;
ListA[4]:=6;
end;
procedure Merge(A: ArrayTypeA; B:ArrayTypeB; NA,NB : integer; var C: ArrayTypeC);
var
pointA,pointB,pointC:integer;
count:integer;
begin
pointA:=1; pointB:=1; pointC:=1;
repeat
if A[pointA]<=B[pointB]
then begin
C[pointC]:=A[pointA];
pointA:=pointA+1
end
else begin
C[pointC]:=B[pointB];
pointB:=pointB+1
end;
pointC:=pointC+1
until (pointA>NA)or(pointB>NB);
if pointA>NA
then for count:=pointB to NB do
C[count+NA]:=B[count]
else for count:=pointA to NA do
C[count+NB]:=A[count]
end;
procedure DispalyResults(A: ArrayTypeA; B:ArrayTypeB; NA,NB : integer; var C: ArrayTypeC);
var
count: integer;
begin
write('A:');
for count := 1 to NA do
write(A[count]:3);
writeln;
write('B:');
for count := 1 to NB do
write(B[count]:3);
writeln;
write('C:');
for count := 1 to NA+NB do
write(C[count]:3);
end;
begin
InputData;
Merge(ListA,ListB,numA,numB,ListC);
DIspalyResults(ListA,ListB,numA,numB,ListC);
end.