Вопрос задан 29.07.2023 в 03:40. Предмет Информатика. Спрашивает Фёдорова Лена.

Пишет: Ошибка. Программа завершена из за переполнения стека. Паскаль. Помогите, пожалуйста. вот

программа: program Alisa_5; const N=10; var i: integer; A: array [ 1 .. n] of integer; procedure Sort (first,last: integer); var x, y, m, c: integer; begin if first>=last then exit; m:=a[(first+last) div 2]; x:=first; y:=last; repeat while A[x] while A[y]>m do y:=y-1; if X<=Y then begin c:=A[y]; A[y]:=A[x]; A[x]:= c; X:=X+1; Y:=Y-1; Sort( First, x); Sort (Last, y); end; until x>y end; begin writeln('Массив: '); For i:=1 to n do begin A[i]:= random(100); write( A[i], ' , '); end; sort (1,n); For i:= 1 to n do write( A[i], ' ; ') end.
0 0
Перейти к ответам

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

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

while A[x] while A[y]>m do y:=y-1; - эта строка - у тебя тут идет пока какой-то элемент выполнять цикл пока. И видимо на нем цикл крутится и не заканчивается вот тебе и ошибка

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

Программа, которую вы предоставили, реализует сортировку массива методом быстрой сортировки (quicksort). Ошибка "Ошибка. Программа завершена из-за переполнения стека" может возникать из-за некорректной реализации самой функции сортировки.

В данной программе проблема в следующих строках:

mathematica
Sort(First, x); Sort(Last, y);

Здесь при вызове функции Sort для части массива от first до x и от last до y, аргументы передаются неверно. Вместо этого, нужно передавать first и x-1, а также y+1 и last, чтобы сортировать меньшие и большие элементы относительно опорного элемента m.

Исправленный вариант программы:

pascal
program Alisa_5; const N = 10; var i: integer; A: array[1 .. N] of integer; procedure Sort(first, last: integer); var x, y, m, c: integer; begin if first >= last then exit; m := A[(first + last) div 2]; x := first; y := last; repeat while A[x] < m do x := x + 1; while A[y] > m do y := y - 1; if x <= y then begin c := A[y]; A[y] := A[x]; A[x] := c; x := x + 1; y := y - 1; end; until x > y; Sort(first, y); // Исправление первого рекурсивного вызова Sort(x, last); // Исправление второго рекурсивного вызова end; begin writeln('Массив: '); for i := 1 to N do begin A[i] := random(100); write(A[i], ' , '); end; sort(1, N); writeln; writeln('Отсортированный массив: '); for i := 1 to N do write(A[i], ' ; '); end.

Теперь программа должна работать корректно и сортировать массив методом быстрой сортировки без ошибки переполнения стека.

0 0

Похожие вопросы

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

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

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