@Nexpie

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

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

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;
}
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
что я сделал не так, подскажите пожалуйста
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)) и это гарантирует, что индекс не выйдет за пределы массива, вне зависимости от правильности первого условия.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Если x и y - это min и max, то у вас ошибка:
if (b[i] >= x || b[i] <= y)
надо
if (b[i] >= x && b[i] <= y)

Копировать элементы можно с помощью std::memcpy, а не в цикле поэлементно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект