สวัสดีครับ น้องๆ บทความนี้ ถือว่า 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
ตัวอย่างการ Run ครั้งที่ 2
ทดสอบด้วย 128 จะได้ 10000000
เป็นยังไงบ้างครับ ข้อนี้จัดว่า Advance พอควรเลยครับ เพราะใช้ครบจริงๆ ทั้งการคำนวณ Loop และ Array ค่อยๆ อ่าน ค่อยๆ ไล่โปรแกรม แล้วน้องๆ จะเข้าใจแน่นอนครับ
หากใครมีข้อสงสัย เข้ามาถามได้ที่ Fanpage ของ TUTORTONG สอนเขียนโปรแกรมได้เลยนะครับ มาเริ่มต้นเขียนโปรแกรมไปกับพวกเราที่ TUTORTONG สอนเขียนโปรแกรม ครับ ^^