Показать сообщение отдельно

  #600  
Старый 06.06.2008, 17:23
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме:
422909

Репутация: 200
Отправить сообщение для A2GIL с помощью ICQ
По умолчанию

Цитата:
Народ помогите решить проблему ! Вообщем приведенная ниже программа должна сортировать массив рандомных чисел ПИРАМИДАЛЬНЫМ методом.... Вообщем она и сортирует вот только чаще всего выбивает STACK OVERFLOV.... я там уже и функцию проверки на сортировку кинул штобы не вращалось слишком много и всеравно облом .... Вообщем код ниже кто сможет подправить укажите ошибку исправленным кодом !!!
У тебя ошибка на ошибке. Вот смотри, зачем делать HeapSort процедурой? Ведь ей нужно передавать массив! Поэтому она должна быть функцией. И не зачем было делать Anti_Overflow. То есть:

//переделываем на функцию
Код:
function HeapSort( arr : myArray; size : Integer ):myArray;
Var i, L, R : Integer;
    item : Integer;
Begin
     L := ( size div 2 );
     R := size - 1 ;
     While L > 0 do
     Begin
           L := L - 1;
           Sift( arr, L, R );
     End;
         While R > 0 do
         Begin
              item := arr[0];
              arr[0] := arr[R];
              arr[R] := item;
              R := R - 1;
              Sift( arr, L, R );
         End;
    heapsort:=arr;
End;
// и рендомное заполнение массива переделай:
Код:
 ClrScr;
     Write('Vvedite rozmirnist'' massiva : ');
     ReadLn( dimension );
     writeln;
     writeln('************************************************');
     Write('Ishodnii massiv iz ');Write( dimension );Write(' elementov: ');
     Randomize;
     For i := 0 To dimension-1 Do
      Begin
       arr[i] := Random(50);
       Write(arr[i]);write(' ');
      End;
      writeln;
     writeln('************************************************');
     SortArray:=HeapSort( arr , dimension );
     write('Otsortirovanii massiv : ');
       for i := 0 to dimension-1 do begin
         write( sortArray[i] ); write(' '); end;
     writeln;
     writeln('************************************************');
     writeln;
     WriteLn('Press "Enter" to continue...');
     Readln; 
     Readln;
P.s. МаССив пишется с двумя с ... Надо увОжать русский язык

Последний раз редактировалось A2GIL; 06.06.2008 в 17:25..
 
Ответить с цитированием