Консультация № 167954
22.05.2009, 07:33
0.00 руб.
0 3 1
Здравствуйте Уважаемые эксперты. Помогите пожалуйста вот с этим заданием: Получить файл Q «образованный из файла F, исключением чисел, которые встречаются только один раз. Заранее большое спасибо.

Обсуждение

Неизвестный
22.05.2009, 10:36
общий
Тип файла какой?
Неизвестный
22.05.2009, 20:15
общий
Любой
Неизвестный
22.05.2009, 23:21
общий
это ответ
Здравствуйте, Красниченко Ольга!
Вот в приложении исходный код программы с комментариями
Пример окна программы:
Код:
Содержимое исходного файла f.txt
0 0 17 4 5 13 6 3 7 8 1 9 1 16 1 5 18 7 15 6
13 16 14 6 3 6 9 4 16 5 9 2 17 5 15 19 9 17 16 0

Содержимое файла q.txt
0 0 17 4 5 13 6 3 7 1 9 1 16 1 5 7 15 6 13 16
6 3 6 9 4 16 5 9 17 5 15 9 17 16 0


Приложение:
const
f_fileName: String = 'f.txt';
q_fileName: String = 'q.txt';
var
f, q: file of Integer;
{Выбираю типизированные файлы. С ними проще будет работа}
i, j, count, file_len: Integer;
position: Longint; {Так буду отмечать положение в файле}
BEGIN
{Этот блок создает файл f. Его следует удалить, если файл уже есть
Запишу в файл 40 случайных целых чисел}
Assign(f, f_fileName); Rewrite(f);
for i:=1 to 40 do begin
count := Random(20);
Write(f, count) end;
Close(f);
{Конец блока создания файла}

Assign(f, f_fileName);
{$I-} Reset(f); {$I+}
if IOResult <> 0 then begin
WriteLn('Не могу открыть файл ', f_fileName);
WriteLn('Работа программы завершена. Нажмите ENTER');
Halt(1);
end;
{Не буду ограничиваться каким-либо массивом. Буду прчитывать файл
последовательно: прочитаю число, пройдусь до тех пор, пока не
встретится такое же. Если такое пройзойдет, запищу число в Q.
Дойдя до конца, просмотрю и с начала до считываемого.
И вернутсь к считыванию следующего числа.
Если дойду до конца файла, а такого нет, то просто перейду к
анализу следующего
В этом случае длина анализируемого файла может быть очень большой}

{Сначала покажем содержимое исходного файла}
WriteLn('Содержимое исходного файла ', f_fileName);
while NOT EOF(f) do begin
Read(f, i); Write(i:3,' ');
end;
WriteLn;

Assign(q, q_fileName); Rewrite(q);

file_len := FileSize(f) - 1; {Счет начинается с нуля}

Reset(f); {Переход в начало файла}
position := -1; {Начало файла}
while position < file_len do begin
inc(position); {Увеличиваем положение в файле}
seek(f, position);
Read(f, i); {Файловый курсор при этом перемещается на след. число}
count := 0; {Нужно для того, чтобы не записывать число дважды}
while NOT EOF(f) do {До конца просматриваем}
begin
Read(f, j);
if i = j then {есть, по крайней мере, парный}
begin
Write(q, i); {записываем в файл}
count := 1;
Break; {Выход из ЭТОГО цикла}
end;
end;
if count = 0 then {то есть, во второй части файла не нашли пару}
begin
{Теперь с начала просмотрим}
seek(f, 0);
while FilePos(f) < position do begin
Read(f, j);
if i = j then begin
Write(q, i); Break
end;
end;
end;
end;
{Покажем g}
WriteLn('Содержимое файла ', q_fileName);
Reset(q);
while NOT EOF(q) do begin
Read(q, i); write(i:3,' ');
end;
WriteLn;
Close(f);
Close(q);
END.
Форма ответа