Удаление столбца в динамическом массиве с++
По задаче: дан динамический массив, если в первом столбце все положительные, удалить этот столбец, если нет - вывести матрицу без изменений. Помогите пожалуйста сделать функцию которая будет делать эти вычесления. Вот мой код:
#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;
}
}