

#include <iostream>
#include <math.h>
const int m_SizeMatrix = 5;
const int m_Z = 5;

int GetIndex(int row, int col, int rows = m_SizeMatrix)
{
  return col*rows + row;
}

int main()
{
  int matrix[m_SizeMatrix*m_SizeMatrix];
  for (int index=0; index<m_SizeMatrix*m_SizeMatrix; ++index)
    matrix[index] =round(fabs(sin(index)*10000)) + 10000;
  std::cout << "Matrix:\n";
  for (int row=0; row<m_SizeMatrix; ++row)
  {
    for (int col=0; col<m_SizeMatrix; ++col)
      std::cout << matrix[GetIndex(row, col)] << " ";
    std::cout << "\n";
  }

  int min = matrix[m_SizeMatrix]; // Берем первый элемент выше диоганали
  int max = matrix[1]; // Берем первый элемент ниже диоганали
  //Найти минимальный элемент, лежащий выше главной диагонали, и максимальный элемент, лежащий ниже главной диагонали.
  for (int col=0; col<m_SizeMatrix; ++col)
    for (int row=0; row<m_SizeMatrix; ++row)
    {
      if (row < col && min > matrix[GetIndex(row, col)])
        min = matrix[GetIndex(row, col)];
      if (row > col && max > matrix[GetIndex(row, col)])
        max = matrix[GetIndex(row, col)];
    }
  std::cout << "1. min:"<<min<<"\n";
  std::cout << "1. max:"<<max<<"\n\n";

  //Меняя местами столбцы матрицы, отсортировать по возрастанию ее первую строку.
  for (int col=0; col<m_SizeMatrix; ++col)
  {
    int mincol = col;
    for (int col2=col+1; col2<m_SizeMatrix; ++col2)
      if (matrix[GetIndex(0, col2)]<matrix[GetIndex(0, mincol)])
        mincol = col2;
    if (mincol != col)
      for (int row=0; row<m_SizeMatrix; ++row)
      {
        int mem = matrix[GetIndex(row, col)];
        matrix[GetIndex(row, col)] = matrix[GetIndex(row, mincol)];
        matrix[GetIndex(row, mincol)] = mem;
      }
  }
  std::cout << "2. Matrix:\n";
  for (int row=0; row<m_SizeMatrix; ++row)
  {
    for (int col=0; col<m_SizeMatrix; ++col)
      std::cout << matrix[GetIndex(row, col)] << " ";
    std::cout << "\n";
  }

  //Добавить Z столбцов в конец матрицы.
  int newMatrix[m_SizeMatrix*m_SizeMatrix + m_Z*m_SizeMatrix];
  for (int index=0; index<(m_SizeMatrix + m_Z)*m_SizeMatrix; ++index)
  {
    if (index<m_SizeMatrix*m_SizeMatrix)
      newMatrix[index] = matrix[index];
    else
      newMatrix[index] =round(fabs(sin(index)*10000)) + 10000;
  }

  std::cout << "3. Matrix:\n";
  for (int row=0; row<m_SizeMatrix; ++row)
  {
    for (int col=0; col<m_SizeMatrix+m_Z; ++col)
      std::cout << newMatrix[GetIndex(row, col)] << " ";
    std::cout << "\n";
  }

}
