Задача: В типизированном файле поменять местами две записи. То есть дан номер маршрута...

0 голосов
66 просмотров

Задача: В типизированном файле поменять местами две записи.
То есть дан номер маршрута 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;


Информатика (72 баллов) | 66 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

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

(194k баллов)
0

интересный вариант решения, но не самый практичный, но все равно спасибо!

0

Можно и более практично, конечно. Просто кажется, что с двумя файлами алгоритм понятнее.

0

Второй код точно работает! Спасибо огромное!

0 голосов

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

(32 баллов)
0

короче я не знаю как провести сортировку в типиз файле

0

видишь я нахожу строку с "маршрутом 11", но далее не знаю, как ее переставить со следующей

0

то есть если строка с "маршрутом 11" 1-ая, то мне ее надо переставить со 2-ой, т.е. поменять местами