Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Четность/нечетность отрицательных чисел

#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) Проблема в том, что первое условие для отрицательных чисел дает отрицательный остаток.:) Посмотрите результат этой демонстрационной программы #include int 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

Комментариев нет:

Отправить комментарий