
Вопрос задан 29.07.2023 в 07:04.
Предмет Информатика.
Спрашивает Ямлихина Аделя.
Пишет "Ошибка времени выполнения: System.IndexOutOfRangeException: Индекс находился вне границ
массива." и не выводит отсортированный массив. Что делать? //Ввести кол-во эл-тов n одномерного массива целого типа и сгенерировать массив в диапазоне [-70,80]. Требуется: //1 Вывести сгенерированный массив в отдельной строке, найти max и min эл-ты и поменять их местами //2 Отсортировать полученный массив по убыванию и вывести в 3-ей строке program dz1; var x:array[1..100]of integer; i,max,min,n,t,buf,k:integer; begin write('Введите кол-во эл-тов n:');readln(n); for i:=1 to n do begin x[i]:=random(106)-35; end; writeln('вывод сген. массива'); for i:=1 to n do write (x[i],' '); writeln; writeln; //1 writeln('Поиск max: '); max:=x[1]; for i:=2 to n do if (maxx[i])then begin min:=x[i]; end; writeln('min=',min); writeln('max=',max); t:=x[max]; x[max]:=x[min]; x[min]:=t; //2 for i:=1 to n-1 do begin for k:=1 to n-1 do begin if x[k] < x[k+1] then begin buf:=x[k]; x[k]:=x[k+1]; x[k+1]:=buf; end; end; end; writeln; writeln('Массив отсортирован'); for k:=1 to n do write(x[k],' '); readln; for k:=1 to n-1 do read(x[n]); readln(x[n]); end. Заранее спасибо.

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

Отвечает Лолев Дмитрий.
Program dz1;
var
x:array[1..100]of integer;
i,max,min,n,t,buf,k:integer;
begin
write('Введите кол-во эл-тов n:');readln(n);
for i:=1 to n do x[i]:=random(151)-70;
writeln('вывод сген. массива');
for i:=1 to n do write (x[i],' ');
writeln;
writeln;
//1
writeln('Поиск max и min: ');
max:=1; min:=1;
for i:=2 to n do
begin
if (x[max]<x[i])then max:=i;
if (x[min]>x[i])then min:=i;
end;
writeln('min=',x[min]);
writeln('max=',x[max]);
t:=x[max];
x[max]:=x[min];
x[min]:=t;
//2
for i:=1 to n-1 do
for k:=1 to n-i do
if x[k] < x[k+1] then
begin
buf:=x[k];
x[k]:=x[k+1];
x[k+1]:=buf;
end;
writeln;
writeln('Массив отсортирован');
for i:=1 to n do write(x[i],' ');
writeln;
end.
Пример:
Введите кол-во эл-тов n:15
вывод сген. массива
32 -38 -35 53 -50 31 66 16 5 28 64 -11 20 -43 -1
Поиск max и min:
min=-50
max=66
Массив отсортирован
66 64 53 32 31 28 20 16 5 -1 -11 -35 -38 -43 -50
var
x:array[1..100]of integer;
i,max,min,n,t,buf,k:integer;
begin
write('Введите кол-во эл-тов n:');readln(n);
for i:=1 to n do x[i]:=random(151)-70;
writeln('вывод сген. массива');
for i:=1 to n do write (x[i],' ');
writeln;
writeln;
//1
writeln('Поиск max и min: ');
max:=1; min:=1;
for i:=2 to n do
begin
if (x[max]<x[i])then max:=i;
if (x[min]>x[i])then min:=i;
end;
writeln('min=',x[min]);
writeln('max=',x[max]);
t:=x[max];
x[max]:=x[min];
x[min]:=t;
//2
for i:=1 to n-1 do
for k:=1 to n-i do
if x[k] < x[k+1] then
begin
buf:=x[k];
x[k]:=x[k+1];
x[k+1]:=buf;
end;
writeln;
writeln('Массив отсортирован');
for i:=1 to n do write(x[i],' ');
writeln;
end.
Пример:
Введите кол-во эл-тов n:15
вывод сген. массива
32 -38 -35 53 -50 31 66 16 5 28 64 -11 20 -43 -1
Поиск max и min:
min=-50
max=66
Массив отсортирован
66 64 53 32 31 28 20 16 5 -1 -11 -35 -38 -43 -50



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Из предоставленного кода можно выделить несколько проблем, которые приводят к ошибке времени выполнения и некорректной сортировке массива. Вот перечень проблем и способы их исправления:
- Проблема с поиском максимального и минимального элементов:
Ошибка в строке
if (maxx[i])then begin
- здесь опечатка. Нужно заменитьmaxx
наmax
. Аналогично, в строкеmin:=x[i];
заменить наmin:=x[i];
.
Исправленный код для поиска максимального и минимального элементов:
pascalmax := x[1]; min := x[1]; for i := 2 to n do begin if x[i] > max then max := x[i]; if x[i] < min then min := x[i]; end;
- Проблема с сортировкой массива: Для сортировки массива по убыванию используется метод "пузырьковой" сортировки. Однако, в текущей реализации циклы для сортировки некорректно ограничены.
Исправленный код для сортировки массива:
pascalfor i := 1 to n - 1 do begin for k := 1 to n - i do // Изменили условие для правильной сортировки begin if x[k] < x[k + 1] then begin buf := x[k]; x[k] := x[k + 1]; x[k + 1] := buf; end; end; end;
- Проблема с чтением данных в массив:
В самом конце кода есть лишний фрагмент, где снова выполняется чтение элементов массива
x
. Это не нужно, так как значения уже сгенерированы и отсортированы ранее.
Уберите следующий фрагмент:
pascalfor k := 1 to n - 1 do read(x[n]); readln(x[n]);
После внесения указанных исправлений, ваш код должен работать правильно и выводить отсортированный массив.


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

Информатика 557

Информатика 33

Информатика 74

Информатика 12

Информатика 10

Информатика 33

Информатика 27
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili