Вопрос по информатике:
Задача: В типизированном файле поменять местами две записи.
То есть дан номер маршрута 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;
Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?
Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок - бесплатно!
- 09.05.2017 07:43
- Информатика
- remove_red_eye 1713
- thumb_up 45
Ответы и объяснения 2
Здесь нужно использовать вспомогательный типизированный файл и, соответственно, вторую файловую переменную (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;
- 01.01.1970 00:00
- thumb_up 40
Знаете ответ? Поделитесь им!
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.