Найти 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;
}

Объяснение кода листинга программы

В этом коде выполняются следующие действия:

  1. Создается матрица случайных целых чисел с помощью функции input().
  2. С помощью функции min_max() находятся минимальный и максимальный элементы матрицы и их позиции.
  3. Строки, в которых находятся минимальный и максимальный элементы, меняются местами с помощью условных операторов if.
  4. Выводится начальная матрица.
  5. Выводятся минимальный и максимальный элементы и их позиции.
  6. Выводится конечная матрица, в которой строки, в которых находятся минимальный и максимальный элементы, поменяны местами.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы