![]() |
|
|
#1
|
|||
|
|||
![]() Алгоритм пузырьковой сортировки и функция вывода элементов в поле Мемо.
код компилируется но вылетает ошибка смотрел в Watch List зн-я переменных, индекс j оказался недоступным как и элемент A[j]. Но массив в конце оказался отсортирован(тот же Watch List, да и после компиляции при наведении на 'А' показывается отсортированный массив) А вот в Мемо ни в какую не хочет выводиться! Подскажите в чем подвох. Код:
//объявление ф-ции function TForm1.OutMemo(X:array of integer):integer; //реализация метода вывода в Мемо function TForm1.OutMemo(X:array of integer):integer; var i,N:word; begin N:=High(X); for i:=0 to N do Form1.Memo1.Lines.Add(IntToStr(X[i])); Result:=1; end; var A:array[0..4] of integer=(5,2,3,4,1); i,j,N,M:integer; begin N:=High(A); {A[0]:=5; A[1]:=3; A[2]:=2; A[3]:=1; A[4]:=4;} //алгоритм пузырьковой сортировки for i:=0 to N do for j:=0 to N do if A[j]>A[j+1] then begin M:=A[j]; A[j]:=A[j+1]; A[j+1]:=M; end; //вызов метода OutMemo(A); |
#2
|
||||
|
||||
![]() Код:
for i:=0 to N do for j:=0 to N do if A[j]>A[j+1] then begin M:=A[j]; A[j]:=A[j+1]; A[j+1]:=M; end; jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 25.11.2012 в 18:47. |
#3
|
|||
|
|||
![]() я уже по всякому менял параметры окончания цикла и N-1 ставил и менял порядок сортировки(в данном случаеначинается со сравнения первой пары элементов и перемещается к концу, можно и с конца начинать только надо задать цикл так...
Код:
for i:=0 to N do for j:=N-1 downto i do |
#4
|
||||
|
||||
![]() Цитата:
З.Ы. давно бы уже написали, что за ошибка "вылетает"... Скриншот там или текст... jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
||||
|
||||
![]() Скопировал в новый проект (форма,мемо,баттон) код, почти ничего не трогал - работает без ошибок:
Код:
procedure TForm1.Button1Click(Sender: TObject); var A:array[0..4] of integer; i, j, N, M: integer; begin memo1.Clear; A[0]:=5; A[1]:=3; A[2]:=4; A[3]:=1; A[4]:=2; N:= High(A); for i:= 0 to N do for j:= 0 to N do if A[j] > A[j+1] then begin M:= A[j]; A[j]:= A[j+1]; A[j+1]:= M; end; for i:=0 to N do Memo1.Lines.Add(IntToStr(A[i])); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
|||
|
|||
![]() project sort.exe raised exception class EAccessViolation with message 'Accesse
violation at adress 0044EC91 in module "Sort.exe". Read of adress 000002F8' Process stoped. Use Step or Run To continue. Вот такое уведомление при запуске появляется. Я так понял это ошибка времени выполнения. |
#7
|
||||
|
||||
![]() Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
||||
|
||||
![]() Эта ошибка в 99% случаев значит, что используется неинициализированный указатель или несозданный объект. Переводится как "нарушение доступа при чтении адреса такого-то", адрес явно в районе нулей. По всей видимости при передаче массива в функцию.
jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Black_Bear (25.11.2012)
|
#9
|
|||
|
|||
![]() Цитата:
Вывод в Memo правильный. Неправильно написана сама сортировка. Нужно так: Код:
for i:= 0 to N-1 do for j:= i+1 to N do if A[j] < A[i] then begin M:= A[j]; A[j]:= A[i]; A[i]:= M; end; |
#10
|
|||
|
|||
![]() Alegun, ваша версия действительно работает, спасибо! но хотелось бы разобраться что не так с моей.
|
#11
|
||||
|
||||
![]() Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |