C++ Programming : ตัวอย่างโจทย์ แปลงเลขฐาน 10 เป็นเลขฐาน 2 (Decimal to Binary)

ทิป & เทคนิค #134
เขียนโดย :
มีผู้อ่าน : 14,409 คน วันนี้ : 2 คน

สวัสดีครับ น้องๆ บทความนี้ ถือว่า Advance กันพอสมควรเลยทีเดียวกับการเขียน ภาษา C++ แปลงเลขฐาน 10 เป็นเลขฐาน 2 ตัวอย่างนี้จัดเต็มพื้นฐาน ทั้งการคำนวณด้วย หาร (/) และ Mod (%) มีการใช้ While Loop และ For Loop มีการใช้ Array อีกด้วยเรียกได้ว่าครบจริงๆ เพราะฉะนั้นน้องๆ ต้องทบทวนพื้นฐานให้แน่นนะ ตัวอย่างนี้ไม่ได้ทำการแปลงค่านะครับ เป็นการแปลงออกมาเพื่อการแสดงผลเท่านั้น

 

โจทย์

จงเขียนโปรแกรมรับเลขฐาน 10 จากผู้ใช้ และทำการแสดงผลออกมาเป็นเลขฐาน 2 บนจอภาพ

 

หลักการและแนวคิด

แปลงเลขฐาน 10 เป็น ฐาน 2 ได้ยังไง ?

การแปลงเลขฐาน 10 เป็น ฐาน 2 ในข้อนี้ จะเป็นการแปลงเพื่อแสดงผลเท่านั้น ไม่สามารถนำไปใช้ คำนวณได้นะครับ โดยเราจะใช้วิธีคิดแบบนี้ครับ 

ขั้นที่ 1 ฐาน 10 Mod 2 เพื่อให้ได้ เลขฐานสอง 1 หลัก 
ขั้นที่ 2 แสดงผลหรือเก็บเลขฐานสองหลักนั้น
ขั้นที่ 3 ฐาน 10 หาร 2 เพื่อตัดหลักที่หาได้ออกไปจากจำนวนทั้งหมด
ขั้นที่ 4 กลับไป 1 เรื่อยๆ จนกว่า ฐาน 10 จะเป็น 0

ตัวอย่าง

ฐาน 10 : 10 จะได้ฐาน 2 คือ 1010 (ในตัวอย่างนี้จะเก็บเป็น Array เพราะฉะนั้นจะเก็บถอยหลังเป็น 0101)

ขั้นที่ 1 : 10 Mod 2 จะได้ 0
ขั้นที่ 2 : เก็บไว้ 0 (ในตัวอย่างนี้เก็บใน Array 0)
ขั้นที่ 3 : 10 / 2 จะได้ 5
ขั้นที่ 4 : 5 ยังไม่ใช่ 0 
====================
ขั้นที่ 1 : 5 Mod 2 จะได้ 1
ขั้นที่ 2 : เก็บไว้ 10 (ในตัวอย่างนี้เก็บใน Array 01)
ขั้นที่ 3 : 5 / 2 จะได้ 2
ขั้นที่ 4 : 2 ยังไม่ใช่ 0 
====================
ขั้นที่ 1 : 2 Mod 2 จะได้ 0
ขั้นที่ 2 : เก็บไว้ 010 (ในตัวอย่างนี้เก็บใน Array 010)
ขั้นที่ 3 : 2 / 2 จะได้ 1
ขั้นที่ 4 : 1 ยังไม่ใช่ 0 
​​====================
ขั้นที่ 1 : 1 Mod 2 จะได้ 1
ขั้นที่ 2 : เก็บไว้ 1010 (ในตัวอย่างนี้เก็บใน Array 0101)
ขั้นที่ 3 : 1 / 2 จะได้ 0
ขั้นที่ 4 : 0 ใช่ 0 จบการแปลง

 

Source Code

#include <iostream>
using namespace std;

int main()
{
     int dec_num,bin_digit,i=0;
     int array_bin_num[128];
     
     cout << "Enter Decimal Number : ";
     cin>>dec_num;
     
     while(dec_num != 0)
     {
          bin_digit = dec_num % 2;
          array_bin_num[i] = bin_digit;
          dec_num /= 2;
          i++;
     }
     
     cout << "Binary : ";
     for(int j=i-1;j>=0;j--)
     {
          cout<<array_bin_num[j];
     }

     cout << endl << endl;
     system("pause");
 
}

 

อธิบาย Source Code

#include <iostream>
using namespace std;

int main()
{
      //ประกาศตัวแปร
      // dec_num จำนวนฐาน 10 , bin_digit เลขฐานสอง 1 หลัก
      // i ตัวนับไว้วนรอบ , array_bin_num เก็บจำนวนฐานสอง แต่ละหลักอยู่ใน Array แต่ละช่อง

     int dec_num,bin_digit,i=0;
     int array_bin_num[128];
     
     cout << "Enter Decimal Number : "; //แสดงผล
     cin>>dec_num; //รับค่า เลขฐาน 10 ใส่ในตัวแปร dec_num
     
      //ตราบเท่าที่  dec_num ไม่เท่ากับ 0
     while(dec_num != 0)
     {
          //นำเลขฐาน 10 มา Mod 2 เพื่อเอาเศษ 
          // ซึ่งผลของ Mod คือเลขฐาน 2 จำนวน 1 หลัก
          // มาเก็บใส่ในตัวแปร bin_digit 

          bin_digit = dec_num % 2;
          // นำเลขฐาน 2 ใส่ในตัวแปร Array ช่องที่ i 
          array_bin_num[i] = bin_digit;
          // นำฐาน 10 มาหารสองแบบจำนวนเต็ม
          // แล้วเก็บใส่ dec_num 

          dec_num /= 2;
          // เพิ่มค่า i ขึ้น 1
          i++;
     }
     
     cout << "Binary : "; //แสดงผล
     // วนแสดงผลค่า เลขฐานสองแต่ละหลักใน Array
     for(int j=i-1;j>=0;j--)
     {
            // แสดงค่าเลขฐานสองแต่ละหลัก
            cout<<array_bin_num[j];
     }

     cout << endl << endl;
     system("pause");
 
}

 

ตัวอย่างการ Run โปรแกรม

ตัวอย่างการ Run ครั้งที่ 1

ทดสอบด้วย 10 จะได้ 1010

C++ Programming : ตัวอย่างโจทย์ แปลงเลขฐาน 10 เป็นเลขฐาน 2 (Decimal to Binary)

 

ตัวอย่างการ Run ครั้งที่ 2

ทดสอบด้วย 128 จะได้ 10000000

C++ Programming : ตัวอย่างโจทย์ แปลงเลขฐาน 10 เป็นเลขฐาน 2 (Decimal to Binary)

 

เป็นยังไงบ้างครับ ข้อนี้จัดว่า Advance พอควรเลยครับ เพราะใช้ครบจริงๆ ทั้งการคำนวณ Loop และ Array ค่อยๆ อ่าน ค่อยๆ ไล่โปรแกรม แล้วน้องๆ จะเข้าใจแน่นอนครับ

หากใครมีข้อสงสัย เข้ามาถามได้ที่ Fanpage ของ TUTORTONG สอนเขียนโปรแกรมได้เลยนะครับ มาเริ่มต้นเขียนโปรแกรมไปกับพวกเราที่ TUTORTONG สอนเขียนโปรแกรม ครับ ^^