Оставить в 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 не останется ноль чисел.
- После этого происходит закрытие файлов и вывод сообщения о завершении программы.