#cpp #if #условия
Возможно глупая ошибка, но сам разобраться не могу. Есть цикл на проверку четности
в программе. Все нечетные числа нужно поделить на среднее арифметическое всех чисел.
Вот фрагмент.
void input (ofstream &in) {
vector arr;
generate_n (back_inserter (arr), 100,
[] {return rand() % 101 - 50;});
transform(arr.begin(),arr.end(),
ostream_iterator(in, " "),
[] (int x) {return x;});
}
vector inputfile(ifstream & out) {
vector arr;
transform(istream_iterator(out),istream_iterator(), back_inserter(arr),
[] (int x) {return x;});
return arr;
}
vector modify (vector & other) {
int var = 0;
vector arr;
var = accumulate(other.begin(), other.end(), 0) / 100;
cout << "Sum of Array = " << var << endl << endl;
transform(other.begin(), other.end(), back_inserter(arr), [&var] (int x) {
if (x % 2 == 1) //здеcь задается условие проверки
x /= var;
return x;
});
return arr;
}
Дело в том что программа делит только положительные нечетные числа, а отрицательные
игнорирует
Ответы
Ответ 1
Замените условие if (x % 2 == 1) на условие if (x % 2 != 0) Проблема в том, что первое условие для отрицательных чисел дает отрицательный остаток.:) Посмотрите результат этой демонстрационной программы #includeint main() { int x = -11; std::cout << x % 2 << '\n'; return 0; } Вывод на консоль: -1 Обратите внимание на то, что вместо алгоритма std::transform в том контексте, в котором вы его используете, проще использовать алгоритм std::copy. Ответ 2
Возможна проверка используя операцию логическое И. int a = -10; int b = -11; std::cout<< (a & 1)<<'\n'; std::cout<< (b & 1)<< '\n'; output: 0 1
Комментариев нет:
Отправить комментарий