Поменять местами строки матрицы с максимальным и минимальным элементами - C (СИ)
Формулировка задачи:
Всем доброго времени суток. Вот задание:
"Дана матрица действительных чисел размером 12х8. Поменять местами строки с максимальным и минимальным элементами"
Вот что я сделал. Здесь только вывод на экран матрицы. А дальше пошли проблемы... Если можно, с подробными объяснениями.#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
int main()
{
int A[20][20];
int j, i, N, M, min, max;
do
{ printf ("\nVvedite kol-vo strok v massive A: ");
scanf ("%d", &N);}
while (!(N<=20) && (N>=2));
do
{ printf ("\nVvedite kol-vo stolbcov v massive A: ");
scanf ("%d", &M);}
while (!(M<=20) && (M>=2));
printf ("\n\n Ishodniy massiv: \n\n");
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
{
A[i][j]=-50+rand()%100;
printf ("%d\t", A[i][j]);
}
printf("\n \n");
}
system ("PAUSE");
}Решение задачи: «Поменять местами строки матрицы с максимальным и минимальным элементами»
textual
Листинг программы
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#define N 20
void PrintArr(int a[][N],int n,int m) //функция для печати массива
{
int i,j;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
printf ("%d\t", a[i][j]);
}
printf("\n \n");
}
}
int main(void)
{
int A[N][N];
int j, i, n, m, min, max;
int max_str=0,min_str=0;
do
{
printf ("\nVvedite kol-vo strok v massive A: ");
scanf ("%d", &n);
}
while (n>=N || n<=2);
do
{
printf ("\nVvedite kol-vo stolbcov v massive A: ");
scanf ("%d", &m);
}
while (m>=N || m<=2);
A[0][0]=-50+rand()%100; min=A[0][0], max=A[0][0]; //выбираем какой-нибудь элемент матрицы и максимальным и минимальным значением
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
A[i][j]=-50+rand()%100; // "на ходу" заполняем массив
if (A[i][j]>max){ max=A[i][j],max_str=i; continue; } // ищем максимальный элемент, если нашли - запоминаем строку
if (A[i][j]<min) min=A[i][j],min_str=i; // ищем минимальный элемент, если нашли - запоминаем строку
}
}
printf ("\n\n Ishodniy massiv: \n\n"); PrintArr(A,n,m);
for (j=0;j<m;j++){ // производим обмен строк
A[min_str][j]+=A[max_str][j];
A[max_str][j]=A[min_str][j]-A[max_str][j];
A[min_str][j]-=A[max_str][j];
}
printf ("\n\n Poluchennyi massiv: \n\n"); PrintArr(A,n,m); // печатаем получившийся массив
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем размерность матрицы NxN с помощью #define
- Создаем функцию для печати матрицы
- Вводим количество строк и столбцов матрицы с помощью scanf
- Инициализируем первую ячейку матрицы A[0][0] случайным числом, и находим минимальное и максимальное значение в матрице
- Заполняем матрицу A случайными числами
- Находим строку с максимальным и минимальным значением в матрице
- Обмениваем строки местами
- Печатаем получившуюся матрицу
- Возвращаем 0, чтобы указать, что программа успешно завершилась