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