Функция не работает, не понимаю почему, как можно исправить?

Ссылка скопирована
1 ответ

Функция преобразует массив так, чтобы числа во введенном диапазоне были первыми, а затем уже остальные, но код выдает какую то ошибку и я не могу понять в чем проблема, я пробовал запустить отдельно и без этой функции все работает, что я сделал не так, подскажите пожалуйста

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
Елена Вебер Ответ

Для того чтобы разобраться, почему функция не работает, необходимо провести анализ кода и выявить возможные причины проблемы. Вот несколько шагов, которые могут помочь вам исправить ошибку:

1. Проверьте синтаксис функции: убедитесь, что все скобки открыты и закрыты правильно, все точки с запятой стоят на своих местах.

2. Проверьте передаваемые аргументы: убедитесь, что вы передаете правильное количество аргументов и в правильном порядке.

3. Проверьте область видимости переменных: убедитесь, что все используемые переменные объявлены и доступны внутри функции.

4. Проверьте логику функции: убедитесь, что условия и операторы внутри функции написаны правильно и выполняются в нужном порядке.

5. Проверьте вывод функции: убедитесь, что функция возвращает ожидаемый результат или выполняет нужные действия.

Если после выполнения этих шагов проблема не будет решена, то вам может потребоваться более детальное изучение кода или использование отладочных инструментов для выявления ошибки.

Пример кода на языке PHP:

function myFunction($arg1, $arg2) {
    if ($arg1 &gt; $arg2) {
        return "Argument 1 is greater than Argument 2";
    } else {
        return "Argument 2 is greater than Argument 1";
    }
}
 
// Пример использования функции
$result = myFunction(5, 3);
echo $result;

function myFunction($arg1, $arg2) { if ($arg1 &gt; $arg2) { return "Argument 1 is greater than Argument 2"; } else { return "Argument 2 is greater than Argument 1"; } } // Пример использования функции $result = myFunction(5, 3); echo $result;

Надеюсь, эти советы помогут вам исправить проблему с функцией. Если у вас есть дополнительные вопросы или нужна дополнительная помощь, не стесняйтесь задавать.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно