Здесь нужно использовать вс типизированный файл и, соответственно, вторую файловую переменную (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;
// PascalABC.NET 3.3, сборка 1634 от 14.02.2018 // Внимание! Если программа не работает, обновите версию!
begin var fn:='MtFile.bin'; var n:=ReadInteger; var f:file of integer; var s:=SeqRandom(n,-3000,8000); // последовательность не хранится Rewrite(f,fn); foreach var m in s do Write(f,m); f.Close; // файл создан и закрыт Reset(f,fn); var b:integer; // буфер while not Eof(f) do begin Read(f,b); Print(b) end; Writeln; Seek(f,0); // стали в начало файла Read(f,b); var iOdd:=0; while not Eof(f) and b.IsEven do begin Read(f,b); iOdd+=1 end; if Eof(f) and b.IsEven then begin Writeln('Нет нечетных компонентов'); exit end; var (bb,iEven):=(b,n); repeat iEven-=1; Seek(f,iEven); Read(f,b) until (iEven=1) or b.IsEven; if b.IsOdd then begin Writeln('Нет четных компонентов'); exit end; Seek(f,iEven); Write(f,bb); Seek(f,iOdd); Write(f,b); Seek(f,0); while not Eof(f) do begin Read(f,b); Print(b) end; Writeln; f.Close end.
Відповідь:
Пояснення:
total = 0
for i in range(1, 16):
if i % 2 != 0:
total = total + i
print(total)