Здесь нужно использовать вс типизированный файл и, соответственно, вторую файловую переменную (fr2). Сделать это можно так: while not eof(fr) and (kol=0) do begin read(fr, Marshrut); if (Marshrut.NK.N <> '11') then write(fr2,Marshrut) else begin inc(kol); y:=Marshrut; end; end; if not eof(fr) then begin read(fr, Marshrut); write(fr2,Marshrut); end; if (kol=1) then write(fr2,y); Дальше нужно просто переписать оставшиеся записи из первого файла во второй. Затем оба файла закрыть, первый файл удалить, а второй переименовать (т.е. назвать его так, как назывался первый файл).
Попробуйте ещё вот такой вариант: (здесь k1 и k2 - целые, а y - типа ) if (Marshrut.NK.N = '11') then begin writeln('... '); inc(kol); y:=Marshrut; k1:=FilePos(fr)-1; k2:=FilePos(fr); if not eof(fr) then begin read(fr, Marshrut); seek (fr, k1); write(fr, Marshrut); seek (fr, k2); write (fr, y); end;
end;
Вадим
28.07.2022
Var N, s, i: Integer; s1: real;
begin readln(N); {общий ввод для всех задач}
if N < 0 then writeln('Задача 1. N=', 0) else writeln('Задача 1. N=', N + 4);
s := 0; for i := 1 to n do s := s + i; writeln('Задача 7. 1+2+3+…+N=', s);
write('Задача 9. Последовательность от N до 1 = '); for i := n downto 1 do write(i, ' '); writeln();
s1 := 0; for i := 1 to n do s1 := s1 + i / 10; writeln('Задача 12. 0,1+0,2+0,3+..+N/10=', s1);
write('Задача 13. Последовательность квадратов от 1 до N = '); for i := 1 to n do write(i * i, ' '); writeln();
write('Задача 14. Последовательность первых N нечетных чисел = '); for i := 1 to n do write(2 * i - 1, ' '); writeln();
if N > 0 then writeln('Задача 20. N степень 3 = ', frac(ln(n) / ln(3)) = 0);
s := 0; for i := 1 to n do if n mod i = 0 then s := s + i; writeln('Задача 24. Сумма всех натуральных делителей числа N (сключая 1 и N) = ', s); end.
Сделать это можно так:
while not eof(fr) and (kol=0) do
begin
read(fr, Marshrut);
if (Marshrut.NK.N <> '11')
then write(fr2,Marshrut)
else begin inc(kol); y:=Marshrut; end;
end;
if not eof(fr) then
begin
read(fr, Marshrut);
write(fr2,Marshrut);
end;
if (kol=1) then write(fr2,y);
Дальше нужно просто переписать оставшиеся записи из первого файла во второй. Затем оба файла закрыть, первый файл удалить, а второй переименовать (т.е. назвать его так, как назывался первый файл).
Попробуйте ещё вот такой вариант:
(здесь k1 и k2 - целые, а y - типа )
if (Marshrut.NK.N = '11') then
begin
writeln('... ');
inc(kol);
y:=Marshrut;
k1:=FilePos(fr)-1;
k2:=FilePos(fr);
if not eof(fr) then
begin
read(fr, Marshrut);
seek (fr, k1);
write(fr, Marshrut);
seek (fr, k2);
write (fr, y);
end;
end;