C/C++

Программирование на С++

Сформировать и вывести матрицу из n строк и m столбцов. Элементы матрицы должны быть случайными числами в диапазоне от -50 до 50. Переставить местами столбцы матрицы так, чтобы её вторая строка (нумерация строк ведется со стороны пользователя, т.е. с единицы) оказалась упорядоченной по убыванию. Вывести преобразованную таким образом матрицу.
Вот мой код (проблема в том, что он работает правильно только в случае ввода одинаковых чисел (5 и 5 например):
#include <iostream>
#include <ctime>
using namespace std;

int main(){

int n, m ;
cout << "Stolbcov" << endl;
cin >> n;
cout << "strok" << endl;
cin >> m;

int min = -50;
int max = 100;

int a[n][m];
int SUMMA = 0;

srand (time(NULL));

for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = min + rand() % max;
}
}
cout << "Massiv: " << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}

int temp;
for(int j=0; j<m-2; j++)
for(int i=0; i<m-1; i++) {
if(a[1][i]<a[1][i+1]) {
temp=a[1][i];
a[1][i]=a[1][i+1];
a[1][i+1]=temp;
}
}
cout << "Massiv: 2" << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
Baradach Po'latov
Baradach Po'latov
58
 #include  
#include
#include
#include

#define RAND(min, max) (rand() % ((max) - (min)) + (min))

using namespace std;

size_t input(const char* msg) {
size_t value = 0;
while (!value) {
cout > value;
cin.ignore(0x1000, '\n');
}
return value;
}

void column_swap(int** matrix, const size_t n, const size_t i, const size_t k) {
for (size_t r = 0; r < n; ++r) swap(matrix[r][i], matrix[r][k]);
}

void column_sort(int** matrix, const size_t n, const size_t m, const size_t r) {
for (size_t i = 0; i < m - 1; ++i) {
size_t k = i;
for (size_t j = i + 1; j < m; j++) if (matrix[r][j] > matrix[r][k]) k = j;
column_swap(matrix, n, i, k);
}
}

void show(int** matrix, const size_t n, const size_t m) {
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < m; ++j) {
cout
Михаил Сорокин
Михаил Сорокин
61 144
Лучший ответ
Так:
https://onlinegdb.com/vYLP2vRQJ
 #include  
#include
#include

#define N 5
#define M 6

int main()
{
int m[N][M];

srand(time(NULL));
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
m[i][j] = rand() % 100;
printf("%2d ", m[i][j]);
}
printf("\n");
}

for(int i = 0; i < M - 1; i++)
{
for(int j = 0; j < M - i - 1; j++)
{
if (m[1][j] < m[1][j + 1])
{
for(int k = 0; k < N; k++)
{
int temp = m[k][j];
m[k][j] = m[k][j + 1];
m[k][j + 1] = temp;
}
}
}
}

printf("\n");
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
printf("%2d ", m[i][j]);
printf("\n");
}
return 0;
}
 #include  
#include

using namespace std;

int main() {
// Read in the number of rows and columns from the user
int n, m;
cout > n;
cout > m;

// Initialize the matrix with random numbers in the range of -50 to 50
int a[n][m];
srand(time(NULL));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = -50 + rand() % 100;
}
}

// Print the original matrix
cout