Метод вставок - Pascal

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

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

Задано массив на 10000 элементов целого типа integer. Использовать метод вставок. Упорядочить его за убыванием значений его НЕ НУЛЕВЫХ элементов. Результат записать в типизированный файл. То есть, например, если в массиве числа 1, 0,-5,-2, 0, 3, 4, то должно получиться -5, 0, -2, 1, 0, 3, 4. Как поставить нулевые элементы на ихние места? Программу сделал пока без типизированных файлов.

Решение задачи: «Метод вставок»

textual
Листинг программы
program ins_sort_exc_0;
const
        n=7;
        a:array[1..n] of integer = ( 1, 0, -5, -2, 0, 3, 4);
var
        i,j,k:byte;
        z:integer;
begin
for i:=1 to n do write(a[i],' '); writeln;
for i:=2 to n do
if a[i]<>0 then
        begin
        z:=a[i];
        j:=i-1;
        k:=0;
        while (j>=1) and ((a[j]>z) or (a[j]=0)) do
                begin
                if a[j]<>0 then
                        begin
                        a[j+1+k]:=a[j];
                        k:=0
                        end
                else k:=k+1;
                j:=j-1
                end;
        a[j+1+k]:=z
        end;
for i:=1 to n do write(a[i],' '); readln
end.

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

  1. Объявлены константы и переменные:
    • n = 7 (количество элементов в массиве)
    • a = (1, 0, -5, -2, 0, 3, 4) (массив из 7 элементов)
    • i, j, k = byte (переменные для цикла)
    • z = integer (переменная для временного хранения элемента)
  2. Выводится содержимое массива a на экран.
  3. Начинается второй цикл, который выполняет метод вставок для сортировки массива a по возрастанию:
    • Если a[i] не равно 0, то начинается внутренняя часть цикла.
    • Значение a[i] сохраняется в переменной z.
    • Переменная j инициализируется значением i-1.
    • Переменная k инициализируется значением 0.
    • Пока j больше или равно 1 и (a[j] больше z или a[j] равно 0), выполняется следующая часть цикла:
    • Если a[j] не равно 0, то выполняется следующая часть цикла:
    • a[j+1+k] присваивается значение a[j].
    • k увеличивается на 1.
    • Если a[j] равно 0, то k увеличивается на 1.
    • j уменьшается на 1.
    • После выхода из внутреннего цикла, a[j+1+k] присваивается значение z.
  4. Выводится содержимое массива a на экран.
  5. Программа ожидает ввода данных с клавиатуры (возможно, для проверки).

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


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

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

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