Задайте с клавиатуры номер компоненты N, с которой необходимо удалить K элементов типизированного файла

lighthunter

Создайте типизированный файл вещественных чисел. Задайте с клавиатуры номер компоненты N, с которой необходимо удалить K элементов файла. Выведите компоненты исходного и усеченного файлов. Дополнительный файл для решения задачи не использовать.
4 ответа

lighthunter

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


lighthunter

Спасибо !


lighthunter

А можно ли создать такуюже программу только с выводом и текстового файла и типизированного. Причем в текст файле можно было прочесть результаты работы программы?


lighthunter

Можно, перепишите содержимое типизированных файлов в текстовые, если Вам это нужно, мне не нужно.