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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2011, 17:08   #1
skorpi
Пользователь
 
Регистрация: 24.12.2009
Сообщений: 11
По умолчанию Heapsort_string

Подскажите, где ошибка?
Задача: сортировка списка, взятого из готового файла, в алфавитном порядке и запись в новый файл.
В Delphi - сортировка списка по алфавиту идет нормально.
А, в Pascal - сортировка происходит неполностью.

Код:
Program pir_sort;
Uses crt;
Const n = 13;

Var a : array[1..n] of string;
    Size : byte;
    Input, Output: text;

Procedure HeapSort(i, k : byte);
   Var  new_elm : string;
        Child : byte;
   Begin
     new_elm := a[Size];
     While (i <= k div 2) do
        Begin
           Child := i*2;
           If (new_elm < a[child]) or (new_elm < a[child+1]) then
              If a[child+1]>a[child] then Inc(child);
                If new_elm > a[Child] then Break;
           a[i] :=a[Child];
           i := Child;
        End;
      a[i] := new_elm;
   End;

Procedure Swap(var x,y : string);
var d: string;
   Begin
       d:= x;
       y:= x;
       x:= d;
   end;

BEGIN
    Assign(Input, 'Input.txt');
    Assign(Output, 'Output.txt');
    Reset(Input);
    Rewrite(Output);
  While not (Eof(Input)) do
     Begin
       Inc (Size);
       Readln (Input, a[Size]);
     end;

  For Size:= n div 2 downto 1 do HeapSort(Size, n);
      Swap(a[1], a[Size+1]);

     For  Size := n - 1 downto 1 do
       Begin
         Swap(a[1], a[Size+1]);
         HeapSort(1, Size-1);
       End;

 For Size := 1 to n do Writeln(Output, a[Size]);
 Close(Output);
 Close(Input);

END.
skorpi вне форума Ответить с цитированием
Ответ


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