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

সি প্রোগ্রামিং-এ জিগ-জ্যাগ (Zig-Zag) ফ্যাশনে ম্যাট্রিক্স প্রিন্ট করা


একটি ম্যাট্রিক্স mat[row][col] দেওয়া থাকলে, সেটিকে জিগ-জ্যাগ ফ্যাশনে প্রিন্ট করতে হবে। নিচের চিত্রের মতো:

সি প্রোগ্রামিং-এ জিগ-জ্যাগ (Zig-Zag) ফ্যাশনে ম্যাট্রিক্স প্রিন্ট করা

আউটপুট হবে:

Output: 10 20 40 70 50 30 60 80 90

এই সমস্যার সমাধানের জন্য ম্যাট্রিক্সকে ডায়াগোনালি ট্রাভার্স করতে হয় এবং প্রতিটি ডায়াগোনালের পর দিক পরিবর্তন করতে হয়।

অ্যালগরিদম

START
STEP 1: DECLARE AND SET k = 3, l = 3
STEP 2: DECLARE MATRIX mat[][3]
STEP 3: DECLARE AND SET row = 0, col = 0, flag = false
STEP 4: SET mn = MINIMUM(k, l)
STEP 5: LOOP FOR len = 1 TO mn
    LOOP FOR i = 0 TO len-1
        PRINT mat[row][col]
        IF i+1 == len BREAK
        IF flag THEN row++, col-- ELSE row--, col++
    END FOR
    IF len == mn BREAK
    IF flag THEN row++, flag = false ELSE col++, flag = true
END FOR
STEP 6: BOUNDARY HANDLING FOR REMAINING DIAGONALS
STEP 7: SET MAX = MAXIMUM(k, l) - 1
STEP 8: LOOP FOR DIAGONALS FROM MAX DOWN TO 1
    ... (similar logic for lower half)
STOP

সি প্রোগ্রাম

#include <stdio.h>
#include <stdbool.h>
#define C 3
#define min(a, b) ((a) > (b) ? (b) : (a))
#define max(a, b) ((a) > (b) ? (a) : (b))

int main() {
    int k = 3, l = 3;
    int mat[][3] = {
        { 10, 20, 30 },
        { 40, 50, 60 },
        { 70, 80, 90 }
    };
    int row = 0, col = 0;
    bool flag = false;
    int i, j, len, diag;
    int MAX;
    int mn = min(k, l);
    
    // Upper half diagonals
    for (len = 1; len <= mn; ++len) {
        for (i = 0; i < len; ++i) {
            printf("%d ", mat[row][col]);
            if (i + 1 == len) break;
            if (flag) ++row, --col;
            else --row, ++col;
        }
        if (len == mn) break;
        if (flag) ++row, flag = false;
        else ++col, flag = true;
    }
    
    // Transition to lower half
    if (row == 0) {
        if (col == k - 1) ++row;
        else ++col;
        flag = 1;
    } else {
        if (row == l - 1) ++col;
        else ++row;
        flag = 0;
    }
    
    MAX = max(k, l) - 1;
    // Lower half diagonals
    for (diag = MAX; diag > 0; --diag) {
        len = (diag > mn) ? mn : diag;
        for (i = 0; i < len; ++i) {
            printf("%d ", mat[row][col]);
            if (i + 1 == len) break;
            if (flag) ++row, --col;
            else ++col, --row;
        }
        // Boundary handling
        if (row == 0 || col == k - 1) {
            if (col == k - 1) ++row;
            else ++col;
            flag = true;
        } else if (col == 0 || row == l - 1) {
            if (row == l - 1) ++col;
            else ++row;
            flag = false;
        }
    }
    return 0;
}

আউটপুট

10 20 40 70 50 30 60 80 90

  1. সি প্রোগ্রামিং-এ স্নেক প্যাটার্নে ম্যাট্রিক্স প্রিন্ট করা

  2. সি প্রোগ্রামিং-এ O(1) এক্সট্রা স্পেসে n×n স্পাইরাল ম্যাট্রিক্স প্রিন্ট করা

  3. সি প্রোগ্রামিং-এ ম্যাট্রিক্স ডায়াগোনাল প্যাটার্নে সংখ্যা প্রিন্ট করা

  4. C প্রোগ্রামে ম্যাট্রিক্সকে ডায়াগোনালি নিচের দিকে প্রিন্ট করা