မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Octal Number တစ္ခုကို Hexadecimal Number အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Coding ေရးသားတဲ့အခါမွာ Visual Studio က ေထာက္ပံ့ေပးထားတဲ့ Method ေတြကို အသံုးမျပဳပဲ Template Matching and Repeated Divison Method ႏွစ္ခုကို ေပါင္းစပ္ၿပီး အလြယ္ကူဆံုးနည္းလမ္းတစ္ခုနဲ႔ ကိုယ္ပိုင္ Method တစ္ခု တည္ေဆာက္ကာ ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။ Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကိုၾကည့္ၾကည့္မရ္ဗ်ာ။
- ေျပာင္းလဲတဲ့အခါမွာ Octal to Binary အျဖစ္ အရင္ေျပာင္းလဲမွာျဖစ္ၿပီး ၄င္း ရရွိလာတဲ့ Binary Number ကိုမွ Hexadecimal Number အျဖစ္ ေျပာင္းလဲယူမွာျဖစ္ပါတရ္။
- Octal ကို Binary ေျပာင္းတဲ့အခါမွာေတာ့ 10 နဲ႔စားကာ ကိန္းစဥ္တန္းရဲဲ႕ေနာက္ဆံုးတစ္လံုးကိုျဖတ္ယူပါတရ္။ ၄င္းရရွိလာတဲ့ Number ကိုမွ Template Matching Method ကိုအသံုးျပဳၿပီး က်ေနာ္တို႔ ႀကိဳတင္သတ္မွတ္ထားတဲ့ OctalArray နဲ႔ တိုက္ဆိုင္စစ္ေဆးပါတရ္။ ရရွိလာတဲ့ တန္ဖိုးေတြကိုမွ Loop -- False ျဖစ္တဲ့အထိ စုစည္းယူလိုက္ၿပီး Binary Number အျဖစ္ ဖန္တီးယူလိုက္တာပါ။
- Binary ကို Hexadecimal ေျပာင္းတဲ့အခါမွာေတာ့ (၄)လံုးအတြဲခြဲထုတ္မွာျဖစ္လို႔ 10000 နဲ႔ စားပါတရ္။ ရလာတဲ့ Binary (၄)လံုးတြဲေတြကိုမွ if() statement ကိုျဖတ္ၿပီး Template Matching Method သေဘာနဲ႔ပဲ တိုက္ဆိုင္စစ္ေဆးပါတရ္။ ေနာက္ဆံုးမွာေတာ့ loop -- False ျဖစ္တဲ့အထိ ပါတ္ၿပီး loop အႀကိမ္တိုင္းမွာ ရလာတဲ့ Hex value ေတြကို စုစည္းေဖာ္ျပေပးျခင္းျဖင့္ က်ေနာ္တို႔ လိုခ်င္ေနတဲ့ Hexadecimal Number တစ္ခုကို ဖန္တီးယူလိုက္တာပဲျဖစ္ပါတရ္ဗ်ာ။
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ Logic အနည္းငယ္စိမ္းေနမရ္ဆိုရင္ေတာ့..... http://programmingknowledge.blogspot.com/2014/07/7-number-system-conversions-from-octal.html Page မွာ ပံုနဲ႔တကြ ရွင္းထားတာေလးရွိပါတရ္။ ေလ့လာၾကည့္ႏိုင္ပါတရ္ဗ်ာ။ အခုေတာ့ Coding အပိုင္းေလး ဆက္ၾကမရ္။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
ပိုၿပီး နားလည္သြားေအာင္ Coding အျပည့္အစံုေလးကို ေအာက္မွာ ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
ရွင္းလင္းခ်က္နဲ႔ Screen Shoot ေလးေတြကို ၾကည့္လိုက္ရင္ေတာ့ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြတို႔အေနနဲ႔ေတာ့ Trace လိုက္ၿပီး Coding Flow ေလးကို ေလ့လာၾကည့္ေစခ်င္ပါတရ္။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။
using System; using System.Windows.Forms; namespace NumberTypeConverter { public partial class Octal_Conversion : Form { public Octal_Conversion() { InitializeComponent(); } public string OctalToHexadecimal(int Oct) { //Octal to Binary string[] OctalConstant = { "000", "001", "010", "011", "100", "101", "110", "111" }; int OctIndex, quotient = Oct; string binary = null, Hex = null, result=null; while (quotient != 0) { OctIndex = quotient % 10; if (OctIndex >= 8) { MessageBox.Show("It's not Octal Number"); goto End; } else { binary = OctalConstant[OctIndex] + "" + binary; quotient /= 10; } } //Binary To Hex long fourDigit, bi = long.Parse(binary); while (bi != 0) { fourDigit = bi % 10000; if (fourDigit == 0) Hex = "0"; if (fourDigit == 1) Hex = "1"; if (fourDigit == 10) Hex = "2"; if (fourDigit == 11) Hex = "3"; if (fourDigit == 100) Hex = "4"; if (fourDigit == 101) Hex = "5"; if (fourDigit == 110) Hex = "6"; if (fourDigit == 111) Hex = "7"; if (fourDigit == 1000) Hex = "8"; if (fourDigit == 1001) Hex = "9"; if (fourDigit == 1010) Hex = "A"; if (fourDigit == 1011) Hex = "B"; if (fourDigit == 1100) Hex = "C"; if (fourDigit == 1101) Hex = "D"; if (fourDigit == 1110) Hex = "E"; if (fourDigit == 1111) Hex = "F"; result = Hex+""+result; bi /= 10000; } End: return result; } private void btnConvert_Click(object sender, EventArgs e) { if (txtOctal.Text !="") { txtHexadecimal.Text = OctalToHexadecimal(int.Parse(txtOctal.Text)); } txtOctal.Focus(); } private void btnReset_Click(object sender, EventArgs e) { txtOctal.Clear(); txtHexadecimal.Clear(); txtOctal.Focus(); } } }
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Octal Number တစ္ခုကို Binary Number အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Coding ေရးသားတဲ့အခါမွာ Visual Studio က ေထာက္ပံ့ေပးထားတဲ့ Method ေတြကို အသံုးမျပဳပဲ အလြယ္ကူဆံုးနည္းလမ္းတစ္ခုနဲ႔ ကိုယ္ပိုင္ Method တစ္ခု တည္ေဆာက္ၿပီး ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။
- မိတ္ေဆြရိုက္ထည့္လိုက္ေသာ Octal Number ကို 10 နဲ႔ စားၿပီး ေနာက္ဆံုးတစ္လံုးကို ျဖတ္ယူပါ့မရ္။
- ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မညီမခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ 10 နဲ႔ စားေနမရ္။
- ရလာတဲ့ စားၾကြင္းဟာ loop ပါတ္တိုင္း Octal Number ရဲ႕ ေနာက္ဆံုးတစ္လံုးရရွိေနမွာပါ။ ၄င္း Octal Number ကိုမွ Index အျဖစ္သံုးၿပီး က်ေနာ္တို႔ ႀကိဳတင္ ဖန္တီးထားတဲ့ string[] OctalConstant Array ကိုျဖတ္ၿပီး ရရွိလာတဲ့ Value ကို Binary အျဖစ္ Container တစ္ခုထဲ ေခတၱသိမ္းထားလိုက္မွာျဖစ္ပါတရ္။
- ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီသြားတဲ့အခ်ိန္မွာ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ စုစည္းထားတဲ့ Binary Number တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ Logic အနည္းငယ္စိမ္းေနမရ္ဆိုရင္ေတာ့..... http://programmingknowledge.blogspot.com/2014/07/7-number-system-conversions-from-octal.html Page မွာ ပံုနဲ႔တကြ ရွင္းထားတာေလးရွိပါတရ္။ ေလ့လာၾကည့္ႏိုင္ပါတရ္ဗ်ာ။ အခုေတာ့ Coding အပိုင္းေလး ဆက္ၾကမရ္။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
ပိုၿပီး နားလည္သြားေအာင္ Coding အျပည့္အစံုေလးကို ေအာက္မွာ ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
ခက္ခဲတဲ့ Coding ေတြ မရွိလို႔ က်ေနာ္ အေသးစိတ္ မရွင္းျပေတာ့ပါဘူးဗ်ာ။ မိတ္ေဆြတို႔အေနနဲ႔ေတာ့ Coding Flow ေလးကို Trace လိုက္ၿပီး စမ္းၾကည့္ေစခ်င္ပါတရ္။ ဒီေလ့က်င့္ခန္းမွာဆိုရင္ေတာ့ က်ေနာ္ အေျပာင္းအလဲေလးျဖစ္သြားေအာင္ if()statement ေလးနဲ႔ မိတ္ေဆြတို႔ ရိုက္ထည့္လိုက္တဲ့ Number ဟာ Octal Number ျဖစ္လား/မျဖစ္လားဆိုတာကို စစ္ေဆးထားပါတရ္(Octal Number က 0 to 7 ပဲရွိတာကိုဗ်)။ မိတ္ေဆြတို႔အေနနဲ႔ 7 ထက္ႀကီးတဲ့ Number တစ္ခု ရိုက္ထည့္မိၿပီဆိုတာနဲ႔ Error Message တတ္လာၿပီး မွန္ကန္တဲ့ Octal Number ရိုက္ထည့္ႏိုင္ဖို႔ ေျပာပါလိမ့္မရ္။ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ယံုၾကည္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။
using System; using System.Windows.Forms; namespace NumberTypeConverter { public partial class Octal_Conversion : Form { public Octal_Conversion() { InitializeComponent(); } public string OctalToBinary(int Oct) { string[] OctalConstant = { "000", "001", "010", "011", "100", "101", "110", "111" }; int OctIndex, quotient = Oct; string binary = ""; while (quotient != 0) { OctIndex = quotient % 10; if (OctIndex >= 8) { MessageBox.Show("It's not Octal Number"); break; } else { binary = OctalConstant[OctIndex] + " " + binary; quotient /= 10; } } return binary; } private void btnConvert_Click(object sender, EventArgs e) { txtBinary.Text = OctalToBinary(int.Parse(txtOctal.Text)); } private void btnReset_Click(object sender, EventArgs e) { txtOctal.Clear(); txtBinary.Clear(); txtOctal.Focus(); } } }
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ 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(); } } }
မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ 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(); } } }