Create Octal To Decimal Converter in C#

Posted by ေတဇာလင္း Tuesday, 27 September 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Octal Number တစ္ခုကို Decimal Number အျဖစ္ ဘရ္လို ေျပာင္းလဲ ယူႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာ ျဖစ္ပါတရ္။ Coding ေရးသားတဲ့အခါမွာ Visual Studio က ေထာက္ပံ့ေပးထားတဲ့ Method ေတြကို အသံုးမျပဳပဲ Repeated Division Method ကိုအေျခခံၿပီး အလြယ္ကူဆံုးနည္းလမ္းတစ္ခုနဲ႔ ကိုယ္ပိုင္ Method တစ္ခု တည္ေဆာက္ၿပီး ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။
Logic ပိုင္း ေထြေထြထူးထူးမရွိပါဘူး။ သာမာန္အေတြးကိုပဲ ရုပ္လံုးေဖာ္လုိက္တာပါ။ Coding Flow ေလးကို ၾကည့္ၾကည့္မရ္ဗ်ာ။
  1. Decimal ေျပာင္းမွာျဖစ္တဲ့အတြက္ က်ေနာ္တို႔ ေျပာင္းလဲခ်င္တဲ့ Octal ကို 10 နဲ႔စားမရ္။
  2. ရလာတဲ့ စားလဒ္(Quotient)ကို သုညနဲ႔မညီမခ်င္း Loop ပတ္ၿပီး ထပ္ခါတလဲလဲ 10 နဲ႔ စားေနမရ္။
  3. Loop ပတ္တိုင္း Dec += (int)(remainder * Math.Pow(8, power)); ဆိုတဲ့ formula ကိုျဖတ္ၿပီး ရလာတဲ့ Number တစ္ခုကိုေတာ့ container တစ္ခုထဲ ေခတၱထည့္သိမ္းထားမရ္ေပါ့။
  4. ေနာက္ဆံုး စားလဒ္(Quotient)ဟာ သုညနဲ႔ညီသြားတဲ့အခ်ိန္မွာ Loop ကို ရပ္မရ္။ ဒီအခ်ိန္မွာေတာ့ Decimal Number တစ္ခုကို က်ေနာ္တို႔ ရရွိေနပါၿပီ။ နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ Logic အနည္းငယ္စိမ္းေနမရ္ဆိုရင္ေတာ့..... http://programmingknowledge.blogspot.com/2014/07/7-number-system-conversions-from-octal.html Pageမွာ ပံုနဲ႔တကြ ရွင္းထားတာေလးရွိပါတရ္။ ေလ့လာၾကည့္ႏိုင္ပါတရ္ဗ်ာ။ အခုေတာ့ Coding အပိုင္းေလး ဆက္ၾကမရ္။ GUI ကိုေတာ့ က်ေနာ္ ေအာက္က ပံုစံအတိုင္း ပံုေဖာ္ထားပါတရ္။ မိတ္ေဆြတို႔ေတာ့ စိတ္ႀကိဳက္ ပံုေဖာ္ ဖန္တီးႏိုင္ပါတရ္။
Coding ေလးကို ေလ့လာၾကည့္လိုက္ၾကပါအံုးဗ်ာ။
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();
        }        
    }
}   
ခက္ခက္ခဲခဲ ဘာမွ မရွိပါဘူးဗ်ာ။ ေအာက္ပါအေတြးကို ပံုေဖာ္ထားတာပါ။
ပိုၿပီးနားလည္သြားေအာင္ က်ေနာ္ Trace လိုက္ျပပါ့မရ္။
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 = 120
Coding ေလးနဲ႔ ScreenShoot ေလးကို ၾကည့္လိုက္ရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ ရွင္းျပစရာမလိုေလာက္ေအာင္ နားလည္သြားၾကလိမ့္မရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစဗ်ာ။

0 Responses so far.

Post a Comment