Помогите с решением задачи по с++

Дан массив действительных чисел B (M, N). Сформировать вектор Y (N), в который записать произведение положительных элементов соответствующих столбцов матрицы.

int main()
{
    const int M = 3;
    const int N = 3;
    int B[M][N];
    int Y[N];
    int m = 1;
    //int i;
    //int j;

    for (int i(0); i < M; i++)
    {
        for (int j(0); j < N; j++)
        {
            cout << "B[" << i << "]" << "[" << j << "] = ";
            cin >> B[i][j];
            if (B[i][j] > 0)
                //B[i][j] = B[i+1][j];
            m *= B[i][j];
            Y[i] = m;           
        }
        m = 1;
    }
    cout << "New array" << endl;
    for (int i(0); i < M; i++)
    {
        cout << "Y[" << i << "] = " << Y[i] << endl;
    }
}

Получается найти по строке, а по столбцу не знаю как


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

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

Надо разбить на 2 группы циклов. В первой - ввод, во второй - считаешь. Во второй идёшь снаружи по j, а внутри по i. Так за рассмотрение 1 столбца, будет проходить все строки.

int main(){
    const int M = 3;
    const int N = 3;
    int B[M][N];
    int Y[N];

    for (int i = 0; i < M; i++)
        for (int j = 0; j < N; j++){
            cout << "B[" << i << "]" << "[" << j << "] = ";
            cin >> B[i][j];       
        }

    int m = 1;
    for (int j = 0; j < N; j++){
        for (int i = 0; i < M; i++){
            if (B[i][j] > 0)
                m *= B[i][j];
            Y[j] = m;    
        }
        m = 1;
    }
    cout << "New array" << endl;
    for (int i = 0; i < N; i++){
        cout << "Y[" << i << "] = " << Y[i] << endl;
    }
}
→ Ссылка