Вопрос задан 26.03.2021 в 09:33. Предмет Информатика. Спрашивает Maratov Adilet.

10 баллов. Нужно было написать код программы, которая продемонстрирует работу сортировки вставками.

(Т.е. прочитать массив и затем выводить его после каждой вставки). Написала, вроде - бы хорошо работает. Но вот почему - то выводит одну и ту же строку по два раза... type array_type = array [1..1000] of int64; procedure InsertSort(var a: array_type; n: int64); var  i, j, l, s: integer; begin  for i := 2 to n do  begin    l := a[i];    j := i - 1;    while (j >= 1) and (a[j] > l) do    begin      a[j + 1] := a[j];      j := j - 1;    end;    a[j + 1] := l;    for s := 1 to n do write(a[s], ' ');    writeln();  end; end; var  a: array_type;  i, n: int64; begin  readln(n);  for i := 1 to n do read(a[i]);  InsertSort(a, n);  for i := 1 to n do write(a[i], ' '); end.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Иванова Таня.
Потому что у тебя идет печать массива для каждого элемента, даже если он стоит в правильном порядке относительно предыдущего, а в таком случае вставки не происходит. Добавь вот это в цикл функции:

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

В вашем коде проблема заключается в том, что вы не обновляете значение переменной n после каждой вставки элемента в отсортированную часть массива. Поэтому в цикле for s := 1 to n do write(a[s], ' '); вы выводите массив полностью каждый раз, включая неотсортированную часть.

Чтобы исправить это, вы можете добавить обновление переменной n после каждой вставки элемента. Вот исправленный код:

pascal
type array_type = array [1..1000] of int64; procedure InsertSort(var a: array_type; var n: int64); var i, j, l, s: integer; begin for i := 2 to n do begin l := a[i]; j := i - 1; while (j >= 1) and (a[j] > l) do begin a[j + 1] := a[j]; j := j - 1; end; a[j + 1] := l; n := n + 1; // Обновление значения n for s := 1 to n do write(a[s], ' '); writeln(); end; end; var a: array_type; i, n: int64; begin readln(n); for i := 1 to n do read(a[i]); InsertSort(a, n); for i := 1 to n do write(a[i], ' '); end.

Теперь после каждой вставки элемента в массив вы обновляете значение n, чтобы оно отражало текущий размер отсортированной части массива. Это позволяет правильно выводить массив после каждой итерации сортировки.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос