#cpp #if #условия
Возможно глупая ошибка, но сам разобраться не могу. Есть цикл на проверку четности в программе. Все нечетные числа нужно поделить на среднее арифметическое всех чисел. Вот фрагмент. void input (ofstream &in) { vectorarr; 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
Комментариев нет:
Отправить комментарий