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

C#-এ মেথড ছাড়া দুটি বাইনরি সংখ্যার যোগফল বের করা

পূর্বের আর্টিকেলের মতোই, কিন্তু এখানে আলাদা মেথড (`displaySum`) না ব্যবহার করে `Main` মেথডের ভিতরেই লজিক লিখা হয়েছে। এটি বেগিনার লেভেলের জন্য সহজ কিন্তু রিয়usable নয়।

ইনলাইন লজিক (Main-এ সরাসরি)


using System;

class Demo
{
    public static void Main(string[] args)
    {
        long val1 = 11010; // বাইনরি ১১০১০ = ডেসিমেল ২৬
        long val2 = 10100; // বাইনরি ১০১০০ = ডেসিমেল ২০
        
        Console.WriteLine($"বাইনরি এক: {val1}");
        Console.WriteLine($"বাইনরি দুই: {val2}");
        
        long i = 0, rem = 0;
        long[] sum = new long[64]; // ৬৪ বিট পর্যন্ত সাপোর্ট
        
        // ডিজিট বাই ডিজিট যোগ (রাইট টু লেফট)
        while (val1 != 0 || val2 != 0)
        {
            sum[i++] = (val1 % 10 + val2 % 10 + rem) % 2; // বর্তমান বিট
            rem = (val1 % 10 + val2 % 10 + rem) / 2;       // ক্যারি
            val1 /= 10;
            val2 /= 10;
        }
        
        // শেষ ক্যারি থাকলে
        if (rem != 0) sum[i++] = rem;
        
        // রিভার্স করে প্রিন্ট (লেফট টু রাইট)
        i--;
        Console.Write("যোগফল (বাইনরি): ");
        while (i >= 0)
            Console.Write(sum[i--]);
        Console.WriteLine();
    }
}

আউটপুট


বাইনরি এক: 11010
বাইনরি দুই: 10100
যোগফল (বাইনরি): 101110

যাচাই: ২৬ + ২০ = ৪৬, বাইনরি ১০১১১০ = ৩২+৮+৪+২ = ৪৬ ✓

কোড ব্যাখ্যা

  1. ইনপুট: দুটি লং ইন্টিজার যেগুলো বাইনরি ডিজিট হিসেবে ইন্টারপ্রেট করা হচ্ছে (১১০১০, ১০১০০)
  2. লুপ: `while (val1 != 0 || val2 != 0)` - যতক্ষণ না দুটোই শূন্য হয়
  3. বিট ক্যালকুলেশন: `(val1%10 + val2%10 + rem) % 2` - বাইনরি যোগ (০+০=০, ০+১=১, ১+১=০ ক্যারি ১)
  4. ক্যারি ক্যালকুলেশন: `(val1%10 + val2%10 + rem) / 2` - ইন্টিজার ডিভিশন দিয়ে ক্যারি (০ বা ১)
  5. শিফট: `val1 /= 10; val2 /= 10;` - পরবর্তী ডিজিটে যাওয়া
  6. রিভার্স আউটপুট: ফলাফল উল্টা ক্রমে স্টোর হয়েছে, তাই প্রিন্ট করার সময় রিভার্স করা হলো
  7. সীমাবদ্ধতা

    • ইনপুট অবশ্যই বাইনরি ডিজিট (০/১) দিয়ে গঠিত লং ইন্টিজার হতে হবে
    • লিডিং জিরো হ্যান্ডল করা হয় না (০০১১ → ১১)
    • খুব বড় বাইনরি স্ট্রিং (৬৪ বিট+) এর জন্য স্ট্রিং-বেসড পদ্ধতি দরকার
    • নেগেটিভ নম্বর সাপোর্ট নেই

    উন্নত ভার্সন: ইনপুট ভ্যালিডেশনসহ

    
    static long AddBinaryInline(long val1, long val2)
    {
        // ভ্যালিডেশন: শুধু ০ এবং ১ ডিজিট আছে কিনা
        if (!IsBinary(val1) || !IsBinary(val2))
            throw new ArgumentException("ইনপুট শুধু ০ এবং ১ ডিজিট হতে হবে");
        
        long i = 0, rem = 0, res = 0;
        long[] sum = new long[64];
        
        while (val1 != 0 || val2 != 0)
        {
            sum[i++] = (val1 % 10 + val2 % 10 + rem) % 2;
            rem = (val1 % 10 + val2 % 10 + rem) / 2;
            val1 /= 10;
            val2 /= 10;
        }
        if (rem != 0) sum[i++] = rem;
        
        i--;
        while (i >= 0) res = res * 10 + sum[i--];
        return res;
    }
    
    static bool IsBinary(long n)
    {
        if (n == 0) return true;
        while (n > 0)
        {
            int digit = (int)(n % 10);
            if (digit != 0 && digit != 1) return false;
            n /= 10;
        }
        return true;
    }
    

    সেরা পদ্ধতি: বিটওয়াইজ (পুনরাবৃত্তি)

    
    // সবচেয়ে দ্রুত এবং সঠিক - আসল বাইনরি অপারেশন
    public static int AddBinaryBitwise(int a, int b)
    {
        while (b != 0)
        {
            int carry = a & b;
            a = a ^ b;
            b = carry << 1;
        }
        return a;
    }
    
    // বাইনরি লিটারেল ব্যবহার (C# 7.0+)
    int a = 0b11010; // 26
    int b = 0b10100; // 20
    int sum = AddBinaryBitwise(a, b); // 46
    Console.WriteLine(Convert.ToString(sum, 2)); // 101110
    

    সারসংক্ষেপ

    • ইনলাইন লজিক: বেগিনারদের জন্য বোঝা সহজ, কিন্তু ডুপ্লিকেশন হয়
    • মেথড এক্সট্রাকশন: DRY প্রিন্সিপল, রিয়usable, টেস্টযোগ্য
    • বিটওয়াইজ: প্রোডাকশন কোডের জন্য সেরা (দ্রুত, সঠিক, স্ট্যান্ডার্ড)
    • বাইনরি লিটারেল: `0b1010` সিনট্যাক্স ব্যবহার করুন পঠনযোগ্যতার জন্য
  1. জাভা প্রোগ্রাম: রিকার্শন ব্যবহার করে দুটি সংখ্যার গুণফল বের করা

  2. জাভা প্রোগ্রাম: রিকার্শন ব্যবহার করে প্রাকৃতিক সংখ্যা (Natural Numbers) এর যোগফল বের করা

  3. পাইথন প্রোগ্রাম: বাইনোমিয়াল ট্রি (Binomial Tree) ইমপ্লিমেন্টেশন

  4. Python-এ প্রাকৃতিক সংখ্যার যোগফল (Sum of Natural Numbers) বের করা