![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Help, если смогу!
Пользователь
Регистрация: 14.09.2009
Сообщений: 55
|
![]()
В файле натуральные числа. [файл типизированный | integer]
Числа встречающиеся 1 раз переписать в другой файл... Вот думаю оформить этой функцией, но в голову ничего не приходит как упорядочить в файле цифры и там уже скидывать, но это слишком не удобно( Подкиньте идейку..
Я помог =Нажми, НА ВЕСЫ.
Почему форум не поддерживает spoiler & spoiler2 ? Если я вам помог, не будьте скупым R409586472993 |
![]() |
![]() |
![]() |
#2 |
Ищу работу
Форумчанин
Регистрация: 16.02.2007
Сообщений: 269
|
![]()
самое просто наверное создать двухмерный массив,
считывать последовательно из файла числа и, если этого числа нет в массиве, то добавлять его, если есть, то увеличивать во втором столбце количество вхождений этого числа в файл. потом в цикле пробегать по всем элементам массива и если во втором столбце написано что число попадалось один раз то записывать его во второй файл, иначе пропускать
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
можно и так, как предложил MadReason
А можно использовать связный список. Т.к. это динамическая структура - то память под него будет выделяться по мере необходимости... |
![]() |
![]() |
![]() |
#4 |
Игрок
Форумчанин
Регистрация: 29.10.2006
Сообщений: 367
|
![]()
Вы конечно правы, но по правилам нельзя читать вот так файл в память. А если он 20 гигов весит? Тут ни массив ни список не поможет. Так что самый надежный способ - сортировка.
Жизнь всегда игра. Но смерть - не всегда поражение.
#define true (Math.random()>0.5) //Удачной отладки ![]() |
![]() |
![]() |
![]() |
#5 |
Ищу работу
Форумчанин
Регистрация: 16.02.2007
Сообщений: 269
|
![]()
а почему бы не читать файл блоками? а при сортировке файла в 20гигов будет слишком много обращений к диску, наверное медленно будет.
если такие входные то можно попробовать так: брать первый элемент в файле, пробегать по всем остальным элементам файла и искать совпадение, если найдено, то удаляем совпадения и сам элемент из файла. потом берем второй элемент файла и так далее
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
to Gambler
Цитата:
И давайте начнём с начала... по каким правилам нельзя? Абстрактно? Для любой задачи, любой файл нельзя читать в память? Например, если у Вас исходный текст модуля в Delphi будет 20 Гб - он откроется в IDE ? (если интересно - можете проверить). А если 20 Гб текстовый файл - Вы его в стандартном блокноте Windows откроете? тем более, если речь идёт о учебной задаче. Думаю, вполне можно допустить задать ограничение на размер файла. Проверять и если файл больше заданного размера - извините, подвиньтесь... Любая учебная задача, если в ней явно не оговорены лимиты и ограничения - может трактовваться так, как удобнее реализовать в данной ОС, в данном языке программирования ПРОГРАММИСТУ, решающему задачу. Это раз. Второе. Вы предлагаете отсортировать файл... Вы готовы отсортировать типизированный файл, НЕ ЧИТАЯ его в память? (целиком, разумеется). Методами внешней сортировки владеете?.. я уже не говорю о затратах времени и сил. и последнее. Задача ЭЛЕМЕНТАРНО и без всяких ограничений на размер (кроме ограничений файловой системы и структур доступа к типизированным файлам, разумеется), но при этом крайне НЕЭФФЕКТИВНО (в плане производительности и загрузки диска) решается так: Код:
|
|
![]() |
![]() |
![]() |
#7 |
Игрок
Форумчанин
Регистрация: 29.10.2006
Сообщений: 367
|
![]()
Да вы больше сил потратили что бы пост написать )))
Да, я знаю принципы внешних сортировок и одновременно я прекрасно понимаю, что это учебная задача и не надо тут изощряться. Но работая с файлами, надо всегда помнить, что их размер ничем не ограничен. А то я тысячу раз видел, как сначала пишут учебную программку, потом копируют код в какой нибудь драйве и наблюдаем багчек. Нужно учиться писать надежный код. Да, разница есть на нулевом мы кольце или на третьем. Не стоит мне про это рассказывать. на факт остается фактом: Файл может быть любого размера.
Жизнь всегда игра. Но смерть - не всегда поражение.
#define true (Math.random()>0.5) //Удачной отладки ![]() |
![]() |
![]() |
![]() |
#8 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
А ничего универсально в мире не бывает. И, кстати, файл "любого размера" быть не может... Если Вы не в курсе, размер файла ограничен используемой файловой системой. (эти ужасные программисты сделали БАГ и теперь нельзя создать файл неограниченного размера ![]() и ещё, Вы не ответили, пытались ли Вы открыть 20 Гб текстовый файл в блокноте (опять таки нерадивые индийские программисты писали блокнот взяв исходники из учебной задачи) или 20 Гб исходный .PAS файл пытались открыть в IDE Delphi ? ![]() Так напишете решение данной задачи с помощью сортировки, как Вы предложили на файле "любого размера" ? честное слово, мне было бы интересно и поучительно посмотреть подобное решение... Ибо как-то не приходилось сталкиваться с подобными реализациями... (Только не подумайте, пожалуйста, что я пытаюсь взять Вас "на слабо", отнюдь... нет времени, желания, возможности написать - ничего, обойдусь ![]() ладно. я согласен с Вами - спорить тут незачем, всё равно Вы останетесь при своём мнении, а я — при своём.. p.s. Цитата:
![]() |
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подсчитать серии (повторяющие числа в последовательности) и записать в типизированный файл | bunny | Помощь студентам | 4 | 06.12.2011 15:48 |
записать дату натуральными числами | Alina5545 | Общие вопросы C/C++ | 12 | 13.04.2010 22:03 |
C++. Прочитать файл и вывести в другой файл каждую N-ую строку | Straiker | Помощь студентам | 3 | 15.12.2009 05:49 |