###### tags: `Pascal Programming D1` # Merge2SortedLists(P.439)[LO] # Not surprised if there're typos X) program Merge2; 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 + NB] := B[count] else for count := pointA to NA do C[count + NA] := A[count] end; procedure DisplayResults(A: ArrayTypeA; B: ArrayTypeB; NA, NB : integer; C : ArrayTypeC); var count : integer; begin write('A:'); for count := 1 to NB do write( A[count] :3 ); writeln; write('B:'); for count := 1 to NB do write( B[count] :3 ) end; begin InputData; Merge(ListA, ListB, numA, numB, ListC); DisplayResults(ListA, ListB, numA, numB, ListC) end.