![]() |
|
Модераторы: bsa |
![]()
|
|
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Даны записи R1, ..., RN и r1, ..., rn, ключи которых различны и упорядочены, т.е. K1<...<KM и k1<...<kn. Разработать алгоритм и программу слияния этих записей в один файл, в котором отсутствуют записи Ri первого файла, если во втором файле есть запись с таким же ключом.
Посмотрите пожалуйста, я правильно сделал два файла с ключами? Помогите пожалуйста слить их в один с заменой записей первого файла на записи второго при условии одинакового ключа
|
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
up
|
|||
|
||||
| feodorv |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну, что же так всё безнадёжно?
Условие задачи предполагает более рассеянные значения ключа (кстати, не задано, что ключ записи - целочисленное значение, но пусть будет), нежели прямолинейное То есть должны быть записи как пересекающиеся, так и не пересекающиеся в этих двух файлах. Более того, в записи хотелось бы иметь текстовое поле со значением "Файл 1" для записи в первом файле и значением "Файл 2" для записи во втором файле. Тогда легко можно понять, откуда в выходной файл пропала та или иная запись.
Поскольку записи изначально отсортированы, то то Вам нужно всего лишь читать параллельно эти два файла по одной записи. Если ключи записей не совпадают, то запись с меньшим ключом записывается в выходной файл, а вместо неё (из соответствующего ей входного файла) считывается следующая запись (а запись с большим ключом остаётся как есть на следующий шаг цикла). Если ключи совпадают, то в выходной файл записывается запись из второго файла, и из обоих входных файлов считываются следующие записи. Если какой-либо входной файл закончился (то есть из него прочли все записи), а другой файл ещё нет, то записи из последнего тупо читаются и сбрасываются в выходной файл. Условно алгоритм слияния выглядит так:
Схему с if-else можно упростить:
но тогда нужно отдавать себе отчёт в том, что происходит. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||
|
|||||||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Спасибо большое, только с записью в выходной файл тоже проблема, не знаю, как записать их туда, не получается
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Записывайте аналогично тому, как Вы это делаете в первом посте. А с чтением записей проблем нет? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Записать не получается в итоговый файл, алгоритм ещё не вставлял. И с рандомом небольшие проблемы - хочу сделать, чтобы рандомные числа не повторялись, а они всё равно повторяются
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Для ключей рандомные значения не очень годятся. Мало того, что повторяемость, так еще и отсутствует упорядоченность. Сделайте проще: для первого файла значения ключей - 2, 4, 6, .... Для второго файла - 3, 6, 9, ... Так получится и уникальность ключей для каждого файла, и их отсортированность, и относительная рассеянность. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Да, хорошая идея
А что в себе структура entry содержит? |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Это условная единица, соответствующая записи в файле. Должна содержать ключ и собственно поля записи. У Вас это keys и Arr для какого-то i. Условные вызовы read и write должны уметь читать и писать запись в файл/из файла. В программе, которую Вы привели, нет даже попытки чтения записи, делается вид, что записи как бы уже прочитаны из файлов (и ещё ограничили число записей ста штуками))) А ведь в задании ясно сказано, что изначально записи находятся в файлах: То есть на входе у Вас - два файла, на выходе - один... По хорошему было бы неплохо ввести в программу класс, соответствующий записи, с переопределёнными операторами >> и <<, но это на потом -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Уфф, что-то сложно получается всё. Я сколько доселе ни пытался, так и не смог считать и записать данные
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну, поищите в инете по запросу типа "c++ запись структуры в файл и чтение из файла" и найдите что-нибудь подходящее, например, это (для бинарной записи)... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Запутался
|
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
up
|
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
и ещё up
|
|||
|
||||
| feodorv |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Во-первых
Если уж Вам так хочется зарезервировать место под 100 записей, то пишите так:
Соответственно, чтение записи будет
Во-вторых, у Вас отдельно стоит задача создания двух файлов данных, и отдельно задача слияния этих файлов в один файл. Не стоит смешивать эти две задачи в одном исходнике... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||||||
|
|||||||||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |