မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Binary Number တစ္ခုကို Decimal Number အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Coding ေရးသားတဲ့အခါမွာ Visual Studio က ေထာက္ပံ့ေပးထားတဲ့ Method ေတြကို အသံုးမျပဳပဲ အလြယ္ကူဆံုးနည္းလမ္းတစ္ခုနဲ႔ ကိုယ္ပိုင္ Method တစ္ခု တည္ေဆာက္ၿပီး ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။
- Decimal ေျပာင္းမွာျဖစ္တဲ့အတြက္ က်ေနာ္တို႔ ေျပာင္းလဲခ်င္တဲ့ Binary ကို 10 နဲ႔စားမရ္။
- ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မညီမခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ 10 နဲ႔ စားေနမရ္။
- Loop ပတ္တိုင္း Dec += (int)(remainder * Math.Pow(2, power)); ဆိုတဲ့ formula ကိုျဖတ္ၿပီး ရလာတဲ့ Number တစ္ခုကိုေတာ့ container တစ္ခုထဲ ေခတၱထည့္သိမ္းထားမရ္ေပါ့။
- ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီသြားတဲ့အခ်ိန္မွာ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ Decimal Number တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။
Logic အနည္းငယ္စိမ္းေနမရ္ဆိုရင္ေတာ့..... http://programmingknowledge.blogspot.com/2014/07/5-number-system-conversions-from-binary.html
Pageမွာ ပံုနဲ႔တကြ ရွင္းထားတာေလး ရွိပါတရ္။ ေလ့လာၾကည့္ႏိုင္ပါတရ္ဗ်ာ။ အခုေတာ့ Coding အပိုင္းေလး ဆက္ၾကမရ္။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
ခက္ခက္ခဲခဲ ဘာမွ မရွိပါဘူးဗ်ာ။ ေအာက္ပါအေတြးကို ပံုေဖာ္ထားတာပါ။
ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Trace လိုက္ျပပါ့မရ္။
using System;
using System.Windows.Forms;
namespace NumberTypeConverter
{
public partial class BinaryConversion : Form
{
public BinaryConversion()
{
InitializeComponent();
}
public int BinaryToDecimal(int Bi)
{
int Dec=0, power=0, remainder, Quotient= Bi;
while (Quotient != 0)
{
remainder = Quotient % 10;
Quotient /= 10;
Dec += (int)(remainder * Math.Pow(2, power));
++power;
}
return Dec;
}
private void btnConvert_Click(object sender, EventArgs e)
{
txtDecimal.Text = BinaryToDecimal(int.Parse(txtBinary.Text)).ToString();
}
private void btnReset_Click(object sender, EventArgs e)
{
txtBinary.Clear();
txtDecimal.Clear();
txtBinary.Focus();
}
}
}
BinaryToDecimal(int Bi) Bi=1101 loop1 => while(1101 != 0) => true remainder = 1101%10 = 1 Quotient = 1101/10 = 110 Dec = (int)(1 * pow(2,0) = 1 loop2 => while(110 != 0) => true remainder = 110%10 = 0 Quotient = 110/10 = 11 Dec = (int)(1 + 0 * pow(2,1) = 1 loop3 => while(11 != 0) => true remainder = 11%10 = 1 Quotient = 11/10 = 1 Dec = (int)(1 + 1 * pow(2,2) = 5 loop4 => while(1 != 0) => true remainder = 1%10 = 1 Quotient = 1/10 = 0 Dec = (int)(5 + 1 * pow(2,3) = 13 loop5 => while(0 != 0) => false so, Dec = 13Coding ေလးနဲ႔ ScreenShoot ေလးကို ၾကည့္လိုက္ရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ ရွင္းျပစရာမလိုေလာက္ေအာင္ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ က်ေနာ္တို႔ ေရွ႕သင္ခန္းစာေတြမွာ Decimal Number ကို Hex, Octal and Binary Number ေတြအျဖစ္ ေျပာင္းလဲႏိုင္တာေလးကို Repeated Division Mehtod ကို အေျခခံၿပီး Function တစ္ခုခ်င္းစီျဖင့္ သီးျခားေလ့လာခဲ့ၿပီးျဖစ္ပါတရ္။ သာမာန္အေတြးကိုပဲ ပံုေဖာ္ထားတာျဖစ္လို႔ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ယံုၾကည္ပါတရ္။
ဒီေန႔ သင္ခန္းစာမွာေတာ့ တမူထူးျခားမႈေလးျဖစ္သြားေအာင္ Getting ‘Char’ Mthod ကို အေျခခံၿပီး ေလ့လာၾကည့္ၾကပါမရ္။ Function ေရးသားရာမွာလည္း Conversion တိုင္းကို သီးျခား function ေတြ ခြဲေရးမေနေတာ့ပဲ Function တစ္ခုတည္းျဖင့္ Type Conversion အားလံုး ေျပာင္းလဲႏိုင္တဲ့ ပံုစံေလးနဲ႔ ေလ့လာၾကည့္သြားၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။
- Decimal Number ကို မိမိတို႔ ေျပာင္းလဲခ်င္ေသာ Type ရဲ႕Base နဲ႔စားမရ္။
- ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မငယ္မခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ Base နဲ႔ စားေနမရ္။
- စားၾကြင္း(remainder)ကိုေတာ့ remainder -10+ 'A' OR remainder +'0' ဆိုတဲ့ Formula ကိုျဖတ္ၿပီး Char Value တစ္ခု ရယူမရ္။ ရလာတဲ့ result တစ္ခုကို char array တစ္ခုထဲ ေခတၱထည့္သိမ္းထားမရ္ေပါ့။
- ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီလွ်င္ပဲျဖစ္ျဖစ္၊ ငယ္သြားရင္ပဲျဖစ္ျဖစ္ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ စားၾကြင္း(remainder)ေတြႀကီး စုစည္းထားတဲ့ char array တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။
- ေနာက္ဆံုးမွာေတာ့ ၄င္း 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 ေတြလည္း ဒီနည္းအတိုင္းပဲ ေျပာင္းလဲသြားတာျဖစ္ပါတရ္။ မိတ္ေဆြအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Decimal Number တစ္ခုကို Octal String အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Coding ေရးသားတဲ့အခါမွာ Visual Studio က ေထာက္ပံ့ေပးထားတဲ့ Method ေတြကို အသံုးမျပဳပဲ အလြယ္ကူဆံုးနည္းလမ္းတစ္ခုနဲ႔ ကိုယ္ပိုင္ Method တစ္ခု တည္ေဆာက္ၿပီး ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။
- Octal ေျပာင္းမွာျဖစ္တဲ့အတြက္ က်ေနာ္တို႔ ေျပာင္းလဲခ်င္တဲ့ Decimal ကို 8 နဲ႔စားမရ္။
- ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မငယ္မခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ 8 နဲ႔ စားေနမရ္။
- Loop ပတ္တိုင္း ရလာတဲ့ စားၾကြင္း(remainder)ကိုေတာ့ container array တစ္ခုထဲ ေခတၱထည့္သိမ္းထားမရ္ေပါ့။
- ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီလွ်င္ပဲျဖစ္ျဖစ္၊ ငယ္သြားရင္ပဲျဖစ္ျဖစ္ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ စားၾကြင္း(remainder)ေတြႀကီး စုစည္းထားတဲ့ array တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။
- ေနာက္ဆံုးမွာေတာ့ ၄င္း Array ကို Invert လုပ္ ေျပာင္းျပန္လွန္ေပးျခင္းျဖင့္ Octal string တစ္ခုကို ဖန္တီးယူလိုက္တာပဲျဖစ္ပါတရ္။ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။
Logic အနည္းငယ္စိမ္းေနမရ္ဆိုရင္ေတာ့..... http://programmingknowledge.blogspot.com/2014/07/6-number-system-conversions-from.html
Pageမွာ ပံုနဲ႔တကြ ရွင္းထားတာေလး ရွိပါတရ္။ ေလ့လာၾကည့္ႏိုင္ပါတရ္ဗ်ာ။ အခုေတာ့ Coding အပိုင္းေလး ဆက္ၾကမရ္။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
ခက္ခက္ခဲခဲ ဘာမွ မရွိပါဘူးဗ်ာ။ Coding ေလးနဲ႔ ScreenShoot ေလးကို ၾကည့္လိုက္ရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ ရွင္းျပစရာမလိုေလာက္ေအာင္ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။
using System;
using System.Windows.Forms;
namespace NumberTypeConverter
{
public partial class frmDecToOctal : Form
{
public frmDecToOctal()
{
InitializeComponent();
}
public string DecToOctal(int Dec)
{
string remainder=null, result=null;
int Quotient = Dec;
while (Quotient > 0)
{
remainder += (Quotient % 8).ToString();
Quotient /= 8;
}
for (int i = remainder.Length-1; i >=0; i--)
{
result += remainder[i];
}
return result;
}
private void btnConvert_Click(object sender, EventArgs e)
{
txtOctal.Text = DecToOctal(int.Parse(txtDecimal.Text));
}
private void btnReset_Click(object sender, EventArgs e)
{
txtDecimal.Clear();
txtOctal.Clear();
txtDecimal.Focus();
}
}
}
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Decimal Number တစ္ခုကို Binary String အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Coding ေရးသားတဲ့အခါမွာ Visual Studio က ေထာက္ပံ့ေပးထားတဲ့ Method ေတြကို အသံုးမျပဳပဲ အလြယ္ကူဆံုးနည္းလမ္းတစ္ခုနဲ႔ ကိုယ္ပိုင္ Method တစ္ခု တည္ေဆာက္ၿပီး ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။
- Binary ေျပာင္းမွာျဖစ္တဲ့အတြက္ က်ေနာ္တို႔ ေျပာင္းလဲခ်င္တဲ့ Decimal ကို 2 နဲ႔စားမရ္။
- ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မငယ္မခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ 2 နဲ႔ စားေနမရ္။
- Loop ပတ္တိုင္း ရလာတဲ့ စားၾကြင္း(remainder)ကိုေတာ့ container array တစ္ခုထဲ ေခတၱထည့္သိမ္းထားမရ္ေပါ့။
- ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီလွ်င္ပဲျဖစ္ျဖစ္၊ ငယ္သြားရင္ပဲျဖစ္ျဖစ္ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ စားၾကြင္း(remainder)ေတြႀကီး စုစည္းထားတဲ့ array တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။
- ေနာက္ဆံုးမွာေတာ့ ၄င္း Array ကို Invert လုပ္ ေျပာင္းျပန္လွန္ေပးျခင္းျဖင့္ Binary string တစ္ခုကို ဖန္တီးယူလိုက္တာပဲျဖစ္ပါတရ္။ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။
Logic အနည္းငယ္စိမ္းေနမရ္ဆိုရင္ေတာ့..... http://programmingknowledge.blogspot.com/2014/07/6-number-system-conversions-from.html
Pageမွာ ပံုနဲ႔တကြ ရွင္းထားတာေလး ရွိပါတရ္။ ေလ့လာၾကည့္ႏိုင္ပါတရ္ဗ်ာ။ အခုေတာ့ Coding အပိုင္းေလး ဆက္ၾကမရ္။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
ခက္ခက္ခဲခဲ ဘာမွ မရွိပါဘူးဗ်ာ။ Coding ေလးနဲ႔ ScreenShoot ေလးကို ၾကည့္လိုက္ရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ ရွင္းျပစရာမလိုေလာက္ေအာင္ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။
using System;
using System;
using System.Windows.Forms;
namespace Converter
{
public partial class frmDecToBinary : Form
{
public frmDecToBinary()
{
InitializeComponent();
}
public string DecToBinary(int Dec)
{
string remainder = null, result = null;
int Quotient = Dec;
while (Quotient > 0) {
remainder += (Quotient % 2).ToString();
Quotient /= 2;
}
//Invert String
for (int i = remainder.Length - 1; i >= 0; i--) {
result += remainder[i];
}
return result;
}
private void btnConvertDecToBi_Click(object sender, EventArgs e)
{
txtBinary.Text = DecToBinary(int.Parse(txtDecimal.Text));
}
private void btnReset_Click(object sender, EventArgs e)
{
txtDecimal.Text = "";
txtBinary.Clear();
txtDecimal.Focus();
}
}
}
