Страница 1 из 1

Паскаль.Не идет сортировка.

Добавлено: 20 ноя 2008, 21:09
RAITER
Код функции:

Код: Выделить всё

function sort_slij(var a:mas; p,r:integer):longint;
   var q:integer;
       d:mas;
       sravn:longint;

   function sl(pp,qq,rr:integer):longint;
     var t,i,j,k:integer;
     begin
       i:=pp;j:=qq+1;t:=1; 
       while (i<=qq)and(j<=rr)do  
         begin
           if a[i]<a[j] then begin
                               d[t]:=a[i];
                               inc(i);
                             end
                        else begin 
                               d[t]:=a[j];
                               inc(j);
                             end;
          inc(t); 
        end;      
       while i<=qq do begin d[t]:=a[i];inc(i);inc(t) end;
       while j<=rr do begin d[t]:=a[j];inc(j);inc(t) end;             
       for k:=1 to t-1 do a[pp+k-1]:=d[k];
    end;
  begin
   sravn:=0;
   if p<r then begin
                 q:=(p+r) div 2;
                 sort_slij(A,p,q);
                                                                              
                 sort_slij(A,q+1,r); 
                 sl(p,q,r);        
               end;
  sort_slij:=sravn;
  end;
Функция делается для сравнения с другой сортировкой и рез-ты сравнения будут отражены в графике.Конкретно проблема в sort_slij(A,p,q);.Программа требует присвоения sort_slij:=(A,p,q), хотя здесь идет вызов.Помогите пожалуйста.

Re: Паскаль.Не идет сортировка.

Добавлено: 22 ноя 2008, 15:31
Хыиуду
RAITER писал(а): Конкретно проблема в sort_slij(A,p,q);.Программа требует присвоения sort_slij:=(A,p,q)

Как программа может требовать присвоения списка функции? Это какая-то нелепица.
А вообще внушает подозрение вот это:

Код: Выделить всё

function sort_slij(var a:mas; p,r:integer):longint;
  begin
   sravn:=0;
   if p<r then begin
                 q:=(p+r) div 2;
                 sort_slij(A,p,q);
                 ...   
               end;
  sort_slij:=sravn;
  end;
Если у вас изначально p<r, то программа зациклится, точнее, практически зациклится, q будет ассимптотически приближаться к p. В конечном итоге их разность станет меньше машинного нуля, условие не выполнится, и функция выдаст 0, не совершив никаких действий. Если p>r, то функция сразу выдаст 0.

Re: Паскаль.Не идет сортировка.

Добавлено: 22 ноя 2008, 20:05
Naeel Maqsudov
Скопировал этот код в Delphi, объявил тип mas иу меня все скомпилировалось с единственным лишь предупреждением, что Return value of function 'sl' might be undefined.

Так что синтаксических ошибок тут нет. Это какой-то глюк.

Re: Паскаль.Не идет сортировка.

Добавлено: 04 дек 2008, 18:13
RAITER
Спасибо за ответы, но в итоге решил переделать их в процедуры и все пошло)