কম্পিউটার

C++ এ বর্গাকার ম্যাট্রিক্স কর্ণ থেকে ক্ষুদ্রতম এবং বৃহত্তম উপাদান খুঁজুন


এই সমস্যায়, আমাদের nXn আকারের একটি বর্গ ম্যাট্রিক্স দেওয়া হয়েছে। আমাদের কাজ হল বর্গাকার ম্যাট্রিক্স কর্ণ থেকে ক্ষুদ্রতম এবং বৃহত্তম উপাদান খুঁজে বের করা। আমাদের ম্যাট্রোক্সের প্রাথমিক এবং মাধ্যমিক কর্ণগুলির ক্ষুদ্রতম এবং বৃহত্তম উপাদানগুলি খুঁজে বের করতে হবে৷

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

mat[][] = {
   {3, 4, 7},
   {5, 2, 1},
   {1, 8, 6}
}

আউটপুট

Smallest element in Primary Diagonal = 2
Largest element in Primary Diagonal = 6
Smallest element in Secondary Diagonal = 1
Largest element in Secondary Diagonal = 7

সমাধান পদ্ধতি

সমস্যা সমাধানের একটি সহজ সমাধান হল নেস্টেড লুপ ব্যবহার করা। প্রাথমিক তির্যক উপাদানগুলি পরীক্ষা করার জন্য আমরা i =j বিবেচনা করব . এবং গৌণ কর্ণের জন্য, আমরা বিবেচনা করব i + j =n -1 . আমরা প্রাথমিক এবং মাধ্যমিক কর্ণ উভয়ের জন্য ম্যাট্রিক্সের সর্বাধিক এবং সর্বনিম্ন উপাদানগুলি খুঁজে পাব৷

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include<iostream>
using namespace std;
void findMaxAndMinOfDiagonals(int mat[3][3], int n){
   if (n == 0)
      return;
   int pDiagMin = mat[0][0],
   pDiagMax = mat[0][0];
   int sDiagMin = mat[0][n - 1 ],
   sDiagMax = mat[0][n - 1];
   for (int i = 1; i < n; i++) {
      for (int j = 1; j < n; j++) {
         if (i == j){
            if (mat[i][j] < pDiagMin)
               pDiagMin = mat[i][j];
            if (mat[i][j] > pDiagMax)
            pDiagMax = mat[i][j];
         }
         if ((i + j) == (n - 1)) {
            if (mat[i][j] < sDiagMin){
               sDiagMin = mat[i][j];
            }
            if (mat[i][j] > sDiagMax)
               sDiagMax = mat[i][j];
         }
      }
   }
   cout<<("\nSmallest Element of Principal Diagonal : ")<<pDiagMin;
   cout<<("\nGreatest Element of Principal Diagonal : ")<<pDiagMax;
   cout<<("\nSmallest Element of Secondary Diagonal : ")<<sDiagMin;
   cout<<("\nGreatest Element of Secondary Diagonal : ")<<sDiagMax;
}
int main(){
   int mat[3][3] = {
      { 3, 4, 7 },
      { 0, 2, 1 },
      { 1, 7, 8 }
   };
   int n = sizeof(mat) / sizeof(mat[0]);
   findMaxAndMinOfDiagonals(mat, n);
}

আউটপুট

Smallest Element of Principal Diagonal : 2
Greatest Element of Principal Diagonal : 8
Smallest Element of Secondary Diagonal : 2
Greatest Element of Secondary Diagonal : 7

আরেকটি কার্যকরী সমাধান হল নেস্টেড লুপকে একক লুপাসে কমিয়ে আনা যে প্রাথমিক তির্যকের জন্য মাদুরের উভয় সূচকই একই, অর্থাৎ

primary diagonal elements = mat[i][j].
Similarly, for secondary diagonal elements = mat[i][n - i - 1]

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include<iostream>
using namespace std;
void findMaxAndMinOfDiagonals(int mat[3][3], int n){
   if (n == 0)
      return;
   int pDiagMin = mat[0][0],
   pDiagMax = mat[0][0];
   int sDiagMin = mat[0][n - 1 ],
   sDiagMax = mat[0][n - 1];
   for (int i = 1; i < n; i++) {
      if (mat[i][i] < pDiagMin)
         pDiagMin = mat[i][i];
      if (mat[i][i] > pDiagMax)
         pDiagMax = mat[i][i];
      if (mat[i][n - 1 - i] < sDiagMin)
         sDiagMin = mat[i][n - 1 - i];
      if (mat[i][n - 1 - i] > sDiagMax)
         sDiagMax = mat[i][n - 1 - i];
   }
   cout<<("\nSmallest Element of Principal Diagonal : ")<<pDiagMin;
   cout<<("\nGreatest Element of Principal Diagonal : ")<<pDiagMax;
   cout<<("\nSmallest Element of Secondary Diagonal : ")<<sDiagMin;
   cout<<("\nGreatest Element of Secondary Diagonal : ")<<sDiagMax;
}
int main(){
   int mat[3][3] = {
      { 3, 4, 7 },
      { 0, 2, 1 },
      { 1, 7, 8 }
   };
   int n = sizeof(mat) / sizeof(mat[0]);
   findMaxAndMinOfDiagonals(mat, n);
}

আউটপুট

Smallest Element of Principal Diagonal : 2
Greatest Element of Principal Diagonal : 8
Smallest Element of Secondary Diagonal : 1
Greatest Element of Secondary Diagonal : 7

  1. C++ এ তির্যক দৈর্ঘ্য থেকে একটি বর্গক্ষেত্রের ক্ষেত্রফল

  2. C++ এ তির্যক ম্যাট্রিক্স এবং স্কেলার ম্যাট্রিক্স পরীক্ষা করার জন্য প্রোগ্রাম

  3. একটি সিকোয়েন্সে kth বৃহত্তম উপাদান খুঁজে পেতে C++ প্রোগ্রাম

  4. একটি অ্যারের সবচেয়ে বড় উপাদান খুঁজে পেতে C++ প্রোগ্রাম