Составить программу , с помощью которых: -сформировать файл из записей, содержащих сведения о книге(фамилия автора, год издания,название) -исключить все книги с названием » Информатика» — Pascal(Паскаль)

uses crt;
type book=record
          fam:string[20];
          god:word;
          naz:string[20];
          end;
var  f:file of book;
     z,b:book;
     c:char;
     i,j,k:integer;
begin
clrscr;
assign(f,'book');
rewrite(f);
writeln('Введите в файл данные о книгах, окончание Esc');
i:=0;
repeat
i:=i+1;
writeln('Книга ',i);
with z do
 begin
  write(' Фамилия: ');readln(fam);
  write(' Год издания:');readln(god);
  write(' Название: ');readln(naz);
  write(f,z);
 end;
c:=readkey;
until c=#27;
clrscr;
writeln('Содержание исходного файла:');
writeln('------------------------------------------');
writeln('|     Автор      |  Год  |    Название   |');
writeln('------------------------------------------');
reset(f);
while not eof(f) do
 begin
  read(f,z);
  with(z) do
   begin
    gotoXY(1,whereY);write('| ',fam);
    gotoXY(18,whereY);write('| ',god);
    gotoXY(26,whereY);write('| ',naz);
    gotoXY(42,whereY);writeln('|');
   end;
 end;
writeln('------------------------------------------');
close(f);
write('Press Enter...');
readln;
{будем удалять записи}
reset(f);
k:=0;i:=0;
while i<=filesize(f)-2-k do{последнюю пока не проверяем, выйдем за файл}
 begin
  seek(f,i);
  read(f,z);
  if z.naz='Информатика' then
   begin
    k:=k+1; {считаем}
    for j:=i to filesize(f)-2 do{идем вперед}
     begin
      seek(f,j+1);{переставляем - сдвигаем - записи вверх на 1}
      read(f,b);
      seek(f,j);
      write(f,b);
     end
   end
  else i:=i+1;{если нет вперед}
 end;
seek(f,filesize(f)-1-k);{проверяем последнюю, она сдвинулась на к вверх}
read(f,z);
if z.naz='Информатика' then k:=k+1;
seek(f,filesize(f)-k);{встаем в последнюю не удаленную запись}
truncate(f);{обрезаем файл}
close(f);
reset(f);
if filesize(f)=0 then writeln('Все записи удалены!')
else
 begin
  writeln('Книги с названием Информатика исключены:');
  writeln('------------------------------------------');
  writeln('|     Автор      |  Год  |    Название   |');
  writeln('------------------------------------------');
  while not eof(f) do
   begin
    read(f,z);
    with(z) do
     begin
      gotoXY(1,whereY);write('| ',fam);
      gotoXY(18,whereY);write('| ',god);
      gotoXY(26,whereY);write('| ',naz);
      gotoXY(42,whereY);writeln('|');
     end;
   end;
  writeln('------------------------------------------');
 end;
close(f);
write('Press Enter...');
readln
end.

Leave a Comment

8 + 2 =