C/C++

Матрица в C++

Найти в каждом столбце матрицы 4x4 наибольший элемент и поменять его местами с элементом на главной диагонали.
SZ
Soso Zedginidze
156
Для последнего наибольшего элемента каждого столбца:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
void print(int **array)
{
int i, j = 0;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++) cout << setw(4) << array[i][j];
cout << endl;
}
cout << endl;
}
int main()
{
int i, j, k, l, max;
int **a = new int *[4];
for (i = 0; i < 4; i++) a[i] = new int [4];
srand(time(nullptr));
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++) a[i][j] = rand() % 1000;
print(a);
for (j = 0; j < 4; j++)
{
k = 0;
max = a[0][j];
for (i = 1; i < 4; i++)
if (a[i][j] >= max)
{
max = a[i][j];
k = i;
}
l = a[j][j];
a[j][j] = max;
a[k][j] = l;
}
print(a);
}
Karen Ordinyan
Karen Ordinyan
66 572
Лучший ответ
Иван Иванов Солнце моё у вас такой же косяк, как у Высочина. Пример неправильной работы с динамикой я привёл в своём вопросе. Проверяйте )))
Karen Ordinyan Опять свой бред шарашит. Да если уж на то пошло, то тут вообще можно обойтись без динамического массива!
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
void print(int array [][4])
{ int i, j; for (i = 0; i < 4; i++)
{ for (j = 0; j < 4; j++)
cout << setw(4) << array[i][j];
cout << endl; } cout << endl; }
int main() { int a[4][4], i, j, k, l, max;
srand(time(nullptr)); for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++) a[i][j] = rand() % 1000;
print(a); for (j = 0; j < 4; j++) { k = 0;
max = a[0][j]; for (i = 1; i < 4; i++)
if (a[i][j] >= max) { max = a[i][j]; k = i; }
l = a[j][j]; a[j][j] = max; a[k][j] = l; } print(a); }
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
const int size = 4;
int A[size][size];
srand(time(nullptr));
rand();
for(int x = 0; x < size; x++)
{
for(int y = 0; y < size; y++)
{
A[x][y] = rand() % 9 + 1;
cout << A[x][y] << ' ';
}
cout << endl;
}
cout << endl;

int i_max, tmp;
for(int y = 0; y < size; y++)
{
i_max = 0;
for(int x = 0; x < size; x++)
{
if(A[x][y] > A[i_max][y]) i_max = x;
}
tmp = A[y][y];
A[y][y] = A[i_max][y];
A[i_max][y] = tmp;
}

for(int x = 0; x < size; x++)
{
for(int y = 0; y < size; y++)
cout << A[x][y] << ' ';
cout << endl;
}

return 0;
}
D.i. Kalkenov
D.i. Kalkenov
73 145
Erbol Begembetov А это для первого наибольшего элемента каждого столбца. Зато хоть на плюсах, а не как тут ещё у одного!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define n 4
#define top 10
int main()
{
srand(time(NULL));
int max=-1,**matrix(int**)malloc(n*sizeof(int*));
if(!matrix) exit(1);
for(int i = 0; i < n; i++)
{
matrix[i]=(int*)malloc(n*sizeof(int));
if(!matrix[i]) exit(1);
}
printf("Start matrix:\n");
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf(" %d",(matrix[i][j]=rand()%top));
}
printf("\n");
}

printf("\n\nResult matrix:\n");
for(int i = 0; i < n; i++)
{
max=-1;
int ti, tj;
for(int j = 0; j < n; j++)
{
if(max<matrix[j][i])
{
max=matrix[j][i];
ti=i;
tj=j;
}
}
matrix[tj][ti]=matrix[ti][ti];
matrix[ti][ti]=max;
}
printf("\n");
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf(" %d",matrix[i][j]);
}
printf("\n");
}

for(int i = 0; i < n; i++)
free(matrix[i]);
free(matrix);
system("pause");
return 0;
}
Денис Куринов
Денис Куринов
37 945
Иван Иванов NULL без обиды. Нужна проверка и правильное удаление ранее выделенной памяти. Многие "умники" резервируют память для своих говнопрограмм в гаджетах, а потом люди по салонам бегают чистить. С одной стороны им прибыльно, а пользователям не очень. И знаешь ЧТО советуют пользователям? почистить КЭШ !!!Ну не идиоты!?