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

Ответить
RAITER
Сообщения: 13
Зарегистрирован: 05 окт 2008, 16:15

Код функции:

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

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), хотя здесь идет вызов.Помогите пожалуйста.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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

Так что синтаксических ошибок тут нет. Это какой-то глюк.
RAITER
Сообщения: 13
Зарегистрирован: 05 окт 2008, 16:15

Спасибо за ответы, но в итоге решил переделать их в процедуры и все пошло)
Ответить