2
sir.andreyЦитата:
Удалить из файла F повторяющиеся включения одного и того же числа.
ПРИМЕР: 10 13 2 5 6 7 6 9 10 2
13 2 5 6 7 9
Ничего не понятно. Нужно удалять повторяющиеся числа вообще или все-таки оставлять одно из их вхождений? В первом случае ваш пример бы выглядел как 10 13 2 5 6 7 6 9 10 2 -> 13 5 7 9, во втором -- как 10 13 2 5 6 7 6 9 10 2 -> 10 13 2 5 6 7 9. А у вас ни то, ни другое... Похоже на анекдот, в котором на вопрос "что пишешь?" программист отвечает "запустим -- узнаем".
Упростить программку можно создавая временные файлы. Например, если вам надо оставить одно единственное вхождение каждого числа, то вы просто поэлементно (число за числом) читаете исходный файл, ищите очередное прочитанное из оригинального файла число во временном (изначально пустом) файле, и добавляете это число во временный файл если его (числа) там ещё нет. В конце работы программульки удаляете исходный файл и выдаете временный файл за итоговый.
Если же вам надо удалить все вхождения повторяющихся чисел, то можно создать два временных файла, первый будет копией исходного, а второй -- пустым (в начале). Опять же, читаете исходный файл и ищите каждое число из него в первом временном файле, если вхождений ровно одно -- копируете текущее число во второй временный файл. В конце удаляете оригинальный и первый временный файл (копию исходного), второй же выдаете за результат работы.
Преимущество такого подхода заключается в простоте кода и, в частности, в отсутствии необходимости использования функции
seek(...). А вот когда все заработает, тогда уже и об оптимизации можно будет подумать...