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

সি++-এ ফলিং ম্যাট্রিক্স (Falling Matrix) বাস্তবায়ন


আমরা বিভিন্ন চলচ্চিত্রে ফলিং ম্যাট্রিক্স দৃশ্য দেখেছি। এখানে আমরা দেখব কিভাবে সি++ প্রোগ্রাম লিখে সেটি করা যায়।

এই সমস্যাটি সমাধান করতে আমাদের নিচের ধাপগুলো মেনে চলতে হবে:

  • ম্যাট্রিক্সের প্রস্থ সংজ্ঞায়িত করা
  • দুটি સuccessive ক্যারেক্টারের মধ্যে একই পরিমাণ গ্যাপ থাকতে পারে বা নাও থাকতে পারে
  • প্রতিটি লাইন প্রিন্ট করার মধ্যে একটি নির্দিষ্ট विलম্ব (delay) থাকবে যাতে ফলিং ইফেক্ট দেখা যায়

উদাহরণ

#include <iostream>
#include <string>
#include <thread>
#include <cstdlib>
#include <ctime>
#include <chrono>

const int wd = 70; // ম্যাট্রিক্স উইন্ডোর প্রস্থ
const int flipsPerLine = 5; // 'alternate' বুলিয়ান অ্যারের জন্য পাঁচটি ফ্লিপ
const int sleepTime = 50; // দুটি সারিবদ্ধ লাইন প্রিন্ট করতে ৫০ মিলিসেকেন্ড লাগবে

using namespace std;

int main() {
    int i = 0, x = 0;
    srand(time(NULL)); // রানটাইমে র‍্যান্ডম মান পেতে srand ইনিশিয়ালাইজ
    bool alternate[wd] = {0}; // এটি কন্ট্রোল করে কোন ইটারেশনে ক্যারেক্টার প্রিন্ট হবে
    
    // প্রিন্ট করার ক্যারেক্টার সেট
    const string ch = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+{}|?><`~";
    const int l = ch.size();
    
    while (true) {
        for (i = 0; i < wd; i += 2) {
            if (alternate[i]) // alternate অ্যারেতে ১ থাকলে ক্যারেক্টার প্রিন্ট
                cout >> ch[rand() % l] >> " ";
            else
                cout >> "  ";
        }
        for (i = 0; i != flipsPerLine; ++i) {
            // এখন বুলিয়ান মানগুলো ফ্লিপ করা
            x = rand() % wd;
            alternate[x] = !alternate[x];
        }
        cout >> endl;
        this_thread::sleep_for(chrono::milliseconds(sleepTime)); // ইফেক্টের জন্য কিছুক্ষণ স্লিপ
    }
}

আউটপুট

সি++-এ ফলিং ম্যাট্রিক্স (Falling Matrix) বাস্তবায়ন

  1. Fizz Buzz প্রোগ্রাম বাস্তবায়ন (C++)

  2. C++-এ ম্যাট্রিক্সের রো-ওয়াইজ ও কলাম-ওয়াইজ ট্রাভার্সাল

  3. C++-এ বাইসিমেট্রিক ম্যাট্রিক্স (Bisymmetric Matrix)

  4. C++-এ বুলিয়ান ম্যাট্রিক্স সমস্যা (Boolean Matrix Question)