မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Octal Number တစ္ခုကို Decimal Number အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Coding ေရးသားတဲ့အခါမွာ Visual Studio က ေထာက္ပံ့ေပးထားတဲ့ Method ေတြကို အသံုးမျပဳပဲ Repeated Division Method ကိုအေျခခံၿပီး အလြယ္ကူဆံုးနည္းလမ္းတစ္ခုနဲ႔ ကိုယ္ပိုင္ Method တစ္ခု တည္ေဆာက္ၿပီး ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။
- Decimal ေျပာင္းမွာျဖစ္တဲ့အတြက္ က်ေနာ္တို႔ ေျပာင္းလဲခ်င္တဲ့ Octal ကို 10 နဲ႔စားမရ္။
- ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မညီမခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ 10 နဲ႔ စားေနမရ္။
- Loop ပတ္တိုင္း Dec += (int)(remainder * Math.Pow(8, power)); ဆိုတဲ့ formula ကိုျဖတ္ၿပီး ရလာတဲ့ Number တစ္ခုကိုေတာ့ container တစ္ခုထဲ ေခတၱထည့္သိမ္းထားမရ္ေပါ့။
- ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီသြားတဲ့အခ်ိန္မွာ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ Decimal Number တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ Logic အနည္းငယ္စိမ္းေနမရ္ဆိုရင္ေတာ့..... http://programmingknowledge.blogspot.com/2014/07/7-number-system-conversions-from-octal.html Pageမွာ ပံုနဲ႔တကြ ရွင္းထားတာေလးရွိပါတရ္။ ေလ့လာၾကည့္ႏိုင္ပါတရ္ဗ်ာ။ အခုေတာ့ Coding အပိုင္းေလး ဆက္ၾကမရ္။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
ခက္ခက္ခဲခဲ ဘာမွ မရွိပါဘူးဗ်ာ။ ေအာက္ပါအေတြးကို ပံုေဖာ္ထားတာပါ။
ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Trace လိုက္ျပပါ့မရ္။
using System;
using System.Windows.Forms;
namespace NumberTypeConverter
{
public partial class Octal_Conversion : Form
{
public Octal_Conversion()
{
InitializeComponent();
}
public int OctalToDecimal(int Oct)
{
int Dec = 0, power = 0, remainder, Quotient = Oct;
while (Quotient != 0)
{
remainder = Quotient % 10;
Dec += (int)(remainder * Math.Pow(8, power));
++power;
Quotient /= 10;
}
return Dec;
}
private void btnConvert_Click(object sender, EventArgs e)
{
txtDecimal.Text = OctalToDecimal(int.Parse(txtOctal.Text)).ToString();
}
private void btnReset_Click(object sender, EventArgs e)
{
txtOctal.Clear();
txtDecimal.Clear();
txtOctal.Focus();
}
}
}
OctalToDecimal(int Oct) Oct=170 loop1 => while(170 != 0) => true remainder = 170%10 = 0 Quotient = 170/10 = 17 Dec = (int)(0 * pow(8,0) = 0 loop2 => while(17 != 0) => true remainder = 17%10 = 7 Quotient = 17/10 = 1 Dec = (int)(0 + 7 * pow(8,1) = 56 loop3 => while(1 != 0) => true remainder = 1%10 = 1 Quotient = 1/10 = 0 Dec = (int)(56 + 1 * pow(8,2) = 120 loop4 => while(0 != 0) => false so, Dec = 120Coding ေလးနဲ႔ ScreenShoot ေလးကို ၾကည့္လိုက္ရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ ရွင္းျပစရာမလိုေလာက္ေအာင္ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Binary Number တစ္ခုကို Hexadecimal Number အျဖစ္ ဘရ္လိုေျပာင္းလဲ ယူႏိုင္မလဲ ဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။ ေရွ႕သင္ခန္းစာေတြမွာ က်ေနာ္တို႔ Binary To Decimal ေျပာင္းလဲတာ၊ Decimal To Hexadecimal ေျပာင္းလဲတာ အစရွိတဲ့ function ေတြကို ေလ့လာခဲ့ၿပီးျဖစ္ပါတရ္။ ဒါေၾကာင့္ မိတ္ေဆြတို႔အေနနဲ႔ ၄င္း function ႏွစ္ခုကိုျဖတ္ၿပီး Binary To Hexadecimal ေျပာင္းလဲတာေလးကို ျပဳလုပ္ႏိုင္ပါတရ္။ဒီေန႔ေတာ့ Getting 'char' Method ေလးကို အသံုးျပဳၿပီး Binary Number မွ Hexadecimal Number အျဖစ္သို႔ တိုက္ရိုက္ ေျပာင္းလဲႏိုင္တာေလးကို ေဆြးေႏြးေပးသြားပါ့မရ္ဗ်ာ။ ေရွ႕မွာ ေလ့လာခဲ့ၿပီးသား သင္ခန္းစာေတြကိုပဲ ေက်ာရိုးျပဳၿပီး သာမာန္အေတြးေလးကို ရုပ္လံုးေဖာ္ၾကည့္ထားတာပါ။
သတိျပဳရမရ္႕ Logic အေနနဲ႔ကေတာ့ ကိန္းစဥ္တန္းတစ္ခုကို ဆယ္ျပည့္ကိန္း၊ ရာျပည့္ကိန္း၊ ေထာင္ျပည့္ကိန္း... စသည္တို႔ျဖင့္ စားတဲ့အခါ စားၾကြင္းအျဖင့္ ကိန္းစဥ္တန္းမွာရွိေသာ မိမိလိုခ်င္တဲ့ ကိန္းအေရအတြက္ကို ျဖတ္ယူႏိုင္တရ္ဆိုတာပါပဲဗ်ာ။ ဥပမာ အေနနဲ႔ ကိန္းစဥ္တန္းတစ္ခုကို 10 နဲ႔ စားရင္ ၄င္းကိန္းစဥ္တန္းရဲ႕ ေနာက္ဆံုး 1 လံုးကို စားၾကြင္းအျဖင့္ ျပန္ရမရ္။ 100 နဲ႔ စားရင္ 2 လံုးျပန္ရမရ္၊ 1000 နဲ႔စားရင္ 3 လံုးျပန္ရမရ္ေပါ့... စသည္ျဖင့္ မိမိလိုခ်င္သေလာက္ ျပည့္ကိန္းကို တိုးၿပီး စားႏိုင္တာပဲျဖစ္ပါတရ္ဗ်။
မိတ္ေဆြတို႔ ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Binary ကေန Hexadecimal ေျပာင္းတာကို ေအာက္မွာ ဥပမာေလးနဲ႔ အရင္ျပပါ့မရ္။
eg. Binary = 110110110, Hex =?
so, Binary = 0001 1011 0110
= 1 B 6
= 1B6
Binary(000110110110) = Hex(1B6)
အနည္းငယ္ရွင္းရမရ္ဆိုရင္ေတာ... Binary ကေန Hexadecimal ေျပာင္းမွာျဖစ္တဲ့အတြက္ Binary Number ကို Right to Left ေလးလံုးစီ အရင္ျဖတ္ယူပါ့မရ္။ ရလာတဲ့ ေလးလံုးတြဲ Binary Number ကိုမွ Decimal အျဖစ္ ေျပာင္းလဲမရ္။ ရလာတဲ့ Decimal ကို Hexadecimal ေျပာင္းလဲတဲ့အခါမွာ 10 to 15 ကို A to F အျဖစ္ ေျပာင္းလဲယူပါ့မရ္။ ၿပီးရင္ေတာ့ ၄င္း ေလးလံုး Group အလိုက္ ရရွိလာတဲ့ Hexadecimal ေတြကိုစုစည္း ေဖာ္ျပျခင္းလိုက္ျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Hexadecimal Number တစ္ခုကို ရရွိမွာျဖစ္ပါတရ္။ နားလည္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်။ အခက္အခဲရွိတရ္ ဆိုရင္ေတာ့ က်ေနာ္ http://programmingknowledge.blogspot.com/2014/07/5-number-system-conversions-from-binary.html Page မွာ ပံုနဲ႔တကြ ရွင္းျပထားတာရွိပါတရ္ဗ်။
ကဲ... အခုဆိုရင္ က်ေနာ္တို႔ Logic အေတြးကိုလည္း နားလည္သြားၿပီဆိုေတာ့ Coding Flow ေလးကို ဆက္ေလ့လာၾကည့္ၾကမရ္။
- ပထမဦးဆံုး Binary Number ကို 10000 နဲ႔ စားပါ့မရ္( Binary Number ရဲ႕ ေနာက္ဆံုး(4)လံုးကို ျဖတ္ယူခ်င္လို႔ပါ)။
- ရလာတဲ့ စားၾကြင္းကို loop ပတ္ၿပီး က်ေနာ္တို႔ ႀကိဳတင္သတ္မွတ္ထားတဲ့ Binary array နဲ႔ တိုက္ဆိုင္စစ္ေဆးၿပီး ရရွိလာတဲ့ Index Number ကိုဆြဲထုတ္ပါတရ္။
- ၄င္း ဆြဲထုတ္ယူလာတဲ့ if( ) statement နဲ႔ စစ္ထုတ္ၿပီး formula ကိုျဖတ္ခိုင္းပါတရ္။ ရလာတဲ့ တန္ဖိုးကို char type ေျပာင္းလဲယူပါ့မရ္။ ရလာတဲ့ Char တန္ဖိုးဟာ က်ေနာ္တို႔ first loop ရဲ႕ Hexadecimal Number ျဖစ္ပါတရ္။
- ေနာက္ဆံုးမွာေတာ့ Binary Number ကို 10000 နဲ႔စားၿပီး စားလဒ္ကို သုညနဲ႔ မညီမခ်င္း loop ပတ္ စစ္ထုတ္ေနမွာျဖစ္ပါတရ္။
- ေနာက္ဆံုးမွာေတာ့ loop တခါပတ္တိုင္းရရွိလာတဲ့ char တန္းဖိုးေတြကို စုစည္းေရးသားေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Hexadecimal တန္ဖိုးကိုရရွိမွာျဖစ္ပါတရ္ဗ်ာ။
ဒီ Conversion ေလးရဲ႕ GUI ကိုေတာ့ ေအာက္ပါအတိုင္း ခ်ထားပါတရ္ဗ်။ မိတ္ေဆြတို႔အေနနဲ႔ ႀကိဳက္ႏွစ္သတ္ရာ ပံုစံ Tool ေတြနဲ႔ ဖန္တီးယူႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;
namespace NumberTypeConverter
{
public partial class BinaryConversion : Form
{
public BinaryConversion()
{
InitializeComponent();
}
public string BinaryToHexadecimal(int Bi)
{
int[] HexConstant = { 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111 };
int remainder, count = 0;
char[] arr = new char[32];
while (Bi != 0)
{
remainder = Bi % 10000;
for (int i = 0; i <= HexConstant.Length - 1; i++)
{
if (HexConstant[i] == remainder)
{
if (i > 9 && i < 16)
{
/* A-F character constant */
arr[count++] = (char)((i - 10) + 'A');
}
else
{
/* 0-9 integer constant */
arr[count++] = (char)(i + '0');
}
}
}
Bi /= 10000;
}
//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)
{
txtHexadecimal.Text = BinaryToHexadecimal(int.Parse(txtBinary.Text));
}
private void btnReset_Click(object sender, EventArgs e)
{
txtBinary.Clear();
txtHexadecimal.Clear();
txtBinary.Focus();
}
}
}
အေသးစိတ္နားလည္ႏိုင္ဖို႔အတြက္ က်ေနာ္ Trace လုိက္ျပပါ့မရ္။
ဒီေလာက္ဆိုရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ Getting 'char' method ေလးကို အသံုးျပဳၿပီး Binary Number ကေနၿပီး Hexadecimal Number အျဖစ္ ေျပာင္းလဲႏိုင္ၿပီလို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။
Binary = 00011011, Hex=?
Loop1 => (00011011 != 0) => true
Remainder = 00011011 % 10000 = 1011
For(loop(11)== 1011) => true
arr[0] = (char)((11 - 10) + 'A') = 1 + 65 = 66(B)
Binary = 00011011 / 10000 = 1
Loop2 => (1 != 0) => true
Remainder = 1 % 10000 = 1
For(loop(1)==1) => true
arr[1] = (char)(1+ '0') = 1+48 =49(1)
Binary = 1 / 10000 = 0
Loop3 => (0 != 0) => false
arr[] = B1
so, output = 1B
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ 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 ေလးကို ဆက္ေလ့လာၾကည့္ၾကမရ္။
- ပထမဦးဆံုး Binary Number ကို 1000 နဲ႔ စားပါ့မရ္( Binary Number ရဲ႕ ေနာက္ဆံုး(3)လံုးကို ျဖတ္ယူခ်င္လို႔ပါ)။
- ရလာတဲ့ စားၾကြင္းကို loop ပတ္ၿပီး က်ေနာ္တို႔ ႀကိဳတင္သတ္မွတ္ထားတဲ့ Binary array နဲ႔ တိုက္ဆိုင္စစ္ေဆးၿပီး ရရွိလာတဲ့ Index Number ကိုဆြဲထုတ္ပါတရ္။
- ၄င္း ဆြဲထုတ္ယူလာတဲ့ Index Number + ‘0’ ဆိုတဲ့ formual ကိုျဖတ္ၿပီး ရလာတဲ့ တန္ဖိုးကို char type ေျပာင္းလဲယူပါ့မရ္။ ရလာတဲ့ Char တန္ဖိုးဟာ က်ေနာ္တို႔ first loop ရဲ႕ Octal Number ျဖစ္ပါတရ္။
- ေနာက္ဆံုးမွာေတာ့ Binary Number ကို 1000 နဲ႔စားၿပီး စားလဒ္ကို သုညနဲ႔ မညီမခ်င္း loop ပတ္ စစ္ထုတ္ေနမွာျဖစ္ပါတရ္။
- ေနာက္ဆံုးမွာေတာ့ 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 လုိက္ျပပါ့မရ္။
ဒီေလာက္ဆိုရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ Getting 'char' method ေလးကို အသံုးျပဳၿပီး Binary Number ကေနၿပီး Octal Number အျဖစ္ ေျပာင္းလဲႏိုင္ၿပီလို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။
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
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Binary Number တစ္ခုကို Octal Number အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Logic ပိုင္း ေထြေထြထူးထူး မရွိပါဘူး။ Binary Number ကို Octal Number အျဖစ္သို႔ တိုက္ရိုက္ မေျပာင္းလဲဘဲ မိတ္ေဆြတို႔ နားလည္လြရ္သြားေအာင္ က်ေနာ္တို႔ ေရွ႕သင္ခန္းစာေတြမွာ ေလ့လာခဲ့ၿပီးျဖစ္တဲ့ function ႏွစ္ခုကို ေပါင္းစီးၿပီး Octal Number အျဖစ္ ဆြဲထုတ္ပံုေလးကို ေဆြးေႏြးေပးသြားမွာျဖစ္ပါတရ္။ Coding Flow ေလးကို အနည္းငရ္ ေျပာရမရ္ဆိုရင္ေတာ့....
- ပထမဦးဆံုး Binary Number ကို BinaryToDecimal( ) ဆိုတဲ့ function ကိုျဖတ္ၿပီး Decimal Number တစ္ခုကို အရင္ဆြဲထုတ္မရ္။
- ေနာက္ဆံုးမွာေတာ့ ၄င္း ရရွိလာေသာ Decimal Number ကို DecToOctal( ) function ကို ထပ္ျဖတ္ေစၿပီး Octal Number တစ္ခုကို ရယူလိုက္မွာပဲျဖစ္ပါတရ္ဗ်ာ။
Function ႏွစ္ခုစလံုးဟာ ေရွ႕သင္ခန္းစာေတြမွာ ေလ့လာခဲ့ၿပီးသားျဖစ္လို႔ မိတ္ေဆြတို႔အေနနဲ႔ အခက္အခဲမရွိ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ေမွ်ာ္လင့္ပါတရ္ဗ်ာ။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္းခ်ထားပါတရ္။ မိတ္ေဆြတို႔အေနနဲ႔ေတာ့ မိမိႀကိဳက္ႏွစ္သက္ရာ ပံုစံနဲ႔ ျပဳလုပ္ႏိုင္ပါတရ္ဗ်ာ။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
အနည္းငယ္ရွင္းရမရ္ဆိုရင္ျဖင့္... က်ေနာ္တို႔ Binary Number အျဖစ္ 110110 ဆိုတာကို ရိုက္ထည့္လိုက္ပါမရ္။ ပထမ BinaryToDecimal( ) function ကိုျဖတ္ၿပီးတဲ့အခ်ိန္မွာေတာ့ 54 ဆိုတဲ့ Decimal Number တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။ ၄င္းကိုမွ DecToOctal( ) function ကိုထက္ျဖတ္လိုက္တဲ့အခါမွာေတာ့ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Octal Number ျဖစ္တဲ့ 66 ဆိုတဲ့ Result တစ္ခုကို ရရွိခဲ့တာပဲျဖစ္ပါတရ္ဗ်ာ။ Function ႏွစ္ခုစလံုးက ေလ့လာခဲ့သားေတြျဖစ္လို႔ က်ေနာ္အေသးစိတ္မရွင္းျပေတာ့ပါဘူး။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။
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=0, Quotient= Bi;
while (Quotient != 0)
{
remainder = Quotient % 10;
Dec += (int)(remainder * Math.Pow(2, power));
Quotient /= 10;
++power;
}
return Dec;
}
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)
{
int Dec = BinaryToDecimal(int.Parse(txtBinary.Text));
txtOctal.Text = DecToOctal(Dec).ToString();
}
private void btnReset_Click(object sender, EventArgs e)
{
txtBinary.Clear();
txtOctal.Clear();
txtBinary.Focus();
}
}
}
