Выполнить сортировку массива включением - Turbo Pascal

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

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

Задан массив AX (N). Добавить массив С(К). Выполнить сортировку включением. В полученном массиве положительные элементы уменьшите вдвое, а отрицательные замените на значения их индексов. У меня сортирует как-то, но неправильно.. не по возрастанию( помогите пожалуйста исправить ошибку в сортировке.

Решение задачи: «Выполнить сортировку массива включением»

textual
Листинг программы
Program Practica9;
uses crt;
const n=4;
      k=5;
var ax,c: array [1..n+k] of real;
    m,i,j,p: integer;
    x:real;
begin
  clrscr;
  randomize;
  writeln('Исходный массив AX');
  for i:=1 to n do
   begin
    ax[i]:=-5+10*random;
    write(ax[i]:5:1)
   end;
  writeln;
  writeln('Исходный массив C');
  for i:=1 to k do
   begin
    c[i]:=-5+10*random;
    write(c[i]:5:1)
   end;
  writeln;
  m:=n;
  for i:=1 to k do
   begin
    m:=m+1;
    ax[m]:=c[i]
   end;
  Writeln('Объединенный массив A+C: ');
  for i:=1 to m do
  Write(ax[i]:5:1);
  Writeln;
  for i:=2 to m do
   begin
    x:=ax[i];{запоминаем очередной элемент}
    j:=1;{смотрим что слева от него}
    while x>ax[j] do inc(j);{пока все меньше данного, идем вперед}
    for p:=i-1 downto j do{нашли меньший, сдвигаем массив от этого элемента-1}
    ax[p+1]:=ax[p];{на 1 вправо}
    ax[j]:=x;{вставляем найденный элемент на место}
   end;
  writeln('Отсортированный массив:');
  for i:=1 to m do
  Write(ax[i]:5:1);
  writeln;
  writeln('Новый массив:');
  for i:=1 to m do
   begin
    if ax[i]>0 then ax[i]:=ax[i]/2
    else if ax[i]<0 then ax[i]:=i;
    write(ax[i]:5:1)
   end;
  writeln;
  readln;
end.

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

  1. В программе объявлены две переменные: ax и c. Первая представляет собой массив из n+k элементов типа real, а вторая также является массивом из k элементов типа real.
  2. В блоке clrscr вызывается функция, которая очищает экран.
  3. Далее, в блоке randomize вызывается функция, которая генерирует случайное число в заданном диапазоне.
  4. Затем, в блоке writeln выводится исходный массив ax.
  5. После этого, в блоке for вычисляется значение переменной m, которое представляет собой сумму n и k.
  6. В следующем блоке for вычисляется значение переменной i.
  7. Затем, в блоке while происходит цикл, который продолжается до тех пор, пока i меньше или равно k.
  8. Внутри цикла while происходит поиск наименьшего элемента в массиве ax. Для этого переменная j сдвигается влево от i, пока значение ax[j] больше значения x.
  9. Когда наименьший элемент найден, он вставляется на место в массиве ax, используя переменные p и i.
  10. После этого, в блоке for выводится отсортированный массив ax.
  11. Затем, в блоке if происходит проверка каждого элемента массива ax на положительность или отрицательность. Если элемент положительный, то его значение делится на 2. Если элемент отрицательный, то его значение заменяется на i.
  12. Наконец, в блоке write выводится новый массив, который представляет собой отсортированный массив ax.

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


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

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

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