
Пишет: Ошибка. Программа завершена из за переполнения стека. Паскаль. Помогите, пожалуйста. вот
программа: 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.

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

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



Программа, которую вы предоставили, реализует сортировку массива методом быстрой сортировки (quicksort). Ошибка "Ошибка. Программа завершена из-за переполнения стека" может возникать из-за некорректной реализации самой функции сортировки.
В данной программе проблема в следующих строках:
mathematicaSort(First, x);
Sort(Last, y);
Здесь при вызове функции Sort
для части массива от first
до x
и от last
до y
, аргументы передаются неверно. Вместо этого, нужно передавать first
и x-1
, а также y+1
и last
, чтобы сортировать меньшие и большие элементы относительно опорного элемента m
.
Исправленный вариант программы:
pascalprogram 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.
Теперь программа должна работать корректно и сортировать массив методом быстрой сортировки без ошибки переполнения стека.


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








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