মডিউল ১৮-৬ঃ ডায়াগোনাল ম্যাট্রিক্স ইউজিং 2D এরে

এবার আমরা 2D এরের সাহায্যে একটি ম্যাট্রিক্স ইনপুট নিয়ে তা প্রাইমারি ডায়াগোনাল বা সেকেন্ডারি ডায়াগোনাল ম্যাট্রিক্স কিনা তা বের করব।

প্রাইমারি ডায়াগোনাল ম্যাট্রিক্সঃ

আমরা যদি একটি 2D এরেতে প্রাইমারি ডায়াগোনাল এর ইন্ডেক্সগুলো খেয়াল করি

0 0

0 1

0 2

1 0

1 1

1 2

2 0

2 1

2 2

তাহলে দেখতে পাব ইন্ডেক্সে রো এবং কলাম সেইম হচ্ছে। অর্থাৎ আমরা যদি দেখি ইনডেক্সে রো এবং কলাম সেইম তাহলে বুঝতে পারব আমরা এখন প্রাইমারি ডায়াগোনাল এর উপরে আছি। তাহলে এভাবে আমরা চেক করে ফেলতে পারি একটি ম্যাট্রিক্স প্রাইমারি ডায়াগোনাল কিনা। শুরুতেই আমরা চেক করব ম্যাট্রিক্সটি স্কয়ার কিনা, স্কয়ার না হলে ডায়াগোনাল ম্যাট্রিক্স হবে না। তারপর আমরা পুরো ম্যাট্রিক্স এ যেয়ে যখনি আমরা প্রাইমারি ডায়াগোনাল এর উপরে থাকব না তখনি চেক করে দেখব ওখানে ভেলু জিরো আছে কিনা। যদি জিরো না থাকে তাহলে সেটি প্রাইমারি ডায়াগোনাল ম্যাট্রিক্স হবে না।

#include<stdio.h>
int main()
{
    int row,col;
    scanf("%d %d",&row,&col);
    int a[row][col];
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            scanf("%d",&a[i][j]);     // ম্যাট্রিক্স ইনপুট নিচ্ছি। 
        }
    }
    int flag=1;                // একটি ফ্ল্যাগ ভেরিয়েবল নিয়ে শুরুতে ১ রেখে দিচ্ছি। যখনি দেখব প্রাইমারি ডায়াগোনাল ম্যাট্রিক্স না তখনি তাতে ০ রেখে দিব।
    if(row != col)           // শুরুতে চেক করছি এটি একটি স্কয়ার ম্যাট্রিক্স কিনা। 
    {
        flag=0;         // স্কয়ার ম্যাট্রিক্স না হলে ডায়াগোনাল ম্যাট্রিক্স হবে না তাই ফ্ল্যাগ এর মধ্যে ০ রেখে দিচ্ছি। 
     }
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)    // নেস্টেড লুপ চালিয়ে পুরো ম্যাট্রিক্স এর মধ্যে যাওয়া হচ্ছে। 
        {
            if(i==j)        // যদি রো ইন্ডেক্স এবং কলাম ইন্ডেক্স সেইম হয় তারমানে এখন আমরা প্রাইমারি ডায়াগোনাল এর উপরে আছি।
            {
                continue;    // প্রাইমারি ডায়াগোনালে আমাদের চেক করার কিছু নেই তাই কন্টিনিউ করছি।
            }
            if(a[i][j]!=0)   // যদি প্রাইমারি ডায়াগোনালে না থাকি এবং ম্যাট্রিক্স এর ভেলু ০ না হয় 
            {
                flag=0;    // তাহলে এটি প্রাইমারি ডায়াগোনাল ম্যাট্রিক্স না, তাই ফ্ল্যাগ এর মধ্যে ০ রেখে দিচ্ছি। 
            }
        }
    }
    if(flag==1)       // সবশেষে চেক করছি ফ্ল্যাগ এর মধ্যে ১ আছে কিনা। 
    {
        printf("Primary Diagonal\n");   // ১ থাকলে এটি একটি প্রাইমারি ডায়াগোনাল ম্যাট্রিক্স। 
    } 
    else 
    {
        printf("Not Primary Diagonal\n");  // আর ১ না থাকলে এটি একটি প্রাইমারি ডায়াগোনাল ম্যাট্রিক্স না। 
    }
    return 0;
}

সেকেন্ডারি ডায়াগোনাল ম্যাট্রিক্সঃ

আমরা যদি একটি 2D এরেতে সেকেন্ডারি ডায়াগোনাল এর ইন্ডেক্সগুলো খেয়াল করি

0 + 0 = 0

0 + 1 = 1

0 + 2 = 2

1 + 0 = 1

1 + 1 = 2

1 + 2 = 3

2 + 0 = 2

2 + 1 = 3

2 + 2 = 4

তাহলে দেখতে পাব ইন্ডেক্সে রো এবং কলাম এর যোগফল সেইম হচ্ছে আর তা হচ্ছে রো থেকে ১ কম। সেকেন্ডারি ডায়াগোনাল ছাড়া অন্য কোথাও রো এবং কলাম এর যোগফল রো-১ এর সমান হচ্ছে না। অর্থাৎ আমরা যদি দেখি ইনডেক্সে রো এবং কলামের যোগফল রো-১ এর সমান তাহলে বুঝতে পারব আমরা এখন সেকেন্ডারি ডায়াগোনাল এর উপরে আছি। তাহলে এভাবে আমরা চেক করে ফেলতে পারি একটি ম্যাট্রিক্স সেকেন্ডারি ডায়াগোনাল কিনা। শুরুতেই আমরা চেক করব ম্যাট্রিক্সটি স্কয়ার কিনা, স্কয়ার না হলে ডায়াগোনাল ম্যাট্রিক্স হবে না। তারপর আমরা পুরো ম্যাট্রিক্স এ যেয়ে যখনি আমরা সেকেন্ডারি ডায়াগোনাল এর উপরে থাকব না তখনি চেক করে দেখব ওখানে ভেলু জিরো আছে কিনা। যদি জিরো না থাকে তাহলে সেটি সেকেন্ডারি ডায়াগোনাল ম্যাট্রিক্স হবে না।

#include<stdio.h>
int main()
{
    int row,col;
    scanf("%d %d",&row,&col);
    int a[row][col];
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            scanf("%d",&a[i][j]);     // ম্যাট্রিক্স ইনপুট নিচ্ছি। 
        }
    }
    int flag=1;                // একটি ফ্ল্যাগ ভেরিয়েবল নিয়ে শুরুতে ১ রেখে দিচ্ছি। যখনি দেখব সেকেন্ডারি ডায়াগোনাল ম্যাট্রিক্স না তখনি তাতে ০ রেখে দিব।
    if(row != col)           // শুরুতে চেক করছি এটি একটি স্কয়ার ম্যাট্রিক্স কিনা। 
    {
        flag=0;         // স্কয়ার ম্যাট্রিক্স না হলে ডায়াগোনাল ম্যাট্রিক্স হবে না তাই ফ্ল্যাগ এর মধ্যে ০ রেখে দিচ্ছি। 
     }
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)    // নেস্টেড লুপ চালিয়ে পুরো ম্যাট্রিক্স এর মধ্যে যাওয়া হচ্ছে। 
        {
            if(i+j==row-1)        // যদি রো ইন্ডেক্স এবং কলাম ইন্ডেক্স এর যোগফল রো-১ এর সমান হয় তারমানে এখন আমরা সেকেন্ডারি ডায়াগোনাল এর উপরে আছি।
            {
                continue;    // সেকেন্ডারি ডায়াগোনালে আমাদের চেক করার কিছু নেই তাই কন্টিনিউ করছি।
            }
            if(a[i][j]!=0)   // যদি সেকেন্ডারি ডায়াগোনালে না থাকি এবং ম্যাট্রিক্স এর ভেলু ০ না হয় 
            {
                flag=0;    // তাহলে এটি সেকেন্ডারি ডায়াগোনাল ম্যাট্রিক্স না, তাই ফ্ল্যাগ এর মধ্যে ০ রেখে দিচ্ছি। 
            }
        }
    }
    if(flag==1)       // সবশেষে চেক করছি ফ্ল্যাগ এর মধ্যে ১ আছে কিনা। 
    {
        printf("Secondary Diagonal\n");   // ১ থাকলে এটি একটি সেকেন্ডারি ডায়াগোনাল ম্যাট্রিক্স। 
    } 
    else 
    {
        printf("Not Secondary Diagonal\n");  // আর ১ না থাকলে এটি একটি সেকেন্ডারি ডায়াগোনাল ম্যাট্রিক্স না। 
    } 
    return 0;
}

Last updated