C/C++

Помогите решить задачу на C++

Составить программу формирования матрицы, число строк и столбцов которой определяется как случайное натуральное число в промежутке [3, 8], а элементы - случайные целые числа от -50 до 50. Заменить неотрицательные числа полученной матрицы единицей, а отрицательные - нулем.
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
using namespace std;
int main() {
srand(unsigned(time(nullptr)));
auto n = RAND(3, 9);
auto m = RAND(3, 9);
auto matrix = new int* [n];
for (auto i = 0; i < n; ++i) {
matrix[i] = new int[m];
for (auto j = 0; j < m; ++j) {
matrix[i][j] = RAND(-50, 51);
cout << setw(4) << matrix[i][j] << ' ';
}
puts("\n");
}
puts("");
for (auto i = 0; i < n; ++i) {
for (auto j = 0; j < m; ++j) {
matrix[i][j] = matrix[i][j] < 0? 0 : 1;
cout << setw(4) << matrix[i][j] << ' ';
}
puts("\n");
}
system("pause > nul");
}
Андрей Рыбаков
Андрей Рыбаков
93 077
Лучший ответ
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int k, l;
void print(int **a)
{
int i, j;
for (i = 0; i < k; i++)
{
for (j = 0; j < l; j++) cout << setw(4) << a[i][j];
cout << endl;
}
}
int main()
{
int i, j;
srand(time(NULL));
for (;;)
{
k = 3 + rand() % 6;
l = 3 + rand() % 6;
int **Array = new int *[k];
for (i = 0; i < k; i++) Array[i] = new int[l];
cout << "Original Matrix:" << endl;
for (i = 0; i < k; i++) for (j = 0; j < l; j++)
Array[i][j] = rand() % 101 - 50;
print(Array);
for (i = 0; i < k; i++) for (j = 0; j < l; j++)
if (Array[i][j] < 0) Array[i][j] = 0; else Array[i][j] = 1;
cout << "Transformed Matrix:" << endl;
print(Array);
system("pause > nul");
system("cls");
}
}
На скрине показан случай, когда случайно получилось максимальное количество строк и столбцов:
SI
Sultan Issin
29 440