Create Binary To Octal converter - Easy way by Getting ‘char’ Method

Posted by ေတဇာလင္း Friday 9 September 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Binary Number တစ္ခုကို Octal Number အျဖစ္ ဘရ္လိုေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။ ေရွ႕သင္ခန္းစာမွာေတာ့ က်ေနာ္တို႔ function ႏွစ္ခုကို ျဖတ္ၿပီးမွ Octal Number အျဖစ္ ဆြဲထုတ္ပံုေလးကို ေဆြးေႏြးေပးခဲ့ၿပီးျဖစ္ပါတရ္။ ဒီေန႔ေတာ့ Getting 'char' Method ေလးကို အသံုးျပဳၿပီး Binary Number မွ Octal Number အျဖစ္သို႔ တိုက္ရိုက္ ေျပာင္းလဲႏိုင္တာေလးကို ေဆြးေႏြးေပးသြားပါ့မရ္ဗ်ာ။ ေရွ႕မွာ ေလ့လာခဲ့ၿပီးသား သင္ခန္းစာေတြကိုပဲ ေက်ာရိုးျပဳၿပီး သာမာန္အေတြးေလးကို ရုပ္လံုးေဖာ္ၾကည့္ထားတာပါ။
သတိျပဳရမရ္႕ Logic အေနနဲ႔ကေတာ့ ကိန္းစဥ္တန္းတစ္ခုကို ဆယ္ျပည့္ကိန္း၊ ရာျပည့္ကိန္း၊ ေထာင္ျပည့္ကိန္း... စသည္တို႔ျဖင့္ စားတဲ့အခါ စားၾကြင္းအျဖင့္ ကိန္းစဥ္တန္းမွာရွိေသာ မိမိလိုခ်င္တဲ့ ကိန္းအေရအတြက္ကို ျဖတ္ယူႏိုင္တရ္ဆိုတာပါပဲဗ်ာ။ ဥပမာ အေနနဲ႔ ကိန္းစဥ္တန္းတစ္ခုကို 10 နဲ႔ စားရင္ ၄င္းကိန္းစဥ္တန္းရဲ႕ ေနာက္ဆံုး 1 လံုးကို စားၾကြင္းအျဖင့္ ျပန္ရမရ္။ 100 နဲ႔ စားရင္ 2 လံုးျပန္ရမရ္၊ 1000 နဲ႔စားရင္ 3 လံုးျပန္ရမရ္ေပါ့... စသည္ျဖင့္ မိမိလိုခ်င္သေလာက္ ျပည့္ကိန္းကို တိုးၿပီး စားႏိုင္တာပဲျဖစ္ပါတရ္ဗ်။
မိတ္ေဆြတို႔ ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Binary ကေန Octal ေျပာင္းတာကို ေအာက္မွာ ဥပမာေလးနဲ႔ အရင္ျပပါ့မရ္။
eg. Binary = 110110110, Octal =?
so, Binary = 110  110  110
           = 6    6    6  
           = 666
Binary(110110110)  = Octal(666)

အနည္းငယ္ရွင္းရမရ္ဆိုရင္ေတာ... Binary ကေန Octal ေျပာင္းမွာျဖစ္တဲ့အတြက္ Binary Number ကို Right to Left သံုးလံုးစီ အရင္ျဖတ္ယူပါ့မရ္။ ရလာတဲ့ သံုးလံုးတြဲ Binary Number ကိုမွ Decimal အျဖစ္ ေျပာင္းလဲမရ္။ Binary Group အလိုက္ ရလာတဲ့ Decimal ကိန္းေတြကို စုစည္း ေဖာ္ျပျခင္းလိုက္ျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Octal Number တစ္ခုကို ရရွိမွာျဖစ္ပါတရ္။ နားလည္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။ အခက္အခဲရွိတရ္ဆိုရင္ေတာ့ က်ေနာ္ ... Page မွာ ပံုနဲ႔တကြ ရွင္းျပထားတာရွိပါတရ္ဗ်။
ကဲ... အခုဆိုရင္ က်ေနာ္တို႔ Logic အေတြးကိုလည္း နားလည္သြားၿပီဆိုေတာ့ Coding Flow ေလးကို ဆက္ေလ့လာၾကည့္ၾကမရ္။
  1. ပထမဦးဆံုး Binary Number ကို 1000 နဲ႔ စားပါ့မရ္( Binary Number ရဲ႕ ေနာက္ဆံုး(3)လံုးကို ျဖတ္ယူခ်င္လို႔ပါ)။
  2. ရလာတဲ့ စားၾကြင္းကို loop ပတ္ၿပီး က်ေနာ္တို႔ ႀကိဳတင္သတ္မွတ္ထားတဲ့ Binary array နဲ႔ တိုက္ဆိုင္စစ္ေဆးၿပီး ရရွိလာတဲ့ Index Number ကိုဆြဲထုတ္ပါတရ္။
  3. ၄င္း ဆြဲထုတ္ယူလာတဲ့ Index Number + ‘0’ ဆိုတဲ့ formual ကိုျဖတ္ၿပီး ရလာတဲ့ တန္ဖိုးကို char type ေျပာင္းလဲယူပါ့မရ္။ ရလာတဲ့ Char တန္ဖိုးဟာ က်ေနာ္တို႔ first loop ရဲ႕ Octal Number ျဖစ္ပါတရ္။
  4. ေနာက္ဆံုးမွာေတာ့ Binary Number ကို 1000 နဲ႔စားၿပီး စားလဒ္ကို သုညနဲ႔ မညီမခ်င္း loop ပတ္ စစ္ထုတ္ေနမွာျဖစ္ပါတရ္။
  5. ေနာက္ဆံုးမွာေတာ့ loop တခါပတ္တိုင္းရရွိလာတဲ့ char တန္းဖိုးေတြကို စုစည္းေရးသားေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Octal တန္ဖိုးကိုရရွိမွာျဖစ္ပါတရ္ဗ်ာ။
ဒီ Conversion ေလးရဲ႕ GUI ကိုေတာ့ ေအာက္ပါအတိုင္းခ်ထားပါတရ္ဗ်။ မိတ္ေဆြတို႔အေနနဲ႔ ႀကိဳက္ႏွစ္သတ္ရာ ပံုစံ Tool ေတြနဲ႔ ဖန္တီးယူႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;

namespace NumberTypeConverter
{
    public partial class BinaryConversion : Form
    {
        public BinaryConversion()
        {
            InitializeComponent();
        }

        public string BinaryToOctal(int Bi)
        {
            int[] OctalConstant = {0, 1, 10, 11, 100, 101, 110, 111};
            int remainder, count = 0;
            char[] arr = new char[32];
            while (Bi != 0)
            {
                remainder = Bi % 1000;
                for (int i = 0; i <= OctalConstant.Length-1; i++)
                {
                    if (OctalConstant[i] == remainder)
                    {
                        arr[count++] = (char)(i + '0');
                    }
                }
                Bi /= 1000;    
            }
            //Revert array
            string output = "";
            for (int i = count-1; i >= 0; i--)
            {
                output += arr[i];
            }
            return output;
        }

        private void btnConvert_Click(object sender, EventArgs e)
        {           
            txtOctal.Text = BinaryToOctal(int.Parse(txtBinary.Text));
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            txtBinary.Clear();
            txtOctal.Clear();
            txtBinary.Focus();
        }
    }
}
အေသးစိတ္နားလည္ႏိုင္ဖို႔အတြက္ က်ေနာ္ Trace လုိက္ျပပါ့မရ္။

Binary = 110110, Octal=?
Loop1 => (110110 != 0) => true
 Remainder = 110110 % 1000 = 110
 For(loop(6)==110) => true
  arr[0] = (char) 6 + ‘0’ = 6+48 = 54(6)
 Binary = 110110 / 1000 = 110
Loop2 => (110 != 0) => true
 Remainder = 110% 1000 = 110
 For(loop(6)==110) => true
  arr[1] = (char) 6 + ‘0’ = 6+48 = 54(6)
 Binary = 110 / 1000 = 0
Loop3 => (0 != 0) => false
So, arr[] = 66
ဒီေလာက္ဆိုရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ Getting 'char' method ေလးကို အသံုးျပဳၿပီး Binary Number ကေနၿပီး Octal Number အျဖစ္ ေျပာင္းလဲႏိုင္ၿပီလို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment