Функция не работает, не понимаю почему, как можно исправить?
Функция преобразует массив так, чтобы числа во введенном диапазоне были первыми, а затем уже остальные, но код выдает какую то ошибку и я не могу понять в чем проблема, я пробовал запустить отдельно и без этой функции все работает, что я сделал не так, подскажите пожалуйста
void result(double* a, int n, int x, int y) { double* b; b = new double[n]; for (int i = 0; i < n; i++) { b[i] = a[i]; } int j = 0; for (int i = 0; i < n; i++) { if (b[i] >= x || b[i] <= y) { a[j] = b[i]; j++; } } for (int i = 0; i < n; i++) { if (b[i] < x || b[i] > y) { a[j] = b[i]; j++; } } delete[]b; } |
void result(double* a, int n, int x, int y) { double* b; b = new double[n]; for (int i = 0; i < n; i++) { b[i] = a[i]; } int j = 0; for (int i = 0; i < n; i++) { if (b[i] >= x || b[i] <= y) { a[j] = b[i]; j++; } } for (int i = 0; i < n; i++) { if (b[i] < x || b[i] > y) { a[j] = b[i]; j++; } } delete[]b; }
Дополнительно:
Nexpie https://qna.habr.com/help/rules#3.8
Ответы:
что я сделал не так, подскажите пожалуйста
if (b[i] >= x || b[i] <= y) { a[j] = b[i]; j++; } ... if (b[i] < x || b[i] > y) { a[j] = b[i]; j++; }if (b[i] >= x || b[i] <= y) { a[j] = b[i]; j++; } ... if (b[i] < x || b[i] > y) { a[j] = b[i]; j++; }
Условия в операторах if не являются взаимоисключающими, а значит j может стать больше чем n и запись в a[j] вылезет за границу массива.
Я не уверен в правильности первого условия, но особо не задумываясь можно второе условие переписать как прямое отрицание первого: if (!(b[i] >= x || b[i] <= y)) и это гарантирует, что индекс не выйдет за пределы массива, вне зависимости от правильности первого условия.
Если x и y - это min и max, то у вас ошибка:
if (b[i] >= x || b[i] <= y)
надо
if (b[i] >= x && b[i] <= y)
Копировать элементы можно с помощью std::memcpy, а не в цикле поэлементно.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы разобраться, почему функция не работает, необходимо провести анализ кода и выявить возможные причины проблемы. Вот несколько шагов, которые могут помочь вам исправить ошибку:
1. Проверьте синтаксис функции: убедитесь, что все скобки открыты и закрыты правильно, все точки с запятой стоят на своих местах.
2. Проверьте передаваемые аргументы: убедитесь, что вы передаете правильное количество аргументов и в правильном порядке.
3. Проверьте область видимости переменных: убедитесь, что все используемые переменные объявлены и доступны внутри функции.
4. Проверьте логику функции: убедитесь, что условия и операторы внутри функции написаны правильно и выполняются в нужном порядке.
5. Проверьте вывод функции: убедитесь, что функция возвращает ожидаемый результат или выполняет нужные действия.
Если после выполнения этих шагов проблема не будет решена, то вам может потребоваться более детальное изучение кода или использование отладочных инструментов для выявления ошибки.
Пример кода на языке PHP:
function myFunction($arg1, $arg2) { if ($arg1 > $arg2) { return "Argument 1 is greater than Argument 2"; } else { return "Argument 2 is greater than Argument 1"; } } // Пример использования функции $result = myFunction(5, 3); echo $result;
Надеюсь, эти советы помогут вам исправить проблему с функцией. Если у вас есть дополнительные вопросы или нужна дополнительная помощь, не стесняйтесь задавать.