หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 1 1 0 1 3 7

7 ธันวาคม พ.ศ.2549
33 Users On-Line.
Visitors - Page views
 8 4 0 3 3 1 4
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

โค้ดการแปลงเลขฐาน 10 เป็นเลขฐาน 2 ด้วยภาษา C ... เรื่องกล้วยๆ

Category »  จับฉ่ายคอมพิวเตอร์
โดย : Webmaster เมื่อ 24/11/2552   เวลา: 02:10
(อ่าน : 57766) 
เบื่อครับเบื่อ ... เปิดไปอ่านตามเว็บบอร์ดแบบตลาดๆทั่วไป มักชอบถกเถียงกันซ่ะเหลือเกิน กับหัวข้อที่ว่าโปรแกรมภาษาตัวนั้นมันดีกว่าตัวนี้ บ้างก็ว่ามันเป็น OOP 100% น่ะ ไม่ใช่เทคโนโลยีเทียมๆอย่างที่คุณใช้ ว่าไปนั่น ... ผมก็อยากรู้เหมือนกันว่าเวลาไป Present ให้ลูกค้าฟังเขาจะรู้เรื่องมั้ยล่ะเนี่ย 55555+ ... บอกได้เลยว่าแทบจะไม่รู้เรื่องหรอก แต่ต้องพยักหน้าหงึกๆตาม อึมๆๆๆ ดีๆๆๆ ... เพราะกล้ัวเสียฟอร์มล่ะซ่ะมากกว่า เอิ๊กๆๆๆๆ ... ภาษาโปรแกรมมันก็ดีหมดทุกตัว นั่นแหละครับ แต่ "เรามีสติปัญญามากน้อยแค่ไหนที่จะควบคุมมันได้ต่างหากล่ะ" ... บางทีก็ต้องสัมผัสมันมาหลายๆตัวก่อน แล้วค่อยมาสรุป เพื่อเลือกให้มันเหมาะสมกับตัวเรา หรือ งานที่ทำอยู่ ... เรื่องแบบนี้ไม่มีใครบอกได้หรอกครับ นอกจากตัวของเราเอง ...

เอาล่ะครับ ... พล่ามมาพอประมาณ ในบทความนี้ผมจะไม่กล่าวถึงทฤษฎีมาก เพราะได้บรรยายไปแล้ว (อ่าน 3 หัวข้อหลักทางด้านล่างน่ะครับ) ... ผมชี้ชัดๆให้เห็นเลยว่า การวิเคราะห์ข้อมูล และ การออกแบบ เป็นเรื่องที่สำคัญอย่างยิ่งต่อการเขียนโปรแกรม บ่อยครั้งไปที่ต้องใช้เวลาในการออกแบบ นานกว่าการเขียนโปรแกรมซ่ะอีก ... คราวนี้ผมใช้ภาษา C (ตามคำขอ ... เพราะต้องตอบโจทย์ส่งครู ... 55555+) เพื่อนำเสนอให้เห็นเลยว่าแนวคิด หรือ การออกแบบ ก่อนที่จะลงโค้ดนั้น มันไม่ได้เกี่ยวข้องกับโปรแกรมภาษาใดๆทั้งสิ้น ... เหมือนเดิมทุกประการ
ข้อมูลเพิ่มเติม
วิธีการคิดกับตัวเลขจำนวนเต็ม
โค้ดและแนวคิดการแปลงเลขฐาน 10 เป็นฐาน 2 เรื่องหมูๆ ... ไม่บอกก็แทบจะไม่รู้กันเลย ... ต้องอ่านกระบวนการคิดที่นี่ก่อนด้วยน่ะครับ เดี๋ยวจะไม่รู้เรื่องเอา
การแปลงเลขฐาน 10 เป็นเลขฐาน 16 และ เลขฐาน 2 เป็นเลขฐาน 16 (แนวคิดของช่าง)
เรื่องของโปรแกรมย่อย (อีกที) ... Sub Program, Routine, Procedure หรือ Function
ตรวจสอบการกดแป้นคีย์บอร์ดเพื่อให้รับค่าเฉพาะตัวเลข และ จุดทศนิยมเท่านั้น (VB6)
ตรวจสอบการกดแป้นคีย์บอร์ดเพื่อให้รับค่าเฉพาะตัวเลข (VB.Net)
มาดูโค้ดกันเถอะ ...

#include <stdio.h>

main(void)
{
int i, j;
long dec;  /* ให้รับค่าอินพุทแบบ Long Integer - เลขจำนวนเต็มแบบยาว */
int bit[32];  /* จองพื้นที่ในการเก็บข้อมูลเลขฐาน 2 ลงใน Array */

    clrscr();  /* เคลียร์หน้าจอ */
    printf("Decimal Number : ");  /* แจ้งผู้ใช้เพื่อเตรียมป้อนค่าเลขฐาน 10 */
    scanf("%ld", &dec);  /* ต้องใช้ ld เพราะ Input มันเป็นแบบ Long Integer */
    i = 0;  /* กำหนดค่าเริ่มต้นของ Array */
    /* ทำตามที่ได้ออกแบบโปรแกรมเอาไว้ ... ยังไงยังงั้นเลย 55555+ */
    do {
        bit[i++] = dec % 2;  /* การหารเอาเศษ เพื่อให้เป็นคำตอบ */

        /* การหารทั่วไป แต่ตัวแปร dec ของภาษา C มันเป็น Integer หรือ เลขจำนวนเต็ม */
        /* ดังนั้นมันจึงตัดเศษ (หรือทศนิยม) ทิ้งไปโดยอัตโนมัติ */
        dec = dec / 2;

    } while (dec > 0);  /* เงื่อนไขที่ทำจนกระทั่ง dec = 0 ก็ออกจากวังวนเงื่อนไข */

    /* การแสดงผลของการแปลงเลขฐาน 10 เป็นเลขฐาน 2*/
    /* j = i - 1 และให้ j ลดค่าลงทีละ 1 ... ก็คืออ่านข้อมูลถอยหลังกลับเท่านั้นเองครับ */
    /* เพราะตัวแปรแบบ Array ในภาษา C มันเก็บข้อมูลจากซ้ายไปขวา */
    /* ทำให้ LSB มันไปอยู่ทางซ้าย ส่วน MSB มันไปอยู่ทางขวา */
    for(j = i - 1; j >= 0; j--)
        printf("%d", bit[j]);

printf("\n");
getch();

}
Conclusion:
ก็คงจะได้เห็นกันอย่างชัดๆจะๆแจ้งๆกันแล้วว่า เรื่องราวของ การวิเคราะห์ข้อมูล และ การออกแบบ นั้นมันเป็นสิ่งที่สำคัญเพียงไร สิ่งหนึ่งที่อยากจะขอฝากไปยังเพื่อนพ้องน้องพี่ทั้งหลายด้วยว่า "ชนิดหรือประเภทของข้อมูล" ก็เป็นสิ่งที่สำคัญที่ทุกๆโปรแกรมภาษาจะต้องนำมาเกี่ยวข้อง เราควรจะต้องศึกษากันให้รู้อย่างถ่องแท้ อย่าเอาแต่เพียงท่องจำได้ขึ้นใจ เพียงเพื่อต้องการทำข้อสอบให้ได้อย่างเดียวครับ ... พี่น้อง

จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560