Квадратная матрица, главная и побочные диагонали

Уровень сложности:

Дана квадратная матрица размером nxn. Найти минимальный элемент среди элементов, расположенных ниже главной диагонали, найти максимальный элемент, среди элементов расположенных выше побочной диагонали. Найденные минимальный и максимальный элементы поменять местами и вывести их индексы.

// main_secondary_diagonal.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

int main(int argc, char* argv[])
{
    srand(time(NULL));
    int size_array; // размер квадратной матрицы
    setlocale(LC_ALL, "rus");

    cout << "Введите размер квадратной матрицы: ";
    cin >> size_array;

    // динамическое создание двумерного массива
    int **arrayPtr = new int* [size_array];
    for (int count = 0; count < size_array; count++)
        arrayPtr[count] = new int [size_array];

    for (int counter_rows = 0; counter_rows < size_array; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < size_array; counter_columns++)
        {
            arrayPtr[counter_rows][counter_columns] = rand() % 100; // заполнение массива случайными числами
            cout << setw(2) << arrayPtr[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
        }
        cout << endl;
    }
    cout << endl;

    int min = arrayPtr[1][0], // минимальный елемент массива, ниже главной диагонали
        row_min = 1,          // номер строки минимального элемента
        column_min = 0;       // номер столбца минимального элемента

    // поиск минимального элемента в массиве, ниже главной диагонали
    for (int counter_rows = 1; counter_rows < size_array; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < counter_rows ; counter_columns++)
        {
            if ( arrayPtr[counter_rows][counter_columns] < min )
            {
                min = arrayPtr[counter_rows][counter_columns];
                row_min = counter_rows;
                column_min = counter_columns;
            }
        }
    }

    cout << "min" << "[" << (row_min + 1) << "][" << (column_min + 1) << "]"  << " = " << min << endl; 

    int max = arrayPtr[0][0], // максимальный элемнет массива, выше побочной диагонали
        row_max = 0,              // номер строки максимального элемента
        column_max = 0;           // номер столбца максимального элемента

    for (int counter_rows = 0; counter_rows < size_array - 1; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < (size_array - counter_rows - 1); counter_columns++)
        {
            if ( arrayPtr[counter_rows][counter_columns] > max )
            {
                max = arrayPtr[counter_rows][counter_columns];
                row_max = counter_rows;
                column_max = counter_columns;
            }
        }
    }

    cout << "max" << "[" << (row_max + 1) << "][" << (column_max + 1) << "]"  << " = " << max << endl; 

    //////////////////перестановка элементов////////////////////////////////////////////////

    arrayPtr[row_min][column_min] = max;
    arrayPtr[row_max][column_max] = min;

    ////////////////////////////////////////////////////////////////////////////////////////

    cout << "nМассив после перестановки максимального и минимального элементов:n";

    for (int counter_rows = 0; counter_rows < size_array; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < size_array; counter_columns++)
        {
          cout << setw(2) << arrayPtr[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
        }
        cout << endl;
    }
    cout << endl;

    cout << "min" << "[" << (row_max + 1) << "][" << (column_max + 1) << "]"  << " = " << min << endl; 
    cout << "max" << "[" << (row_min + 1) << "][" << (column_min + 1) << "]"  << " = " << max << endl; 

    // удаление двумерного динамического массива
    for (int count = 0; count < size_array; count++)
        delete []arrayPtr[count];

    system("pause");
    return 0;
}


Результат работы программы показан ниже:

CppStudio.com
Введите размер квадратной матрицы: 5
85   0  69  71  20  
31   1   7  12  10  
93  19   8  18  18  
 1  35  41  98  41  
45  36  73  22  66  

min[4][1] = 1
max[3][1] = 93

Массив после перестановки максимального и минимального элементов:
85   0  69  71  20  
31   1   7  12  10  
 1  19   8  18  18  
93  35  41  98  41  
45  36  73  22  66  

min[3][1] = 1
max[4][1] = 93
Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 12.09.2012
Поделиться:

Комментарии

  1. Mekan Nepesow

    #include<iostream>
    #include<iomanip>
    #include<stdlib.h>
    using namespace std;

    int main()
    {
    int A[100][100];
    int n;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
    for(int j=1; j<=n; j++)
    {
    // cin>>A[i][j];
    A[i][j]=rand()%50;
    }
    }

    for(int i=1; i<=n; i++)
    {
    for(int j=1; j<=n; j++)
    {
    cout<<setw(5)<<A[i][j];
    }
    cout<<endl;
    }

    int min=A[1][1];
    int m=2,k=0,l=0;
    for(int i=2; i<=n; i++)
    {
    for(int j=1;j<=m; j++)
    {
    if(A[i][j]<min)
    {
    min=A[i][j];
    k=i;
    l=j;
    }
    }
    m++;
    }

    m=0;int r,t,max=-1;
    for(int i=n; i>=1; i—)
    {
    for(int j=n; j>=n-m; j—)
    {
    if(A[i][j]>max)
    {
    max=A[i][j];
    r=i;
    t=j;
    }
    }
    }

    int h=0;
    h=A[k][l];
    A[k][l]=A[r][t];
    A[r][t]=h;
    cout<<endl;

    for(int i=1; i<=n; i++)
    {
    for(int j=1; j<=n; j++)
    {
    cout<<setw(5)<<A[i][j];
    }
    cout<<endl;
    }

    cout<<A[k][l]<<endl;
    cout<<«i—>»<<k<<endl;
    cout<<«j—>»<<l<<endl;

    cout<<A[r][t]<<endl;
    cout<<«i—>»<<r<<endl;
    cout<<«j—>»<<t<<endl;
    return 0;
    }

  2. Костя Сатив

    include "stdafx.h"
    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    #include <iomanip>
    using namespace std;
    
    
    
    int main()
    {
    	setlocale(0,"");
    	srand(time(NULL));
        int size_array;
    	 cout << "Введите размер квадратной матрицы: ";
        cin >> size_array;
     
        // динамическое создание двумерного массива
        int **arrayPtr = new int* [size_array];
        for (int count = 0; count < size_array; count++)
            arrayPtr[count] = new int [size_array];
     
        for (int counter_rows = 0; counter_rows < size_array; counter_rows++)
        {
            for (int counter_columns = 0; counter_columns < size_array; counter_columns++)
            {
                arrayPtr[counter_rows][counter_columns] = 9+rand() % 89; // заполнение массива случайными числами
    			cout << setw(4) <<"["<<counter_rows+1<<"]["<<counter_columns+1<<"] "<< arrayPtr[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
            }
            cout << endl;
        }
        cout << endl;
    	int min=arrayPtr[1][0];
    	int index1=0,index2=0;
    	for (int i = 0; i< size_array; i++)
        {
            for (int j = 0; j < size_array; j++)
            {
    			if(i==j)
    				break;
    			if(min>arrayPtr[i][j])
    			{
    				min=arrayPtr[i][j];
    				index1=i;
    				index2=j;
    			}
    		}
    	}
    	cout<<"min ["<<index1+1<<"]["<<index2+1<<"] = "<<min<<endl;
    	int max=0;
    	int index3=0,index4=0;
    	for (int i = 0; i< size_array; i++)
        {
            for (int j = 1; j < size_array; j++)
            {
    			if(i==j)
    				continue;
    			if(max<arrayPtr[i][j])
    			{
    				max=arrayPtr[i][j];
    				index3=i;
    				index4=j;
    			}
    		}
    	}
    	cout<<"max ["<<index3+2<<"]["<<index4+1<<"] = "<<max<<endl;
    	cout<<arrayPtr[index1][index2]<<" "<<arrayPtr[index3][index4]<<endl;
    	arrayPtr[index1][index2]=max;
    	arrayPtr[index3][index4]=min;
    	 for (int counter_rows = 0; counter_rows < size_array; counter_rows++)
        {
            for (int counter_columns = 0; counter_columns < size_array; counter_columns++)
            {
    			cout << setw(4) <<"["<<counter_rows+1<<"]["<<counter_columns+1<<"] "<< arrayPtr[counter_rows][counter_columns] << "  "; // вывод на экран двумерного массива
            }
            cout << endl;
        }
    }
  3. gornyyvladimir

    gornyyvladimir

    #include <vcl.h>
    #include <iostream.h>
    #include <vector>
    #include <iterator>
    #pragma hdrstop
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
        srand( time( 0 ) );
        size_t row,col;
        cout<<"Enter ROWS: ";
        cin>>row;
        cout<<"Enter COLUMNS: ";
        cin>>col;
        std::vector<std::vector<int> > matrix;
        for(size_t i = 0; i < row; ++i)
        {
            std::vector<int> temp;
            for(size_t j = 0; j < col; ++j)
                temp.push_back(rand() % 100);
            matrix.push_back(temp);
        }
        for(size_t i=0; i<row; i++)
        {
            for(size_t j=0; j<row; j++)
            {
                cout<<matrix.at(i).at(j)<<" ";
            }
            cout<<'\n';
        }
        int min = matrix.at(1).at(0);
        size_t minrow = 1,mincol=0;
        for(size_t i=0,j=0; (i<row) && (j<col); i++, j++)
        {
            for(size_t r=i+1; r<row; r++)
            {
                if(min>matrix.at(r).at(j))
                {
                    min=matrix.at(r).at(j);
                    minrow = r;
                    mincol = j;
                }
            }
        }
        //cout<<min<<'\n';
        int max = matrix.at(row-2).at(0);
        size_t maxrow = row-2,maxcol=0;
        for(size_t i=row-1,j=0; (i>=0) && (j<col); i--,j++)
        {
            for(size_t r=0; r<i; r++)
            {
                if(max<matrix.at(r).at(j))
                {
                    max=matrix.at(r).at(j);
                    maxrow = r;
                    maxcol = j;
                }
            }
        }
        matrix.at(minrow).at(mincol) = max;
        matrix.at(maxrow).at(maxcol) = min;
        cout<<"min"<<"["<<minrow<<"]["<<mincol<<"] = "<<min<<"\n";
        cout<<"max"<<"["<<maxrow<<"]["<<maxcol<<"] = "<<max<<"\n\n";
        cout<<"Matrix after transposition: \n";
        for(size_t i=0; i<row; i++)
        {
            for(size_t j=0; j<row; j++)
            {
                cout<<matrix.at(i).at(j)<<" ";
            }
            cout<<'\n';
        }
        system("pause");
        return 0;
    }
    • gornyyvladimir

      gornyyvladimir

      #include <vcl.h>
      #include <iostream.h>
      #include <vector>
      #include <iterator>
      #pragma hdrstop
      
      #pragma argsused
      int main(int argc, char* argv[])
      {
          srand( time( 0 ) );
          size_t row,col;
          cout<<"Enter ROWS: ";
          cin>>row;
          cout<<"Enter COLUMNS: ";
          cin>>col;
          std::vector<std::vector<int> > matrix;
          for(size_t i = 0; i < row; ++i)
          {
              std::vector<int> temp;
              for(size_t j = 0; j < col; ++j)
                  temp.push_back(rand() % 100);
              matrix.push_back(temp);
          }
          for(size_t i=0; i<row; i++)
          {
              for(size_t j=0; j<row; j++)
                  cout<<matrix.at(i).at(j)<<" ";
              cout<<'\n';
          }
          int min = matrix.at(1).at(0);
          size_t minrow = 1,mincol=0;
          for(size_t i=0,j=0; (i<row) && (j<col); i++, j++)
          {
              for(size_t r=i+1; r<row; r++)
                  if(min>matrix.at(r).at(j))
                  {
                      min=matrix.at(r).at(j);
                      minrow = r;
                      mincol = j;
                  }
          }
          int max = matrix.at(row-2).at(0);
          size_t maxrow = row-2,maxcol=0;
          for(size_t i=row-1,j=0; (i>=0) && (j<col); i--,j++)
          {
              for(size_t r=0; r<i; r++)
                  if(max<matrix.at(r).at(j))
                  {
                      max=matrix.at(r).at(j);
                      maxrow = r;
                      maxcol = j;
                  }
          }
          matrix.at(minrow).at(mincol) = max;
          matrix.at(maxrow).at(maxcol) = min;
          cout<<"min"<<"["<<minrow<<"]["<<mincol<<"] = "<<min<<"\n";
          cout<<"max"<<"["<<maxrow<<"]["<<maxcol<<"] = "<<max<<"\n\n";
          cout<<"Matrix after transposition: \n";
          for(size_t i=0; i<row; i++)
          {
              for(size_t j=0; j<row; j++)
                  cout<<matrix.at(i).at(j)<<" ";
              cout<<'\n';
          }
          system("pause");
          return 0;
      }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.