မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ က်ေနာ္တို႔ ေရွ႕သင္ခန္းစာေတြမွာ Decimal Number ကို Hex, Octal and Binary Number ေတြအျဖစ္ ေျပာင္းလဲႏိုင္တာေလးကို Repeated Division Mehtod ကို အေျခခံၿပီး Function တစ္ခုခ်င္းစီျဖင့္ သီးျခားေလ့လာခဲ့ၿပီးျဖစ္ပါတရ္။ သာမာန္အေတြးကိုပဲ ပံုေဖာ္ထားတာျဖစ္လို႔ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ယံုၾကည္ပါတရ္။
ဒီေန႔ သင္ခန္းစာမွာေတာ့ တမူထူးျခားမႈေလးျဖစ္သြားေအာင္ Getting ‘Char’ Mthod ကို အေျခခံၿပီး ေလ့လာၾကည့္ၾကပါမရ္။ Function ေရးသားရာမွာလည္း Conversion တိုင္းကို သီးျခား function ေတြ ခြဲေရးမေနေတာ့ပဲ Function တစ္ခုတည္းျဖင့္ Type Conversion အားလံုး ေျပာင္းလဲႏိုင္တဲ့ ပံုစံေလးနဲ႔ ေလ့လာၾကည့္သြားၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။ 
  1. Decimal Number ကို မိမိတို႔ ေျပာင္းလဲခ်င္ေသာ Type ရဲ႕Base နဲ႔စားမရ္။
  2. ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မငယ္မခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ Base နဲ႔ စားေနမရ္။
  3. စားၾကြင္း(remainder)ကိုေတာ့ remainder -10+ 'A' OR remainder +'0' ဆိုတဲ့ Formula ကိုျဖတ္ၿပီး Char Value တစ္ခု ရယူမရ္။ ရလာတဲ့ result တစ္ခုကို char array တစ္ခုထဲ ေခတၱထည့္သိမ္းထားမရ္ေပါ့။
  4. ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီလွ်င္ပဲျဖစ္ျဖစ္၊ ငယ္သြားရင္ပဲျဖစ္ျဖစ္ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ စားၾကြင္း(remainder)ေတြႀကီး စုစည္းထားတဲ့ char array တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။
  5. ေနာက္ဆံုးမွာေတာ့ ၄င္း Array ကို Invert လုပ္ ေျပာင္းျပန္လွန္ေပးျခင္းျဖင့္ က်ေနာ္တို႔လိုခ်င္တဲ့ အျခားေသာ Type string တစ္ခုကို ဆြဲထုတ္ယူလိုက္တာပဲျဖစ္ပါတရ္။
GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;

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

        public string DecToOther(int Dec, int Base)
        {
            int count = 0, remainder;
            char[] arr = new char[32];

            while (Dec > 0)
            {
                remainder = Dec % Base;
                Dec /= Base;

                if (remainder > 9 && remainder < 16)
                {
                    arr[count++] = (char)(remainder -10+ 'A');
                }
                else
                {
                    arr[count++] = (char)(remainder + '0');
                }   
            }

            //Revert String
            string output = "";
            for (int i = count-1; i >= 0; i--)
            {
                output += arr[i];
            }
            return output;
        }

        private void btnConvert_Click(object sender, EventArgs e)
        {           
            txtBinary.Text =DecToOther(int.Parse(txtDecimal.Text), 2);
            txtOctal.Text = DecToOther(int.Parse(txtDecimal.Text), 8);
            txtHexadecimal.Text = DecToOther(int.Parse(txtDecimal.Text), 16);
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            txtDecimal.Clear();
            txtBinary.Clear();
            txtOctal.Clear();
            txtHexadecimal.Clear();
            txtDecimal.Focus();
        }
    }
}
အားလံုးကို အေသးစိတ္နားလည္သြားေအာင္ Decimal Nume (10) ကို Octal Number အျဖစ္ ေျပာင္းလဲတာေလးကို trace လိုက္ျပပါ့မရ္။

DecToOther(int Dec, int Base)
 Dec = 10, Base=8
loop1 => while(10> 0) => true
   remainder  = 10%8 = 2
   Dec = 10/8 = 1
   if() =false
    arr[1] = (char)(2+50) = (52)2
loop2 => while(1> 0) => true
   remainder  = 1%8 =1
   Dec = 1/8 =0
   if() => false
    arr[2] = (char)(1+50) = (51)1
loop3 => while(0 > 0) => false
so, arr[] ={2,1}
အနည္းငယ္ရွင္းရမယ္ဆိုရင္ေတာ့... ပထမ loop မွာ array[1] ထဲကို 52 ထည့္ရပါ့မရ္။ 52 ကို Char ေျပာင္းတဲ့အခါ 2 ကိုရပါလိမ့္မရ္။ ဒါေၾကာင့္ arr[1] =2 ရတာပါ။ ဒုတိယ loop မွာ array[2] ထဲကို 51 ထည့္ရပါ့မရ္။ 51 ကို Char ေျပာင္းတဲ့အခါ 1 ကိုရပါလိမ့္မရ္။ ဒါေၾကာင့္ arr[2] =1 ရတာပါ။ တတိယ loop မွာေတာ့ while connection false ျဖစ္ပါတရ္။ ဒီေတာ့ loop ကထြက္ပါၿပီ။ ဒီအေျခအေနမွာ က်ေနာ္တို႔ array အခန္းထဲမွာ arr[] ={2,1} ဆိုၿပီး ရရွိေနပါၿပီဗ်ာ။ ေနာက္ဆံုးမွာေတာ့ ၄င္း array ကို invert လုပ္ ေျပာင္းျပန္လွန္ေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္တဲ့ octal တန္ဖိုး 12 ဆိုတာကို ရရွိခဲ့တာျဖစ္ပါတရ္။ နားလည္းၾကလိမ့္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်ာ။ အျခား Type Conversion ေတြလည္း ဒီနည္းအတိုင္းပဲ ေျပာင္းလဲသြားတာျဖစ္ပါတရ္။ မိတ္ေဆြအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။

0 Responses so far.

Post a Comment