Сортировка чисел в файле - Pascal

Узнай цену своей работы

Формулировка задачи:

Ув.программисты помогите решить задачу.Дан файл целых чисел. Нулевых компонент в файле нет. Число отрицательных компонент равно числу положительных. Преобразовать файл таким образом, чтобы сначала были положительные числа, а затем отрицательные. Порядок следования как положительных, так и отрицательных чисел сохранить.
program lab10;
const n=6;
procedure write_file_of_int(var t:file of integer); //вводит значения в файл
var i:byte;
    c:integer;
begin
Assign(t,'D:\temp');
Rewrite(t);
Writeln('VVedite celue 4ucla Faila');
for i:=1 to n do
begin
read(c);
write(t,c);
end;
writeln('VVod okon4en');
close(t);
end;
procedure Vuvod_file_of_integer(var t:file of integer); //выводит все числа файла
var i:byte;
    c:integer;
begin
Assign(t,'D:\temp');
Reset(t);
Writeln('4ucla kotorue buli vvedenu');
for i:=1 to n do
begin
read(t,c);
write(c,' ');
end;
close(t);
end;
procedure coptipovka(var t:file of integer); //сортировка числе в самом файле
Var i:byte;
    c:integer;
begin
Assign(t,'D:\temp');
rewrite(t);
writeln('4ucla posle sortirovki');
for i:=1 to n do
begin
Read(t,c);
if (c<0) then
   begin
 //seek(t,filesize(t)-1);
  write(t,c);
  //seek(t,i);
   end;
   end;
  close(t);
end;
 
var t:file of integer;
begin
write_file_of_int(t);
Vuvod_file_of_integer(t);
coptipovka(t);
Vuvod_file_of_integer(t);
readln;
readln;
end.
вот то что я уже написал
люддииии=(((помогите плз
людии ну кто нибудь

Решение задачи: «Сортировка чисел в файле»

textual
Листинг программы
uses crt;
var f:file of integer;
    n,a,b,k,i,j,p:integer;
begin
clrscr;
randomize;
assign(f,'file');
rewrite(f);
write('Сколько пар чисел записать в файл? n=');
readln(n);
for i:=1 to 2*n do
 begin
  a:=random(10)+1;//для теста можно просто парами рандомно
  b:=-a;
  write(f,a,b);
  {readln(a);//если реальные числа
  write(f,a);}
 end;
writeln('Содержание исходного файла:');
reset(f);
while not eof(f) do
 begin
  read(f,a);
  write(a,' ');
 end;
writeln;
writeln;
close(f);
{перестановка положительных вперед}
reset(f);
seek(f,0);
read(f,a);
if a>=0 then p:=1//если первое положительное, начнем со второго
else if a<0 then p:=0;
k:=p-1;//количество перестановок
for i:=p to filesize(f)-1 do
 begin
  seek(f,i);
  read(f,a);//читаем числа
  if a>0 then//если полож.
   begin
    k:=k+1;//считаем
    for j:=i downto k+1 do//сдвигаем к нему элементы файла от последней вствки на 1
     begin
      seek(f,j-1);
      read(f,b);
      seek(f,j);
      write(f,b);
     end;
    seek(f,k);//на освободившееся место вставляем найденный положительный
    write(f,a);
   end;
 end;
close(f);
writeln('Перестановка положительных вперед:');
reset(f);
while not eof(f) do
 begin
  read(f,a);
  write(a,' ');
 end;
close(f);
readln
end.

Объяснение кода листинга программы

  1. Создается файл с именем file и открывается для записи.
  2. Задается вопрос пользователю о количестве пар чисел, которые нужно записать в файл.
  3. Для каждой пары чисел (a и b) выполняется запись в файл.
  4. После записи каждой пары чисел выводится содержимое файла.
  5. Файл считывается построчно до конца файла.
  6. Если первое число положительное, то оно помещается в начало файла, а остальные числа переносятся в конец файла.
  7. Выполняется перестановка положительных чисел в начале файла.
  8. Файл считывается построчно до конца файла.
  9. Выводится содержимое файла после перестановки положительных чисел.
  10. Файл закрывается.

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы