n:=fileSize (f); {количество элементов в файле}
j:=(n div 2) -1;
for i:=1 to n div 2 do
begin
seek (f, i-1);
read (f, buf);
if not (buf<0) {если элемент в первой половине массива не отрицательный}
then
begin
{ищем отрицательный элемент во второй половине}
buf2:=0;
{соответственно на выходе будет buf2 с положительным элементом, и его номер j}
while not (buf2<0) do
begin
seek (f, j);
read (f, buf2);
inc (j);
end;
{j будет хранить текущее положение}
{надо бы обменять значения}
seek (f, i-1);
write (f, buf2);
seek (f, j);
write (f, buf)
end
end;
Знаю, что делаю плохо, т. к. код не проверил. Но тут просто наметка алгоритма. Далее думаю все будет просто, когда ты отсортируешь файл, добавляешь два с переди и два с зади.
Тут n-1 т. к. отсчет файла ведется с нуля.
Сообщение отредактировано: КМА -