24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Функция почему-то не работает. Почему? >Что она должна делать? Она берет три массива. В первом(к
>Что она должна делать? Она берет три массива. В первом(который a) ищет такой элемент, у которого длинна бы была максимальной(это я сделал в цикле while(j<3)). Потом уже, когда найдет максимальный элемент, то она его должна исключить как-бы - я решил сделать так, чтобы он был заменен на "некий нулевой элемент"(n). Потом уже берется второй массив(который c) и туда ставиться этот самый длинный элемент, но только этот элемент уже находился бы в другом массиве, а именно в третьем(т.е который d), где l изначально равно 0.
>зачем нужен ещё один массив с такими же элементами? По условию нужен просто, скажем так.
Потом я проверяю на то, а все ли элементы стали "нулевыми"(это я делаю в цикле while(jj<3)). И если они все нулевые, то прекращаю функцию - выбрал я для этого делать return. А если нет, то она должна будет сделать рекурсию - как я понял, надо её вызывать через return тоже. И да, в ней уже параметр l прибавляется на плюс один, чтобы тот третий.
Почему у меня ничего не работает? Пытаюсь вывести значение первого элемента первого массива, а он не выдает мне в консоли.
void func1(dot a, camera b, dot c, dot* d, dot n, int l) { int i = 0; int m; int j; int bb = 1;
while (i < 3) { m = 1; j = 0;
while (j < 3) { if ((dpif(a, b) - dpif(a[j], b)) >= 0) { bb = 1; j = j + 1; } else { bb = 0; break; // Exit the inner while loop if condition is not met } }
if (bb == 1) { a = n; c[l] = d; l = l + 1; int jj = 0; int bbb = 1;
while (jj < 3) { if (((a[jj].x == b.x) && (a[jj].y == b.y) && (a[jj].z == b.z))) { bbb = 1; jj = jj + 1; } else { bbb = 0; break; // Exit the inner while loop if condition is not met } }
if (bbb == 1) { return; } else { func1(a, b, c, d, n, l + 1); return; } } else { i = i + 1; } } }
Ваша функция может не работать из-за нескольких причин, которые можно определить, исходя из представленного кода:
1. Ошибка в слове return: В строке с retunr, должно быть return. 2. Потенциальные ошибки в условиях и логике: Убедитесь, что все условия, такие как (a[jj].x == b.x) && (a[jj].y == b.y) && (a[jj].z == b.z), выполняются корректно, и что функции dpif и другие используемые вами функции возвращают ожидаемые значения. 3. Неинициализированные переменные: Переменные n, c, d, t и их значения в коде должны быть инициализированы до использования. 5. Бесконечные циклы: Проверьте условия циклов while (i < 3) и while (jj < 3). Убедитесь, что переменные i и jj изменяются в теле циклов и что есть возможность выхода из циклов. 6. Обход массива: Убедитесь, что размеры массивов a, c и d достаточно велики, чтобы избежать выхода за границы массива.
>>304954161 (OP) Чувак, давай переменным осмысленные названия, а не рандомный буквы алфавита. Иначе спустя пару дней не будешь собственный код понимать, когда память подвыветрится. И мне, лично, не понятно нихуя.
>>304954161 (OP) Может разобьешь на функции поменьше? Как будто можно поэтапно сначала найти чето в одном, потом другой функцией уже вставлять куда-то. Так и дебажить будет проще. Ну если прям хочется в виде одной и не понять че происходит именно в твоем говнокоде - брейкпоинты тебе в помощь и поэтапная отладка. Может поможет.
>>304954161 (OP) >Потом уже берется второй массив(который c) и туда ставиться этот самый длинный элемент, но только этот элемент уже находился бы в другом массиве, а именно в третьем(т.е который d), где l изначально равно 0.
Если переведешь это с галоперидольного на русский, чтобы просто понять чо хочешь, можно было бы помочь.
>Что она должна делать?
Она берет три массива. В первом(который a) ищет такой элемент, у которого длинна бы была максимальной(это я сделал в цикле while(j<3)). Потом уже, когда найдет максимальный элемент, то она его должна исключить как-бы - я решил сделать так, чтобы он был заменен на "некий нулевой элемент"(n). Потом уже берется второй массив(который c) и туда ставиться этот самый длинный элемент, но только этот элемент уже находился бы в другом массиве, а именно в третьем(т.е который d), где l изначально равно 0.
>зачем нужен ещё один массив с такими же элементами?
По условию нужен просто, скажем так.
Потом я проверяю на то, а все ли элементы стали "нулевыми"(это я делаю в цикле while(jj<3)). И если они все нулевые, то прекращаю функцию - выбрал я для этого делать return. А если нет, то она должна будет сделать рекурсию - как я понял, надо её вызывать через return тоже. И да, в ней уже параметр l прибавляется на плюс один, чтобы тот третий.
Почему у меня ничего не работает? Пытаюсь вывести значение первого элемента первого массива, а он не выдает мне в консоли.