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

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

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

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

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

textual
Листинг программы
  1. uses crt;
  2. var f,g:file of integer;
  3.     n,i,j,k,a,b:integer;
  4. begin
  5. clrscr;
  6. randomize;
  7. assign(f,'filef');
  8. rewrite(f);
  9. assign(g,'fileg');
  10. rewrite(g);
  11. repeat
  12. write('Сколько чисел записать в файлы n>1 n=');
  13. readln(n);
  14. until n>1;
  15. for i:=1 to n do
  16.  begin
  17.   a:=random(50);
  18.   write(f,a);
  19.   b:=random(50);
  20.   write(g,b);
  21.  end;
  22. writeln('Содержание исходного файла F:');
  23. reset(f);
  24. while not eof(f) do
  25.  begin
  26.   read(f,a);
  27.   write(a:4);
  28.  end;
  29. writeln;
  30. writeln('Содержание файла G:');
  31. reset(g);
  32. while not eof(g) do
  33.  begin
  34.   read(g,a);
  35.   write(a:4);
  36.  end;
  37. writeln;
  38. {будем удалять из файла F которые <=G[i]}
  39. reset(f);
  40. reset(g);
  41. for i:=filesize(f)-1 downto 0 do
  42.  begin
  43.   seek(f,i);
  44.   read(f,a);
  45.   seek(g,i);
  46.   read(g,b);
  47.   if a<b then
  48.    begin
  49.     if i=filesize(f) then
  50.      begin
  51.       seek(f,i);
  52.       truncate(f);
  53.      end
  54.     else
  55.      begin
  56.       for j:=i to filesize(f)-2 do{идем вперед}
  57.        begin
  58.         seek(f,j+1);{переставляем - сдвигаем - записи вверх на 1}
  59.         read(f,a);
  60.         seek(f,j);
  61.         write(f,a);
  62.        end;
  63.       seek(f,filesize(f)-1);
  64.       truncate(f);
  65.      end;
  66.    end;
  67.  end;
  68. close(g);
  69. reset(f);
  70. if filesize(f)=0 then write('Все элементы из файла F удалены')
  71. else
  72.  begin
  73.   writeln('Числа, оставшиеся в файле F');
  74.   while not eof(f) do
  75.    begin
  76.     read(f,a);
  77.     write(a:4);
  78.    end;
  79.  end;
  80. close(f);
  81. readln
  82. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы