Оставить в 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.
Объяснение кода листинга программы
- Создаются два файла: f и g.
- Задается вопрос пользователю, сколько чисел записать в файлы.
- В цикле записываются случайные числа в файлы f и g.
- Затем происходит чтение содержимого файлов f и g.
- Далее начинается цикл, который удаляет из файла f числа, которые меньше или равны числам в файле g.
- После завершения цикла происходит вывод остатка содержимого файла f.
- Если после удаления всех меньших чисел в файле f остаются числа, то выводится сообщение об этом.
- Цикл чтения и записи чисел в файлы продолжается до тех пор, пока в файле f не останется ноль чисел.
- После этого происходит закрытие файлов и вывод сообщения о завершении программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д