Найти min и max элементы квадратной матрицы и поменять местами строки, в которых находятся эти элементы - C (СИ)
Формулировка задачи:
Здраствуйте, стыдно просить такую глупость для вас, но сам я не могу реализовать вот такой код:
программа должна найти мин и макс элементы квадратной матрицы, и поменять местами строки, в которых находятся эти элементы, если номера строк совпадают, ничего не менять. Свой новый код писать не надо, препод уже этот видел, просто поредактируйте чуток
#include <stdio.h>
#include <ctime>
#include <iostream>
int** inputrand(int **arr, int m )
{
setlocale (LC_ALL, "Russian");
printf ("Введите размерность матрицы");
scanf ("%d", &m);
for (int i=0; i<m; i++)//Это вообще не спрашивает почему-то, массив инициализируется неправильно.
{for (int j=0; j<m; j++)
arr[m][m]=rand()%20;
}
printf ("Начальная матрица:");
for (int i=0; i<m; i++)
{for (int j=0; j<m; j++)// надо осуществить вид mXm,тоесть если 3 строки/столбца, то 3 элемента в строке
printf ("%3,0d\t", arr[i][j]);
}
}
void main(int m, int **arr, int min, int max, int minnum, int maxnum)
{
min=arr[0][0];
for ( int i=0; i<m; i++)
{for (int j=0;j<m; j++)
if (min>arr[i][j])
min=arr[i][j];
}
max=arr[0][0];
for (int i=0; i<m; i++)
{for (int j=0;j<m; j++)
////////////////////////// как присвоить переменной номер строки, в которой находится элемент?
for (int i=0; i<m; i++)
{for (int j=0;j<m; j++)
if (min=arr[i][j])
minnum=i;
if (min=arr[i][j])
maximum=i;
}
if <minnum=maxnum>
printf ("Минимальный и максимальный элемент находятся в одной строке!")
else
{// Теперь надо поменять местами строки с мин и макс элементом, вывести получившуюся матрицу;
}
Заранее благодарен за отзывы!
Решение задачи: «Найти min и max элементы квадратной матрицы и поменять местами строки, в которых находятся эти элементы»
textual
Листинг программы
#include <iostream>
#include <ctime>
using std::cout;
using std::cin;
using std::endl;
int minimum, maximum,num_max,num_min;
int** input(int **arr, int rows, int cols)
{
for(int i=0; i<rows; i++)
{
arr[i]=new int[cols];
for(int j=0; j<cols; j++)
{
arr[i][j]=rand()%9;
}
}
return arr;
}
int min_max(int **arr, int rows, int cols)
{
int *min, *max;
min = new int[cols];
max = new int[cols];
for(int i=0; i<rows; i++)
{
minimum = arr[i][0];
maximum = arr[i][0];
for(int j=0; j<cols; j++)
{
if (arr[i][j]<minimum)
{
minimum=arr[i][j];
}
if (arr[i][j]>maximum)
{
maximum=arr[i][j];
}
}
max[i]=maximum;
min[i]=minimum;
}
minimum = min[0];
maximum = max[0];
for(int i=0; i<cols; i++)
{
if (min[i]<minimum)
{
minimum = min[i];
num_min=i;
}
if (max[i]>maximum)
{
maximum = max[i];
num_max=i;
}
}
delete [] min;
delete [] max;
return 0;
}
int main()
{
srand((unsigned)time(NULL));
setlocale(LC_ALL,"Russian");
int **arr;
int rows,cols;
cout<<"Введите количество строк: ";
cin>>rows;
cout<<endl;
cout<<"Введите количество столбцов: ";
cin>>cols;
arr = new int*[rows];
input(arr, rows, cols);
cout<<endl;
cout<<"Начальная матрица: "<<endl;
for(int i=0; i<rows; i++)
{
for(int j=0; j<cols; j++)
{
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
min_max(arr, rows, cols);
cout<<"min "<<minimum<<" is "<<num_min<<endl;
cout<<"max "<<maximum<<" is "<<num_max<<endl;
cout<<"Конечная матрица: "<<endl;
for(int i=0; i<rows; i++)
{
if(i==num_min)
{
for(int j=0; j<cols; j++)
{
cout<<arr[num_max][j]<<" ";
}
}
if(i==num_max)
{
for(int j=0; j<cols; j++)
{
cout<<arr[num_min][j]<<" ";
}
}
if(i!=num_max&&i!=num_min)
{
for(int j=0; j<cols; j++)
{
cout<<arr[i][j]<<" ";
}
}
cout<<endl;
}
for(int i=0; i<rows; i++)
delete arr[i];
delete [] arr;
return 0;
}
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Создается матрица случайных целых чисел с помощью функции
input(). - С помощью функции
min_max()находятся минимальный и максимальный элементы матрицы и их позиции. - Строки, в которых находятся минимальный и максимальный элементы, меняются местами с помощью условных операторов if.
- Выводится начальная матрица.
- Выводятся минимальный и максимальный элементы и их позиции.
- Выводится конечная матрица, в которой строки, в которых находятся минимальный и максимальный элементы, поменяны местами.