Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2013, 18:04   #1
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию сортировка

помогите найти ошибку
Код:
Program midle_sort; {ðàçäåëÿþùèé
 - ñðåäíèé ýëåìåíò 
òàáëèöû}
Uses crt;
Const Nmax=7;
type zap=Record
     znach: integer;
     end;
     table=array [1..Nmax] of zap;
Var t: table;
    n: integer;


procedure Imp_tab (var t: table; var n: integer);

begin
     n:=0;
  repeat
     n:=n+1;
     WriteLn('Input element ',n);
     Readln(t[n].znach);
  until (n=Nmax);

end;



procedure SORt_sr(t:table; l, r :integer);
var i,j,x: integer;
    tmp:zap;
begin
   i:=l;
   j:=r;
   x:=t[(l+r)div 2].znach;
   repeat
      while t[i].znach<x do
         i:=i+1;
      while t[j].znach>x do
      j:=j-1;
      if i<j then
      begin
        tmp:=t[i];
        t[i]:=t[j];
        t[j]:=tmp;
        i:=i+1;
        j:=j-1;
      end;
   until i>j;
   if j>l then SORt_sr(t,l,j);
   if i<r then SORt_sr(t,i,r);
end;

procedure showtab (var t: table; var n: integer);
var i: integer;
begin
clrscr;
writeln ('Sorted table');
for i:=1 to n do
writeln ('|', t[i].znach,'|') ;
readkey;
end;



begin
 Imp_tab(t,n);
 SORt_sr(t,1,n);
 showtab(t,n);

end.

Последний раз редактировалось Stilet; 10.11.2013 в 11:06.
dimon198909 вне форума Ответить с цитированием
Старый 09.11.2013, 19:18   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Процедура SORt_sr должна возвращать отсортированный массив t ?
Тогда надо добавить var
Код:
procedure SORt_sr(var t:table; l, r :integer);
И l,r что такое? Может, там тоже надо var?
type_Oleg вне форума Ответить с цитированием
Старый 09.11.2013, 20:07   #3
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию

да пропустил, но не в нем дело... сортировка не выполняется( l и r это переменные с помощью которых производится перестановка
dimon198909 вне форума Ответить с цитированием
Старый 09.11.2013, 22:20   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

В Вашем алгоритме есть ошибки, которые связаны с неучетом случаев равенства:
Вот исправленный код процедуры:
Код:
procedure SORt_sr(var t:table; l, r :integer);
var i,j,x: integer;
    tmp:zap;
begin
   i:=l;
   j:=r;
   x:=t[(l+r)div 2].znach;
   repeat
      while t[i].znach < x do
         i:=i+1;
      while x < t[j].znach do
      j:=j-1;
      if (i <= j) then  {тут!}
      begin
        tmp:=t[i];
        t[i]:=t[j];
        t[j]:=tmp;
      end;
        i:=i+1;
        j:=j-1;
   until (i >= j);  {и тут!}
   if l < j then SORt_sr(t,l,j);
   if i < r then SORt_sr(t,i,r);
end;
Сравните, ...


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 09.11.2013, 22:39   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
И l,r что такое?
left и right..

Цитата:
if i<j then
if i <= j then

Цитата:
if j>l then SORt_sr(t,l,j);
if j < l then

Замечания :
Цитата:
t:table
t - крайне не подходящее имя для массива..

Цитата:
Код:
type zap=Record
     znach: integer;
     end;
Зачем? Почему бы просто не t : array [1..NMax] of Integer; ??

P.S. Опоздал (печалька )
Poma][a вне форума Ответить с цитированием
Старый 09.11.2013, 23:24   #6
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию

поменял.. все равботает, только сортировка не выполняется(
dimon198909 вне форума Ответить с цитированием
Старый 09.11.2013, 23:31   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Цитата:
поменял.. все равботает, только сортировка не выполняется(
Показывай код процедуры.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.11.2013, 10:51   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
Program midle_sort; {ðàçäåëÿþùèé -
 ñðåäíèé ýëåìåíò 
òàáëèöû}
Uses crt;
Const Nmax=7;
type zap=Record
     znach: integer;
     end;
     table=array [1..Nmax] of zap;
Var t: table;
    n: integer;


procedure Imp_tab (var t: table; var n: integer);

begin
     n:=0;
  repeat
     n:=n+1;
     WriteLn('Input element ',n);
     Readln(t[n].znach);
  until (n=Nmax);

end;



procedure SORt_sr(var t:table; l, r :integer);
var i,j,x: integer;
    tmp:zap;
begin
   i:=l;
   j:=r;
   x:=t[(l+r)div 2].znach;
   repeat
      while t[i].znach<x do
         i:=i+1;
      while t[j].znach>x do
      j:=j-1;
      if i<=j then
      begin
        tmp:=t[i];
        t[i]:=t[j];
        t[j]:=tmp;
        i:=i+1;
        j:=j-1;
      end;
   until i>j;
   if l<j then SORt_sr(t,l,j);
   if i<r then SORt_sr(t,i,r);
end;

procedure showtab (var t: table; var n: integer);
var i: integer;
begin
clrscr;
writeln ('Sorted table');
for i:=1 to n do
writeln ('|', t[i].znach,'|') ;
readkey;
end;



begin
 Imp_tab(t,n);
 SORt_sr(t,1,n);
 showtab(t,n)
end.
Всё работает!

Последний раз редактировалось Stilet; 10.11.2013 в 11:07.
Poma][a вне форума Ответить с цитированием
Старый 10.11.2013, 14:46   #9
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Небольшая правка:
Код:
 until i>j;
Как смотрел по алгоритму, так тут надо:
Код:
 until i >= j;

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.11.2013, 14:49   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Как смотрел по алгоритму, так тут надо:
Эм.. А контр. пример? Или объяснение, почему мой вариант неверен?
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32