 
Вопрос задан 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
    Ответы на вопрос
 
        Отвечает Иванова Таня.
                
                   Потому что у тебя идет печать массива для каждого элемента, даже если он стоит в правильном порядке относительно предыдущего, а в таком случае вставки не происходит. Добавь вот это в цикл функции:              
                            
 0
                    0
                     0
                    0
                 
            Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
                
    В вашем коде проблема заключается в том, что вы не обновляете значение переменной n после каждой вставки элемента в отсортированную часть массива. Поэтому в цикле for s := 1 to n do write(a[s], ' '); вы выводите массив полностью каждый раз, включая неотсортированную часть.
Чтобы исправить это, вы можете добавить обновление переменной n после каждой вставки элемента. Вот исправленный код:
pascaltype 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
                     0
                    0
                Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
	- 
			Математика 
- 
			Литература 
- 
			Алгебра 
- 
			Русский язык 
- 
			Геометрия 
- 
			Английский язык 
- 
			Химия 
- 
			Физика 
- 
			Биология 
- 
			Другие предметы 
- 
			История 
- 
			Обществознание 
- 
			Окружающий мир 
- 
			География 
- 
			Українська мова 
- 
			Информатика 
- 
			Українська література 
- 
			Қазақ тiлi 
- 
			Экономика 
- 
			Музыка 
- 
			Право 
- 
			Беларуская мова 
- 
			Французский язык 
- 
			Немецкий язык 
- 
			МХК 
- 
			ОБЖ 
- 
			Психология 
- 
			Физкультура и спорт 
- 
			Астрономия 
- 
			Кыргыз тили 
- 
			Оʻzbek tili 
 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			