Удаление столбца в динамическом массиве с++

По задаче: дан динамический массив, если в первом столбце все положительные, удалить этот столбец, если нет - вывести матрицу без изменений. Помогите пожалуйста сделать функцию которая будет делать эти вычесления. Вот мой код:

#include <iostream>
#include <time.h>

using namespace std;

int** Create(int n, int m) {
    int** M = new int* [n];
    for (int i = 0; i < n; ++i) {
        M[i] = new int[m];
    }
    return M;
}

void Free(int** M, int n) {
    for (int i = 0; i < n; ++i) {
        delete[] M[i];
    }
    delete[] M;
}


void Fill(int** M2, const int rows, const int columns)
{
    srand(time(NULL));
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++) {
            M2[i][j] = rand() % 100 + -50;
        }

    }
}

void Print(int** M, int n, int m) {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cout << M[i][j] << ' ';
        }
        cout << endl;
    }
}

int main() {
    int n, m;

    cout << "kolvo strok: ";
    cin >> n;
    cout << "kolvo stolbcov: ";
    cin >> m;

    int** A = Create(n, m);

    Fill(A, n, m);

    Print(A, n, m);

    Free(A, n);

}

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

Автор решения: Елисей Савушкин

Решил задачу так:

void Proverka(int** M, int n, int m) {
    int shitalka = 0;
    for (int i = 0; i < n; ++i) {
        if (M[i][0] > 0 ) {
            shitalka++;
        }
    }

    if (shitalka == n) {
        for (int i = 0; i < n; ++i) {
            for (int j = 1; j < m; ++j) {
                cout << M[i][j] << ' ';
            }
            cout << endl;
        }
    }
    else {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                cout << M[i][j] << ' ';
            }
            cout << endl;
        }
        cout << endl;
    }
}
→ Ссылка
Автор решения: AR Hovsepyan

Наверняка проверка должна остаться проверкой, а функция записи уже пусть сама решит что выводить. Примерно так:

int checking(int** array, int row, int col)
{    
    for (int i = 0; i < row; ++i)
        if (array[i] < 0)
            return 0;
    return 1;
}
void Print(int** M, int n, int m) { 
    int start = checking(M, n, m); 
    for (int i = 0; i < n; ++i) {
        for (int j = start; j < m; ++j) 
            cout << M[i][j] << ' ';       
        cout << endl;
    }
}
→ Ссылка