![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Nikolas |
![]()
Сообщение
#1
|
Гость ![]() |
Здравствуйте.
Помогите пожалуйста выполнить задачу на Си. Она основано на другой уже выполнено задаче. Суть её состояла в том, что нужно было подать строку символов и выдать в итоге сколько и каких символов в ней использовалось. С этой задачей мне уже помогли на этом форуме. Прошу помочь и с её продолжением. преподаватель сказал, что теперь подавать надо не строку символов а массив чисел и сказал, что это приводит к некоторому видоизменению программы. решение предыдущей задачи заключалось в том, чтобы просто за индексы массива взять считываемые символы, а значением ячейки присваивать кол-во этих символов в строке.... Вот так прошу помочь с решением, ну или хотя бы объяснить в чём смысл изменения программы при использовании массива числового. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата в чём смысл изменения программы при использовании массива числового Для начала давай разберемся с ограничениями. С какими числами будешь работать (меня интересует интервал значений)? Сколько будет таких чисел?Пойми, до тех пор, пока ты не дашь эту информацию, ничего сказать нельзя. Например, если ты работаешь с числами в интервале 0 .. 255, то программа просто не изменится. Если же интервал будет 0 .. (2^32 - 1), то придется применять специальные методы обработки, ибо не получится у тебя работать с массивом такой размерности... |
Гость |
![]()
Сообщение
#3
|
Гость ![]() |
Понимаю...
Ну как я понял преподавателя, то проблема видимо именно в этом, что всё это дело уходит за пределы в 255....иногда сильно уходит....правда от него прозвучала странная фраза, что это не возможно а займёт много памяти, но возможно он оговорился или я не понял.... Если предположить, что дело именно в интервале и он достаточно большой то можно ли помочь мне? Был бы очень благодарен за исходник.... (если есть время, то хоть с короткими комментариями)... |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Если предположить, что дело именно в интервале и он достаточно большой то можно ли помочь мне? Можно. Создаешь на диске файл байтов размером 2 Гб, и используешь его вместо массива. Т.е. при получении числа 2409 просто переходишь на позицию №2409 в файле (fseek), читаешь байт, находящийся на этой позиции, увеличиваешь его на 1, и пишешь назад...Алгоритм понятен? Ограничения: максимальные значения счетчиков не более 255 (если работать с файлом из байтов). Преимущества: допустимый интервал чисел: 0 .. 2147483647 Такой метод устроит? |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
меня да а вот препод сказал, что как раз надо бы обойтись без крупных файлов...можно ещё что - то придумать, но вот если честно алгоритм не понял, если можно другой? Если нельзя то очень буду благодарен исходнику хотя бы этого, так си я только начал учить вот и с файлами и всем подобным работаю не очень....
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ага... Без крупных файлов, без современных компиляторов, без...
Без компьюьера не надо обойтись? Все остальные варианты будут занимать память (которой и так всегда не хватает), что менее желательно, чем работа с большим файлом... Хочешь - реализуй Hash, но это скорее всего даст тебе только проигрыш, ибо опять же, ты не сказал НИЧЕГО об интервалах, и НИЧЕГО о количестве чисел. Больше я на пустые вопросы отвечать не буду. Хочешь конкретики - давай информацию. |
Гость |
![]()
Сообщение
#7
|
Гость ![]() |
Извини... постараюсь более конкретно, но не могу сказать больше чем сказали мне.... почти дословно - количество чисел намного больше чем 255 и массив здесь не катит, в качестве примера привели
+- 2147483647, что то в этом роде, точно я число конечно не помню, но скорее так.... всё что я знаю... т.е. ты во всём прав только теперь у меня не хватает знаний чтобы так сделать вот в чём вся проблема.... |
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
Доброго времени суток.
Дело в том, что преподаватель немного изменил условие, толи осознал, что его нынешняя формулировка ещё сложна для нас то ли просто некорректно сформулировал, но факт остаётся фактом... Теперь суть заключается в том, что подаётся массив чисел, и надо в этом массиве найти одинаковые числа, именно числа а не цифры... т.е. 12 654 7852 12 7852 результат 12 - 2 раза 654 - 1 раз 7852 - 2 раза Вот так. Если можно опять попрошу помочь.... вообще я немного не понимаю есть ли в этой задаче подвох? В общем помогите пожалуйста. |
klem4 |
![]()
Сообщение
#9
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Ну видимо тут 2 варианта, либо сортировать массив, потом подсчитывать, либо вот так :
# include <stdio.h> -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Гость, опять тот же вопрос: интервалы чисел какие? Количество чисел?
|
Гость |
![]()
Сообщение
#11
|
Гость ![]() |
Ой извини не хотел....
Кол во чисел максимально дотупное для массива 256, значения чисел ".... любое из диапахона типа Int ..." |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
klem4, так что твоя программа при попытке
arr = (int*)malloc(n * sizeof(int));(а вызывать тебе ее придется так: InitArray(arr, 65536)) вылетает по попытке работы с нулевым указателем (malloc за один раз столько памяти не выделит, и вернет NULL) |
klem4 |
![]()
Сообщение
#13
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата 65536 А зачем так много - то ? На солкько я понял по последнему посту автора, количество элементов в массиве вооще будет < 256, так что можно в принципе вообще без динамического массива обойтись ? Цитата(гость) Кол во чисел максимально дотупное для массива 256 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата А зачем так много - то ? Потому что нужно отвести место для хранения счетчиков для ЛЮБОГО числа... А число - Цитата ".... любое из диапахона типа Int ..." |
klem4 |
![]()
Сообщение
#15
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Так у меня программа по другому принципу работает, я сделал простой массив и просто-нарпосто подсчитывал сколько каждый элемент в нем повторяется.
![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Цитата На солкько я понял по последнему посту автора, количество элементов в массиве вооще будет < 256 Попробуй... Вот тебе 10 чисел для теста:1, -25200, 32000, -17500, -25200, 0, -17500, -17500, 6, 4 Количество экземпляров КАЖДОГО элемента в массиве меньше 256? Меньше... Каждое число в диапазоне Int? В диапазоне... Твой ход... ![]() Цитата просто-нарпосто подсчитывал сколько каждый элемент в нем повторяется. А если я выпишу в ряд все числа от -32768 до 32767, они что все поместятся в твой массив? Как считать-то будешь, если НЕЧЕГО считать? |
klem4 |
![]()
Сообщение
#17
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата -32768 до 32767 Так где в задании сказано что массив должен быть таким огромным ?!!! Этот интервал - интервал для значений элементов, так с этим никаких проблем нет ! И вовсе не нужно юзать массив a[65536], если нам конечно не нужно подсчитывать одинаковые элементы среди такого огромного количества. Либо я вообще ничего не понял в чем суть. Эскизы прикрепленных изображений ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Nucris |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ребята не подскажите алгоритм, т.е. не рсшифруете запись?
Ещё такая проблема... на каком компилятора без проблем запускается? Просто у меня почему ругается.... что посоветуете? Может скинуть сюда сведния? |
Nucris |
![]()
Сообщение
#19
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Небольшая поправка, что желательно задачу напистаь на С и адаптировать к компилятору Visual C
|
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Цитата если нам конечно не нужно подсчитывать одинаковые элементы среди такого огромного количества. Знаешь, мне тоже надоело работать тут телепатом. Автор НИЧЕГО не хочет говорить, а то, что говорит - как будто специально запутывает обсуждение еще больше... Так что, Sorry, пока не будет тестовых данных - ничего не могу поделать, для решения задачи нет ЧЕТКОЙ информации. |
![]() ![]() |
![]() |
Текстовая версия | 22.07.2025 2:32 |