Оставить в f только те компоненты fi, которые больше компонентов gi файла g - Turbo Pascal

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

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

Помогите пожалуйста решить, рекомендуется пользоваться средствами прямого доступа к записям типизованных файлов Даны целочисленные файлы f и g одинаковой длины. Оставить в f только те компоненты fi, которые больше компонентов gi файла g

Решение задачи: «Оставить в f только те компоненты fi, которые больше компонентов gi файла g»

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

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

  1. Создаются два файла: f и g.
  2. Задается вопрос пользователю, сколько чисел записать в файлы.
  3. В цикле записываются случайные числа в файлы f и g.
  4. Затем происходит чтение содержимого файлов f и g.
  5. Далее начинается цикл, который удаляет из файла f числа, которые меньше или равны числам в файле g.
  6. После завершения цикла происходит вывод остатка содержимого файла f.
  7. Если после удаления всех меньших чисел в файле f остаются числа, то выводится сообщение об этом.
  8. Цикл чтения и записи чисел в файлы продолжается до тех пор, пока в файле f не останется ноль чисел.
  9. После этого происходит закрытие файлов и вывод сообщения о завершении программы.

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

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