Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

Сортировка записей в текстовом файле   Найти похожие ветки 

 
azl ©   (2007-03-04 12:19) [0]

Здравствуйте, уважаемые мастера. Помогите, пожалуйста, решить задачу.

Есть одномерный массива А(29), элементы которого распологаются произвольным образом в диапазоне от -12 до 45. И есть одномерный массив В, сформированный из массива А. Все элементы массива В больше чем средне арифметическое массива А. Эти массивы записаны в файлы М1.TXT и M2.TXT.

Нужно сделать следующее:
Выполнить сортировку данных в файле M1.txt по возрастанию, а в файле М2.txt по убыванию. Для сортировки использовать программу типа SUB. Сортировать не элементы массивов, а записи в файлах!

Все бы было легко, если бы можно было считать файлы в массивы, выполнить сортировку в массивах и обратно записать в файлы.

 for i := 1 to n do
   for j := n downto i+1 do
     if m1[j-1] > m1[j] then
       begin
         t := m1[j-1];
         m1[j-1] := m1[j];
         m1[j] := t;
       end;


Но надо  отсортировать именно записи в файлах.

Я нашел, некоторый ответ:
"легко, если знаешь кол-во и размер каждой записи:

  заюзай какой-нибудь метод сортировки -
  при переборе значений переставляй записи в файле:
  считывай первую запись, затем вторую если некое условие, то
  переставляй их местами... делов-то.
"

Смысл понятен, только как это можно сделать на практике. Никто не мог бы привести пример работы с записями файла.

Спасибо.


 
Рамиль_   (2007-03-04 12:57) [1]

Для файлов, насколько я помню, надо использовать сортировку слиянием.


 
Leonid Troyanovsky ©   (2007-03-04 13:27) [2]


> azl ©   (04.03.07 12:19)  

> программу типа SUB. Сортировать не элементы массивов, а
> записи в файлах!

Если записи в файле одинаковой длины, то их сортировка
практически не отличается от сортировки массива.

--
Regards, LVT.


 
azl ©   (2007-03-04 13:42) [3]

В том то и дело, что разной. Диапазон от -12 до 45. А это может быть и -10 и -8 и 35.


 
default ©   (2007-03-04 13:44) [4]

azl ©   (04.03.07 13:42) [3]
вряд-ли ты сможешь написать сортировку слиянием
так что делай как говорят в [2]


 
azl ©   (2007-03-04 13:49) [5]

Я понимаю, а пример можно?
В принципе, в одном файле (М2.TXT) все записи одинаковой длины.


 
default ©   (2007-03-04 13:58) [6]

azl ©   (04.03.07 13:49) [5]
можешь использовать TFileStream
многие алгоритмы сортировки являются обменными, то есть в процессе сортировки они переставляют элементы сортируемого списка местами
(ну как в сабжевом примере, в пузырьке в этом галимом:))
у тебя будут просто переставляться записи в файле
для этого как понимаешь не обязательно загружать весь сортируемый список в оперативную память
просто его обычно загружают если можно, чтобы жётский диск не "дёргать" ибо это гораздо медленее чем "дёргать" оперативную память


 
azl ©   (2007-03-04 17:26) [7]

Все равно ладу не дам.


 
azl ©   (2007-03-05 17:35) [8]

А что если воспользоваться процедурой Seek?



Страницы: 1 вся ветка

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
4-1161332775
Dmitry_177
2006-10-20 12:26
2007.03.25
будильник на API


2-1172733688
Riply
2007-03-01 10:21
2007.03.25
Индекс объекта, возвращаемого MsgWaitForMultipleObjects


3-1167245485
крошка
2006-12-27 21:51
2007.03.25
Как правильно раздать права пользователям MS SQL и кто такой DBO?


15-1172809796
Tugodum
2007-03-02 07:29
2007.03.25
Где найти помошь от Delphi7


2-1172935222
z80maniac
2007-03-03 18:20
2007.03.25
Повторная загрузка DLL