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

C++ এ অনসাইনড ইন্টিজারের জন্য রিস্টোরিং ডিভিশন অ্যালগরিদম


ডিভিশন অ্যালগরिदম ব্যবহার করে একটি অনসাইনড ইন্টিজার ভাগ করার কথা আলোচনা করব। কিছু ডিভিশন অ্যালগরिदম কাগজে প্রয়োগ করা হয়, আর কিছু ডিজিটাল সার্কিটে ইমপ্লিমেন্ট করা হয়। ডিভিশন অ্যালগরिदম দুটি টাইপের: স্লো ডিভিশন অ্যালগরিদম এবং ফাস্ট ডিভিশন অ্যালগরিদম। স্লো ডিভিশন অ্যালগরিদমে রিস্টোরিং (restoring), নন-পারফর্মিং রিস্টোরিং, SRT, এবং নন-রিস্টোরিং অ্যালগরিদম রয়েছে।

এই টিউটোরিয়ালে, আমরা রিস্টোরিং অ্যালগরিদম আলোচনা করব, ধরে নিচ্ছি 0 < divisor < dividend।

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

এখানে, আমরা রেজিস্টার Q ব্যবহার করব কোশন্ট (quotient) সংরক্ষণে, রেজিস্টার A ব্যবহার করব রিমেইনডার (remainder) সংরক্ষণে, এবং M ব্যবহার করব ডিভাইজর (divisor) সংরক্ষণে। A-এর প্রাথমিক মান ০ রাখা হয়, এবং এর মান রিস্টোর করা হয়, তাই এই মেথডকে রিস্টোরিং ডিভিশন বলা হয়।

  • রেজিস্টারগুলো মান দিয়ে ইনিশিয়ালাইজ করুন,

    • Q = Dividend,

    • A = 0,

    • M = divisor,

    • N = ডিভিডেন্ডের বিট সংখ্যা।

  • AQ কে লेफট শিফ্ট (Left shift) করুন অর্থাৎ রেজিস্টার A এবং Q কে একটি ইউনিট হিসেবে বিবেচনা করুন।

  • A থেকে M বিয়োগ করুন এবং ফলাফল A-তে সংরক্ষণ করুন।

  • A-এর মোস্ট সিগনিফিক্যান্ট বিট (MSB) চেক করুন:

    • যদি ০ হয়, লেস্ট সিগনিফিক্যান্ট বিট (LSB) কে ১ সেট করুন।

    • অন্যথায়, LSB কে ০ সেট করুন।

  • A-এর মান রিস্টোর করুন এবং কাউন্টার N-এর মান ১ কমিয়ে দিন।

  • যদি N = 0 হয়, তবে লুপ ব্রেক করুন; অন্যথায় ধাপ ২-এ যান।

  • কোশন্ট (quotient) রেজিস্টার Q-তে সংরক্ষিত থাকে।

ফ্লো চার্ট

C++ এ অনসাইনড ইন্টিজারের জন্য রিস্টোরিং ডিভিশন অ্যালগরিদম

উদাহরণ

উপরোক্ত পদ্ধতির জন্য C++ কোড

#include <iostream> using namespace std; int main(){    // সব ভেরিয়েবল ইনিশিয়ালাইজ Dividend = 9, Divisor = 2.    int Q = 8,q=1,M=3;    short N = 4;    int A = Q;    M <<= N;    // বিট অপারেশন দিয়ে ডিভিশনের জন্য লুপ।    for(int i=N-1; i>=0; i--) {       A = (A << 1)- M;       // A-এর MSB চেক করুন।       if(A < 0) {          q &= ~(1 << i);  // i-তম বিট ০ সেট করুন          A = A + M;       } else {          q |= 1 << i;     // i-তম বিট ১ সেট করুন       }    }    cout << "Quotient: "<< q;    return 0; }

আউটপুট

Quotient: 2

উপসংহার

এই টিউটোরিয়ালে, আমরা অনসাইনড ইন্টিজারের জন্য রিস্টোরিং ডিভিশন অ্যালগরিদম আলোচনা করেছি। আমরা একটি সহজ পদ্ধতি আলোচনা করেছি ফ্লো চার্ট এবং বিট অপারেশন প্রয়োগ করে এই সমস্যা সমাধান করার জন্য। আমরা এই সমস্যার জন্য C++ প্রোগ্রামও আলোচনা করেছি যা আমরা C, Java, Python ইত্যাদি প্রোগ্রামিং ভাষায়ও করতে পারি। আশা করি আপনি এই টিউটোরিয়ালটিকে উপকারী পাবেন।


  1. সি++ প্রোগ্রাম: মেমরি ম্যানেজমেন্টে বেস্ট ফিট অ্যালগরিদম

  2. সি++ প্রোগ্রাম: অপ্টিমাল পেজ রিপ্লেসমেন্ট অ্যালগরিদম

  3. C++-এ ফ্লুরি'স অ্যালগরিদম দিয়ে ওয়লারিয়ান পাথ বা সার্কিট প্রিন্ট করা

  4. C++-এ ইন্টিজার ওভারফ্লো (Integer Overflow) সনাক্ত করা