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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2013, 12:24   #1
Just-Joni
 
Регистрация: 26.12.2013
Сообщений: 7
Восклицание Определить по коду алгоритм сортировки и исправить специально допущенные в коде ошибки ( Turbo Delphi )

Всем привет. У меня проблема: нужно сделать контрольную работу по программированию до завтра, но нет времени разбираться (я разберусь, но займёт это времени очень много), а на завтра ещё нужно до сдать по билетам мат. анализ. В связи с этим прошу помочь выполнить задание в Turbo Delphi:

"Задание - определить,
какой именно алгоритм сортировки реализован (пузырьковая, выбором,
вставкой, быстрая, расческой, Шелла
), а также найти и исправить ошибки в
процедуре сортировки
. Их там порядка 5 плюс-минус 1. При исправлении
запрещается вносить такие изменения, которые сильно изменяют алгоритм
частности, переворачивать циклы, если только в них не содержится
ошибка), выкидывать фрагменты алгоритма и т.п. Задание засчитывается,
если процедура успешно компилируется, работает и успешно сортирует любой
набор данных."

А вот сам код:
Код:
procedure Sort ( var A : array of real );
type // Эти типы позволяют создать динамическую структуру данных - стек 
пар чисел
   PRange = ^TRange;
   TRange = record
     beg, en : integer;
     next : PRange;
   end;
var
   Stack : PRange;

   procedure PushRange ( b, e : integer ); // Здесь все правильно.
   var
     P : PRange;
   begin
     New ( P );
     P.beg := b;
     P.en := e;
     P.next := Stack;
     Stack := P;
   end;

   procedure PopRange ( var b, e : integer ); // И здесь тоже.
   var
     R : PRange;
   begin
     R := Stack.next;
     b := Stack.beg;
     e := Stack.en;
     Dispose ( Stack );
     Stack := R;
   end;

// А вот дальше - уже не всё.
var
   b, e, beg, en, p, t : integer;
begin
   Stack := nil;
   PushRange ( 0, High(A) );
   while Stack <> nil do
     begin
       PopStack ( beg, en );
       tm := rn.Next;
       b := beg;
       e := en;
       p := A[(b+e) / 2];
       while b <= e do
         begin
           while A[b] < P do Inc(b);
             while A[e] > P do Dec(e);
             if b <= e then
               begin
                 t := A[e];
                 A[e] := A[b];
                 A[b] := t;
                 Inc(b);
                 Inc(e);
               end;
         end;
       if e > beg then PushRange ( beg, e );
       if b < en then PushRange ( en, b );
     end;
end;

Последний раз редактировалось Just-Joni; 26.12.2013 в 14:13.
Just-Joni вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправить ошибку в коде Delphi Gifted Помощь студентам 5 24.08.2013 20:20
Исправить с учетом регистра ошибки (Turbo Pascal) Trampoline Помощь студентам 2 04.03.2013 22:42
Исправить ошибки и сделать проект по готовому коду (Delphi) Kelthagor Помощь студентам 2 21.05.2012 00:59
метод квадратного корняЖ исправить ошибки в коде. at13 Помощь студентам 1 20.10.2011 20:11
Исправить ошибки в проге Turbo Pascal iron_cross Помощь студентам 9 06.02.2011 16:12