Есть ответ 👍

:в типизированном файле поменять местами две записи. то есть дан номер маршрута marshrut.nk.n, количество остановок до метро marshrut.nk.k. надо найти маршрут 11 и поменять его местами со след записью. вот часть кода именной этой процедуры, с сортировкой т.к. та, которая написана ниже не робит. var marshrut, y: tmarshrut; vidtransporta: tvidtransporta; fr: file of tmarshrut; n, kol, k: integer; filename: string[80]; begin while not eof(fr) and (kol=0) do begin read(fr, marshrut); if (marshrut.nk.n = '11') then begin writeln('маршрут: ',marshrut.nk.n, ' количество остановок до метро: ',marshrut.nk.k); inc(kol); k: =filepos(fr)-1; y: =filepos(fr); seek (fr, 0); write (fr, y); seek (fr, 1); write (fr, k); write('в файле изменена запись номер', k+1); write(fr, marshrut); end; end; if kol=0 then writeln('данные, соответствующие запросу, не найдены'); closefile(fr); write('press enter'); readln; end;

168
353
Посмотреть ответы 3

Ответы на вопрос:

kzifi
4,7(33 оценок)

Здесь нужно использовать типизированный файл и, соответственно, вторую файловую переменную (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;
Sen9l
4,6(62 оценок)

Поясни по нормальней

//pascal var   i, n: integer;   p: real; begin   p : = 1;   readln(n);   for i : = 1 to n do p : = p * 2 * i / (2 * i + 1);   writeln(p); end.

Популярно: Информатика