Проблема при решении задачи, некорректная работа логического ИЛИ

я начинающий программист и мне нужна ваша помощь по нахождению ошибки в моём коде (по-моему мнению ошибка в условии), только не ругайтесь сильно) Сама задача: Дан массив целых чисел, каждое из которых отлично от нуля. Если в массиве отрицательные и положительные члены чередуются (+, -, +, -, … или -, +, -, +, …), то получить новый массив, совпадающий с данным. Иначе получить новый массив из отрицательных элементов данного массива, сохранив порядок их следования.

#include <iostream>
using namespace std;

int main()
{
    int size1 = 0, size2 = 0;
    int *X; int *Y;
    cout << "Set up the size of array: "; cin >> size1;
    cout << endl;
    X = new int[size1];
    Y = new int[size2];
    cout << "fill in your array: ";
    for (int i = 0; i < size1; i++) {
        cin >> X[i];
    }
    size2 = size1;
    for (int i = 0; i < size1; i++) {
        if (X[i] < 0 && X[i + 1] > 0 || X[i] > 0 && X[i + 1] < 0) {
            Y[i] = X[i];
        }
        else 
            if (X[i] < 0) {
                Y[i] = X[i];
                size2++;
            }
    }
    cout << endl;
    cout << "Your array now = {";
    for (int i = 0; i < size2; i++) {
        cout << Y[i] << "\t";
    }
    cout << "}";
    system("pause");
    return(0);
}

Ответы (1 шт):

Автор решения: Mikhailo

Можно так:

#include <iostream>
using namespace std;

int sign(int x) {
    return x < 0 ? -1 : +1;
    }

int main() {
    int size1 = 0, size2 = 0;
    int* X;
    int* Y;
    cout << "Set up the size of array: ";
    cin >> size1;
    cout << endl;
    X = new int[size1];
    cout << "fill in your array: ";

    for (int i = 0; i < size1; i++) {
        cin >> X[i];

        if (X[i] < 0) size2++;  // Ищем число отрицательных
        }

    bool ok = true;

    for (int i = 1; i < size1; i++) {
        if (sign(X[i - 1])*sign(X[i]) > 0) {
            ok = false;         // Нет чередования знака
            break;
            }
        }

    if (ok) {
        size2 = size1;
        Y = new int[size2];

        for (int i = 0; i < size1; ++i) Y[i] = X[i];
        }
    else {
        Y = new int[size2];

        for (int i = 0, j = 0; i < size1; ++i) if (X[i] < 0) Y[j++] = X[i];
        }

    cout << "Your array now = {";

    for (int i = 0; i < size2; i++) {
        cout << Y[i] << ", ";
        }

    cout << "}\n";
    }
→ Ссылка