কম্পিউটার টিউটোরিয়াল

সি++-এ বর্গ ম্যাট্রিক্সের (Square Matrix) ডায়াগোনালগুলো থেকে সর্বনিম্ন ও সর্বোচ্চ উপাদান বের করা

এই সমস্যাতে, আমাদের nXn আকারের একটি বর্গ ম্যাট্রিক্স দেওয়া আছে। আমাদের কাজ হলো বর্গ ম্যাট্রিক্সের প্রাইমারি (primary) এবং সেকেন্ডারি (secondary) ডায়াগোনাল থেকে সর্বনিম্ন ও সর্বোচ্চ উপাদান বের করা।

উদাহরণ দিয়ে সমস্যা বোঝা যাক,

ইনপুট

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

আউটপুট

Primary Diagonal: Smallest = 2, Largest = 6
Secondary Diagonal: Smallest = 1, Largest = 7

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

এই সমস্যা সমাধানের একটি সহজ পদ্ধতি হলো নেস্টেড লুপ (nested loops) ব্যবহার করা। প্রাইমারি ডায়াগোনালের উপাদানগুলো চেক করার জন্য আমরা 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

একটি আরও কার্যকর সমাধান হলো নেস্টেড লুপকে সিঙ্গেল লুপে রূপান্তর করা, কারণ প্রাইমারি ডায়াগোনালের দুটি ইন্ডেক্স একই (mat[i][i]) এবং সেকেন্ডারি ডায়াগোনালের 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. অ্যারেতে সবচেয়ে বড় এলিমেন্ট (Largest Element) বের করার C++ প্রোগ্রাম