Соединить два массива в один, сохраняя упорядоченность. - Turbo Pascal
Формулировка задачи:
Даны два вектора {xi}, {yi}, i=1, ..., 10, упорядоченные по возрастанию. Соедините их в один вектор {zi}, i=1, ..., 20 так, чтобы сохранилась упорядоченность.
Решение задачи: «Соединить два массива в один, сохраняя упорядоченность.»
textual
Листинг программы
procedure vMerge(const a, b: array of Integer; var c: array of Integer);
var i, j, k: Integer;
begin
i:=0; j:=0; k:=0;
while (i<=High(a)) and (j<=High(b)) do
if a[i]<b[j] then begin
c[k]:=a[i]; Inc(i); Inc(k);
end else begin
c[k]:=b[j]; Inc(j); Inc(k);
end;
for i:=i to High(a) do begin c[k]:=a[i]; Inc(k); end;
for j:=j to High(b) do begin c[k]:=b[j]; Inc(k); end;
end;
procedure vWrite(const a: array of Integer);
var i: Integer;
begin
for i:=0 to High(a) do Write(' ',a[i]); WriteLn;
end;
procedure vGen(var a: array of Integer; b, c: Integer);
var i: Integer;
begin
for i:=0 to High(a) do a[i]:=b+Random(c);
end;
procedure vSort(var a: array of Integer);
var i, j, t: Integer; Done: Boolean;
begin
for i:=High(a) downto 1 do begin
Done:=True;
for j:=1 to i do
if a[j]<a[j-1] then begin
t:=a[j]; a[j]:=a[j-1]; a[j-1]:=t; Done:=False;
end;
if Done then Break;
end;
end;
var
a: array [1..9] of Integer;
b: array [1..11] of Integer;
c: array [1..High(a)-Low(a)+High(b)-Low(b)+2] of Integer;
begin
Randomize;
vGen(a,0,100); vGen(b,0,100); vSort(a); vSort(b); vMerge(a,b,c);
Write('A ='); vWrite(a);
Write('B ='); vWrite(b);
Write('C ='); vWrite(c);
end.
Объяснение кода листинга программы
- В процедуре vMerge два массива a и b соединяются в один массив c, при этом сохраняется упорядоченность. Переменные i, j и k используются для отслеживания индексов элементов массивов a и b, а также для обновления соответствующих элементов массива c.
- В процедуре vWrite элементы массива a выводятся на экран через пробелы.
- В процедуре vGen каждому элементу массива a присваивается значение, полученное путем добавления случайного числа к значению элемента массива b.
- В процедуре vSort массив a сортируется в порядке возрастания. Переменная Done используется для отслеживания того, была ли выполнена сортировка, и если да, то прерывается цикл сортировки.
- В основной программе генерируются два массива a и b, затем они сортируются и соединяются в массив c с помощью процедуры vMerge. Затем выводятся на экран значения массивов a, b и c.