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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2010, 20:15   #1
SHAK
Новичок
Джуниор
 
Регистрация: 18.01.2010
Сообщений: 2
По умолчанию Сортировка типизированых файлов и динамических списков (паскаль)

Уважаемы програмисты, есть одна проблемма с сортировкой в динамических списках и типизированых файлах.
Есть процедуры сортировки как в файлах так и в списках, работают они правильно, но мне сказали что можно записать более просто, но по мне проще это так как написано сей час, если можете посмотрите и помогите пожалуйсто.
Задание: Все нули переместить в конец данных, не изменяя следования остальных чисел.Нового файла, списка не заводить .
Вот мои сортировки:

Код:
procedure sort_spis;
 var p3:uk; pr:  boolean; n:integer;
  begin
   p2:=first;
   p1:= p2;  n:=0;
   while p2^.adr<>nil do
       begin
       if (p2=first)and(p2^.data=0)then
        begin
           inc(n);
          first:=p2^.adr;
          dispose(p2);
          p2:= first;
        end
      else if p2^.data=0 then
        begin
            inc(n);
              p1^.adr:= p2^.adr;

             dispose(p2);
             p2:= p1^.adr
        end
     else
         begin
          p1:=p2;
          p2:=p2^.adr;
         end;
      end;
          for i:=1 to n do
           begin
           new(p3);
           p3^.adr:=nil;
           p3^.data:=0;
           p2^.adr:=p3;
           p2:=p3;
           end;
    end;

        procedure sort_file3;
 var pr:boolean;
 j,k1,k2:integer;
 begin
   reset(f2);
    pr:=true;
   j:=0;
   while pr do
   begin
   pr:=false;

   for i:=0 to kolel do
   begin
       seek(f2,i);
       read(f2,k1);
       if k1=0 then
       begin
         read(f2,k2);

         if k2<>0 then
         begin
           seek(f2,i);
           write(f2,k2);
           write(f2,k1);
          pr:=true;
         end;
       end;
   end;
inc(j);
   end;
 end;
SHAK вне форума Ответить с цитированием
Старый 21.01.2010, 08:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нового файла, списка не заводить .
Поясни эту фразу...
Вообще мне тоже кажется что можно попроще бы сделать, но задание я до конца не понял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.01.2010, 13:44   #3
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

а чтото в таком духе вам не подойдёт?
Код:
var i,j:integer;
     k2:integer;
...
...
...
i := 0;
j := 0;
seek(f2,0);
while (not(eof(f2)) do Begin   { точно не помню можно ли использовать eof с типизированым файлом, если что исправте }
  read(f2,k2);
  inc(i);
  if (k2<>0) then Begin
    seek(f2,j);
    write(f2,k2);
    inc(j);
    seek(f2,i);
  end;
End;
k2 := 0;
seek(f2,j);
while (j<i) do Begin
  write(f2,k2);
  inc(j);
End;
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 21.01.2010, 14:16   #4
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

Зачем елозить по файлу туда-сюда ?
Это же времяресурсоемкие операции ...

1. Открыл его для чтения,
2. Получил размер,
3. Создал массив соответствующий размеру
4. Пробежал в цикле по файлу от начала до конца, пропуская нулевые эл-ты и читая ненулевые в последовательно идущие эл-ты массива, подсчитывая их одновременно
5. Переоткрыл файл для перезаписи
6. Перезаписал в файл массив с начала до подсчитанного ранее кол-ва ненулевых эл-тов прочитанного файла
7. Дозаписал в конец файла нулевые элементы в кол-ве равном разнице
6. Уничтожил массив

Вуаля !
Сергeй вне форума Ответить с цитированием
Старый 21.01.2010, 21:18   #5
SHAK
Новичок
Джуниор
 
Регистрация: 18.01.2010
Сообщений: 2
По умолчанию

Спасибо всем, код упростил сам, курсач сдал=)
SHAK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32
Сохранение и загрузка списков (Паскаль) diliana Помощь студентам 12 25.05.2009 12:22
Сортировка файлов Minus Общие вопросы Delphi 2 28.04.2009 12:49
Сортировка файлов russian-stalker Общие вопросы Delphi 4 25.09.2008 22:52