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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2011, 19:34   #1
TCH
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 12
Смущение Сортировка естественным слиянием

никак не могу понять в чем косяки. иногда сортирует правильно но не выводит последние 2 числа, иногда крашится на вводе из файла, ссылаясь на то, что фапйл уже закончился... помогите, пожалуйста! вот код:

Код:
var
  f1: Text;
  f2,f3:File of integer;
  kol_otr: Byte;

procedure MyWrite(number: Byte; a: integer);
begin
  case number of
    1: write(f1, a, ' ');
    2: write(f2, a);
    3: write(f3, a);
  end;
end;

procedure Myread(number: Byte; var a: integer);
begin
  case number of
    1: read(f1, a);
    2: read(f2, a);
    3: read(f3, a)
  end;
end;

function MyEof(number: Byte): Boolean;
begin
  case number of
    2: MyEof := Eof(f2);
    3: MyEof := Eof(f3)
  end;
end;


procedure razd(var f1: Text; var f2,f3: File of integer);
var
  a, b: Integer;
  tek_file: BYTE;
begin
  reset(f1);
  rewrite(f2);
  rewrite(f3);
  tek_file := 2;
  if not eof(f1) then
  begin
    read(f1, a);
    Mywrite(tek_file, a);
  end;
  while not eof(f1) do
  begin
    read(f1, b);
    if b < a then
      if tek_file = 2 then tek_file := 3
      else tek_file := 2;
    a := b;
    MyWrite(tek_file, a);
  end;
  close(f1);
  close(f2);
  close(f3);
end;

procedure sliyan(var k_o: Byte);
var
  a, b, x: integer;
  tek_file: integer;
  
  procedure kon_otr(tek_file: byte; buf: integer);
  var
    x: integer;
  begin
    Mywrite(1, buf); 
    x := buf;
    while (not (myEof(tek_file))) and (x >= buf) do
    begin
      myRead(tek_file, x);
      if x >= buf then
      begin
        Mywrite(1, x);
        buf := x;
      end;
    end;
    inc(k_o); 
  end;

begin
  k_o := 0;
  reset(f2);
  reset(f3);
  rewrite(f1);
  if not eof(f2) then Myread(2, a);
  if not eof(f3) then Myread(3, b);
  while not eof(f2) or not eof(f3) do
  begin
  
    if a < b then 
    begin
      Mywrite(1, a); 
      tek_file := 2
    end
        else 
    begin
      Mywrite(1, b); 
      tek_file := 3
    end;
    Myread(tek_file, x);
    if tek_file = 2 then
    begin
      if x < a then kon_otr(3, b);
      a := x;
    end else
    if tek_file = 3 then
    begin
      if x < b then kon_otr(2, a);
      b := x;
    end;
  end;
  inc(k_o);  
  close(f1);
  close(f2);
  close(f3);
  write(a, b, x);
end;

begin
  assign(f1, 'a.txt');
  assign(f2, 'b.txt');
  assign(F3, 'c.txt');
  repeat
    razd(f1, f2, f3);
    sliyan(kol_otr);
  until  kol_otr = 1;
  
end.
проблема именно в процедуре слияния. разбиение проходит правильно, инфа 100%

вообще, как мне кажется, проблема в выходе из вайла(в конце файла). тьолько я эту проблеиу не могу найти и устранить.

Последний раз редактировалось TCH; 09.03.2011 в 21:05.
TCH вне форума Ответить с цитированием
Старый 09.03.2011, 20:00   #2
TCH
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 12
Смущение

нужен именно этот алгоритм, типо это классика, нас учат "классике"
TCH вне форума Ответить с цитированием
Старый 09.03.2011, 20:00   #3
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

все существующие виды сортировок массива:
sort.txt
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 09.03.2011, 20:44   #4
TCH
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 12
По умолчанию

спасибо, конечно, но не могли бы вы показать, в чем у меня ошибка, не зря ведь сидел писал такое.. алгоритм правильный, не правильная реализация.
TCH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод сортировки естественным слиянием AnDrOiD73 Общие вопросы Delphi 0 24.06.2010 23:11
Однофазная сортировка естественным слиянием dima154 Помощь студентам 0 20.11.2009 00:12
сортировка естественным слиянием ArtFul777 Паскаль, Turbo Pascal, PascalABC.NET 1 18.11.2008 19:36