Файлы удаление элементов, удаление повторяющихся элементов |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Файлы удаление элементов, удаление повторяющихся элементов |
mapblwka |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: Марина Репутация: 0 |
Уже не один день мучаю свой мозг.. Ну не могу я предумать такую процедуру... Помогите, а?
Дан файл f = file of integer. Удалить из файла все повторяющееся элементы, БЕЗ создания дополнительного файла, матриц и т.п. Вот такая разминка для мозгов. Заранее огромное спасибо! |
volvo |
Сообщение
#2
|
Гость |
Цитата(mapblwka @ 10.05.2006 22:16) Уже не один день мучаю свой мозг. Значит, должны быть наброски, какие-то попытки, идеи в конце-концов... Вот и покажи, КАК пыталась это сделать. |
mapblwka |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: Марина Репутация: 0 |
volvo, вся проблема в удаление элементов из файла, остальное я уже придумала в 5 вариантах, но функция удаления... я даже идийного алгоритма построить не могу.
|
Бродяжник |
Сообщение
#4
|
Бывалый Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: 3 |
Смущает вот что: ну хорошо, мы удалили повторяющиеся элементы, то есть было в файле 122333456, стало
123456. Значит ли это, что длина файла должна была уменьшиться? И если да, то как ее корректировать? Если дополнительные файлы запрещены, это значит, что все изменения надо производить на месте. Надо ли при этом менять длину файла? Удалить-то не проблема... |
Malice |
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
|
Бродяжник |
Сообщение
#6
|
Бывалый Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: 3 |
mapbwlka
Нужно открыть файл для чтения/записи. Потом прочесть первое число и запомнить его. Потом надо читать все последующие и сравнивать их с первым. Пока они разные, все нормально. Как только мы наткнулись на совпадение, начинаем развлекаться. Запоминаем позицию совпавшего числа. Читаем следующее за ним. Если оно отличается, перезаписываем его в запомненную позицию. Начиная с этого момента, у нас возникает две позиции в файле - очередная позиция чтения и очередная позиция записи. По мере выявления совпадений эти две позиции будут все больше расходиться. Когда мы дочитаем до конца файла, нужно урезать длину файла с учетом найденных повторений. Теперь мы смещаемся ко второму числу, читаем его и повторяем ту же процедуру. И так до упора. Весело будет... |
volvo |
Сообщение
#7
|
Гость |
mapbwlka, появилась у меня одна интересная идея... Только для того, чтобы браться за ее реализацию, я должен знать - ограничен ли размер файла, и есть ли какие-то временнЫе рамки (критична ли скорость выполнения программы)?
|
Malice |
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
mapbwlka, появилась у меня одна интересная идея... Только для того, чтобы браться за ее реализацию, я должен знать - ограничен ли размер файла, и есть ли какие-то временнЫе рамки (критична ли скорость выполнения программы)? Увеличить его придется максимум на 8Kb, я думаю это не критично. А по времени-если решать в лоб, без увеличения размера и использования другий файлов/массивов, полюбому дольше будет, причем гораздо.. |
volvo |
Сообщение
#9
|
Гость |
Malice, я кому задал вопрос? Тебе? Будь добр НЕ отвечать на те вопросы, которые заданы НЕ ТЕБЕ (вместо спрашиваемого), ОК? Ты что, знаешь, какой алгоритм я хочу предложить? Нет.
А догадываться будешь на форуме телепатов. Я понятно излагаю? |
hardcase |
Сообщение
#10
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
А вариант с открытым хэшированием не пройдёт?
Мы ползём по файлу, если следующего элемента нету в хэш-таблице, то добавляем его и дописываем в результирующий файл. Если элемент оказался в хэше, то переходим к следующему. В конце работы программа просто заменяет входной файл результирующим. --добавил чуток позднее ой! описание задачи недочитал! пардон. Тогда чего-то я не понимаю, как хранить промежуточную инфу? Если в файле - то это очень долго. Ну, например ты умудрилась всётаки грохнуть элементы - на их месте можно нули писать. Тогда потом можно просто уплотнить файл: переписать элементы с конца файла в "дырки" в середине файла. Сообщение отредактировано: hardcase - -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
volvo |
Сообщение
#11
|
Гость |
Вариант с рекурсией ОПЯТЬ не рассматривается? В стеке храниться все элементы и будут. Я для чего про размер файла спрашивал?
Вот, например, так: type |
hardcase |
Сообщение
#12
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Рекурсия - хорошая идея. только долго всё это будет: для каждого элемента бегать по файлу...
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
volvo |
Сообщение
#13
|
Гость |
И это я пытался у автора выяснить
Цитата(Self) (критична ли скорость выполнения программы)? Ответа почему-то не последовало ... Будем надеяться, что пока ... |
mapblwka |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: Марина Репутация: 0 |
ой! ребята! Вы такие умные тут! Все намного оказалось проще... Дошла до инута спросила "умных": "че делать???", ответ был до боли простой! truncate(var F) и все дела.
Переписывать письменный вариант решенной задачки честно лень, устала очень, позже выложу. Но вся фишка в том что: берем элемент файла, проверяем его на повторяемость, если повторяется, то каждый повторный элемент методом сдвига перегоняем в конец файла и truncate. Complete! почувствовала себя умной. Так вот в следующий раз СНАЧАЛА спроси у них "Че делать", а потом иди на форум. Понятно? Блин, мало того, что помоги человеку, так он еще и фыркает в ответ... Сообщение отредактировано: volvo - |
Vincent_Moro |
Сообщение
#15
|
Гость |
Рекурсия - хорошая идея. только долго всё это будет: для каждого элемента бегать по файлу... Рекурсия жрет дохрена ресурсов компухтера, лучше будет если мы все элементы файла вобьем в множество. С учетом, конечно, если порядок элементов в файле нам не важен. Такие сложные конструкции придумываете, что в космос запускай |
Текстовая версия | 3.11.2024 22:27 |