Объединить элементы двух массивов в один по неубыванию - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Заданы два массива с N и M элементами, упорядоченными по неубыванию, объединить элементы этих массивов в один массив так, чтобы элементы снова оказались упорядоченными по неубыванию.
Не получается составить код Паскаль

Решение задачи: «Объединить элементы двух массивов в один по неубыванию»

textual
Листинг программы
const
  Max = 10;
 
type
  inDat = array [1..Max] of integer;
  outDat = array [1..Max * 2] of integer;
 
var 
  n, m, o, x, y: integer;
  Ax, Ay: inDat;
  Z: outDat;
 
procedure printMas;//вывод массивов на экран
var n:integer;
begin
Writeln('Массив X - ');
for  n := 1 to Max do write(Ax[n]:4);
writeln;
Writeln('Массив Y - ');
for  n := 1 to Max do write(AY[n]:4);
writeln; 
end;
 
begin
    randomize;
    for n := 1 to Max do  //создаем два случайных массива
    begin
      Ax[n] := 50 - random(101);
      Ay[n] := 50 - random(101);
    end;
    printMas; 
    for n := 1 to Max - 1 do    //сортировка "пузырьком"
      for m := 1 to Max - n do
      begin
        if Ax[m] > Ax[m + 1] then 
        begin
          x := Ax[m];
          Ax[m] := Ax[m + 1];
          Ax[m + 1] := x;
        end;
        if Ay[m] > Ay[m + 1] then 
        begin
          y := Ay[m];
          Ay[m] := Ay[m + 1];
          Ay[m + 1] := y;
        end;
      end;     
  writeln('Отсортированные массивы:');
  printMas;
  
  n := 1;m := 1;o := 1;//задаем счетчики  
  while (n <= Max) or (m <= Max) do
  begin
    if n > max then //если один массив до конца дочитан то читаем другой до конца
    begin
      Z[o] := Ay[m]; 
      inc(m);
      inc(o);      
    end else    
    if m > Max then //и наоборот
    begin
      Z[o] := Ax[n]; 
      inc(n);
      inc(o);
    end;
    if (m <= Max) and (n <= Max) then //а пока ни один не дочитан до конца
    begin
      if Ax[n] > Ay[m] then //сравниваем элементы массивов и меньший пишем в третий массив
      begin
        Z[o] := Ay[m];
        inc(m);
        inc(o);      
      end else      
      begin
        Z[o] := Ax[n];      
        inc(n);
        inc(o);    
      end;   
    end;
  end;   
  writeln('Итоговый массив  Z - '); 
    for n := 1 to Max*2 do write(Z[n]:4);
end.

Объяснение кода листинга программы

  1. Объявляются две переменные типа inDat, которые представляют собой массивы целых чисел размером до 10.
  2. Объявляется переменная типа outDat, которая представляет собой массив целых чисел размером до 20.
  3. Объявляются три переменные n, m и o, которые будут использоваться для отслеживания текущего элемента в каждом из массивов.
  4. Переменные Ax и Ay инициализируются случайными числами от 50 до 100.
  5. Выводится содержимое массивов X и Y.
  6. Массивы X и Y сортируются в порядке убывания с помощью алгоритма пузырька.
  7. Задаются счетчики n, m и o для отслеживания элементов массивов.
  8. Пока есть элементы в массивах X и Y, происходит следующее:
    • Если элемент в массиве X больше элемента в массиве Y, то записывается элемент из массива Y в итоговый массив Z.
    • Если элемент в массиве Y больше элемента в массиве X, то записывается элемент из массива X в итоговый массив Z.
    • Если элементы в массивах X и Y одинаковы, то записывается элемент из массива X в итоговый массив Z.
  9. Выводится содержимое итогового массива Z.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы