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

กระดานข่าวสาร เว็บบอร์ด - www.g2gnet.com
ดาวน์โหลดฟรีโปรแกรม และ Free Souce Code ได้ที่นี่ ...
รู้จักกับเว็บมาสเตอร์ - www.g2gnet.com
::: โปรแกรมมาใหม่ :::
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ (iPayPost Software)
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ
โปรแกรมจุดรับชำระค่าบริการ (iPayLite Software)
โปรแกรมจุดรับชำระค่าบริการ
::: BarcodeSoft :::
::: Printing :::
โปรแกรมพิมพ์รหัสบาร์โค้ด - BarcodeSoft Printing
โปรแกรมรหัสไปรษณีย์ทั่วไทย
::: G2GNet PostCode :::
!!!!! แจกฟรี !!!!!
ดาวน์โหลดโปรแกรมรหัสไปรษณีย์ทั่วไทย G2GNet PostCode Thailand
Visitors - Session views
 3 5 3 2 4 9 9

7 ธันวาคม พ.ศ.2549
100 Users On-Line.
Visitors - Page views
 6 2 1 0 2 1 7
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  
    ดาวน์โหลด และ แนะนำวิธีการติดตั้ง Active Report Professional 2.0
    แจกฟรี Source Code โปรแกรมขายสินค้า - Point Of Sale (โดย เว็บมาสเตอร์-ทองก้อน
    แจกฟรี Source Code การพิมพ์ใบกำกับภาษี - Active Report 2.0 (โดย ctx-9000@hotmail.com)
    SourceCode การดึงข้อมูลมาแสดงผลลงใน SharpGrid (โดย dos_network@hotmail.com)
    แจกฟรี Source Code VB6+Access โปรแกรมฐานข้อมูลครุภัณฑ์
    แจกโปรแกรมดูทีวี ดูหนัง ฟังวิทยุ ฟังเพลงออนไลน์ - G2GnetTV On Line ... ฟรีๆๆๆๆ
          ข้อมูลสถานี/รายการ (XML)  ข้อมูลสถานี/รายการ (HTML)
โปรแกรมระบบบัญชี Profit - Account

การแปลงเลขฐาน 10 เป็นเลขฐาน 16 และ เลขฐาน 2 เป็นเลขฐาน 16 (แนวคิดของช่าง)

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 23/11/2552   เวลา: 02:52
(อ่าน : 95333)/(ตอบ : 40)  ข้อคิดเห็น   |   พิมพ์   |  
อารัมภบท ... นับแต่เด็กมา ผมเป็นคนค่อนข้างที่จะเรียนเก่ง พร้อมทั้งมีกิจกรรม คือ การเล่นดนตรี (ว่าง่ายๆไม่ใช่เด็กเรียนอย่างเดียวล่ะครับ) แน่นอนว่าปลายทาง คือ การเอ็นสะท้าน ... จวบจนมาถึงตอนเตรียมขึ้น ม.5 ผมถึงได้เปลี่ยนแปลงเส้นทางครั้งสำคัญในชีวิต ด้วยการ "ถอยหลัง" มา 1 ปี เพื่อย้ายมาเรียนสายอาชีพ ในสาขาอิเล็กทรอนิกส์ ... ผมไม่เคยนึกเสียใจเลยสักครั้ง ในการตัดสินใจย้ายมาเรียนสายช่างของผม ... เพราะความรู้ที่ร่ำเรียนมา มันได้ถูกนำมาใช้ทั้งในอดีต และ ปัจจุบัน ... แม้ว่าทัศนคติ และ ค่านิยมของผู้คนโดยส่วนใหญ่ มักจะมองว่าคนจบสายช่างมา ภูมิปัญญามันน้อย ไม่เก่งทฤษฎี เพราะอยู่ในสายปฏิบัติ ใช้กำลังแรงงานเป็นหลัก มากกว่าใช้สมอง แต่ ณ วันนี้ ผมแค่เศษเสี้ยวหนึ่งของคนที่จบช่างมา ก็ได้พิสูจน์ให้เห็น โดยที่แทบจะไม่ต้องมาบรรยายอะไรกันมากมายนัก ... บทความชุดนี้จึงขอนำเสนอแนวคิด ทักษะการปฏิบัติ เพื่อนำมาใช้งาน (ได้จริง) ... เนื่องจากสาขาอิเล็กทรอนิกส์ต้องเรียนวิชาแกนหลักอย่างเช่น วงจรดิจิตอล (จริง หรือ เท็จ/ตรรกศาสตร์) วิชาไมโครโปรเซสเซอร์ (เจาะลึกเข้าสู่การทำงานของคอมพิวเตอร์) ทั้ง 2 วิชานี้ ก็ล้วนแล้วแต่นำทางให้ผมสามารถเขียนโปรแกรมภาษา Assembly และ C ได้อย่างคล่องแคล่วในเวลาต่อมา ...

การแปลงเลขฐาน 10 เป็นเลขฐาน 16 (Visual Basic 6)
  • Dim X as String
  • X = Hex$(127)
    จบแล้ว ... 55555+ ...
หากกรณีที่ตัวแปลภาษา มันไม่มีคำสั่ง (หรือฟังค์ชั่น) แล้วจะทำอย่างไรดีล่ะ ... ทำไม่ได้ครับ (ค่ะ) ... ก็กดเครื่องเลขเอาซิครับ ใน Windows มันมีมาให้ดูอยู่แล้ว (เฮ้อ ... โง่จังโว้ย คนถามเนี่ย) ... 55555+ ... ใครตอบมาแบบนี้ ก็อย่าอ่านบทความของผมต่อไปเลยน่ะครับ ... การแก้ปัญหาก็มีแนวคิดแบบการแปลงเลขฐาน 10 ไปเป็นเลขฐาน 2 ยังไงก็ยังงั้นเลยครับ ... พี่น้อง ... โดยคิดแบบการหารสั้น ... (คลิ๊กที่นี่ ... เพื่ออ่านรายละเอียด)
  • ให้ฐาน 10 เป็นตัวตั้ง แล้วใช้เลขฐานที่ต้องการเป็นตัวหาร (เช่น 2 หรือ 16)
      การหารมี 2 แบบ
    • การหารเอาเศษ (MOD) ผลลัพธ์จะออกมาเป็นคำตอบ
    • การหารตัดเศษ (Div) ไปเรื่อยๆ จนกว่าจะทำให้ผลลัพธ์สุดท้ายเป็น 0

เลขฐานสิบ

เลขฐานสอง

เลขฐานสิบหก

0

0000

0

1

0001

1

2

0010

2

3

0011

3

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

เนื่องจากตั้งแต่ค่า 10 - 15 (ฐาน 16) มันมีตัวเลข (Digit) ขนาด 2 หลัก จึงไม่เหมาะสมในการใช้งาน ... เขา (ผู้ที่คิด) จึงใช้ตัวอักขระ (Character) A - F แทนจำนวนดังกล่าวที่ว่ามาครับ ... พี่น้อง
    เลขฐานมหัศจรรย์ ... เลขฐานใดๆจะมีค่าต่ำสุด = 0 และจะมีค่าสูงสุดเท่ากับฐานนั้นๆ - 1 เสมอ เช่น
  • เลขฐาน 10 จะมีค่า 9 เป็นค่าสูงสุด (10 - 1 = 9)
  • เลขฐาน 2 จะมีค่า 1 เป็นค่าสูงสุด (2 - 1 = 1)
  • เลขฐาน 8 จะมีค่า 7 เป็นค่าสูงสุด (8 - 1 = 7)
  • เลขฐาน 16 จะมีค่า 15 เป็นค่าสูงสุด (16 - 1 = 15)
    เกี่ยวข้องอะไร ก็คิดๆเองกันบ้างเถอะน่ะครับ ... 55555+
ฟังค์ชั่น หรือ โปรแกรมย่อยในการแปลงเลขฐาน 10 เป็นฐาน 16 ด้วยวิธีการหารสั้น

' ==============================================================
Function Decimal2HexaDecimal(Dec As Long) As String
' ==============================================================
Dim Hex As String
    ' เงื่อนไขสุดท้าย ทำจนกว่า Dec = 0 ก็ให้จบกระบวนการ (True) ออกจากวงรอบ Do ... While
    Do While (Dec > 0)
        ' Mod ด้วยอะไร ก็จะได้ค่าสูงสุด (ที่เป็นไปได้) ของตัว Mod ลบด้วย 1 เสมอ
        ' ดังนั้นเมื่อเอา 16 (ฐาน 10) มา Mod ทำให้ค่าสูงสุดที่ได้ (16 - 1) = 15 นั่นเอง
        ' เงื่อนไขในการดักค่าตั้งแต่ 10 แต่ไม่เกิน 15 เพราะ 10 แทนค่าด้วย A (ฐาน 16)
        ' 11 = B (ฐาน 16) และไปเรื่อยๆจน 15 = F (ฐาน 16)
        Select Case (Dec Mod 16)
            Case 10
                Hex = "A" & Hex
            Case 11
                Hex = "B" & Hex
            Case 12
                Hex = "C" & Hex
            Case 13
                Hex = "D" & Hex
            Case 14
                Hex = "E" & Hex
            Case 15
                Hex = "F" & Hex
            
            ' ตั้งแต่ 0 - 9 มาประมวลผลที่ตรงนี้ครับ ... (รับรองการ Mod ด้วย 16 ยังไงๆ มันก็ไม่มีค่าเกิน 15 ไปได้หรอก)
            ' สังเกตด้วยครับ ทำไมผมเอาเงื่อนไขค่าระหว่าง 0 - 9 มาวางไว้ใน Case Else .. (มันไม่มีค่าอื่นอีกแล้วเหรอ).
            Case Else
                
                ' เก็บค่าคำตอบของการหารเอาเศษ (MOD) ... เรียงลำดับให้ถูกต้องด้วยน่ะครับ
                Hex = (Dec Mod 16) & Hex
                
        End Select
        
        ' หารตัดเศษ (Div) จนกว่าจะได้ 0 ... เพื่อใช้เป็นเงื่อนไขในการวนรอบ Do ... While
        Dec = Dec \ 16
    
    Loop

    ' ส่งค่าคืนกลับในแบบ String เพราะเลขฐาน 16 มันมีตัวอักขระ A - F
    Decimal2HexaDecimal = Hex
    
End Function
เห็นแนวคิดแบบบ้านๆหรือยังครับ ไม่ว่าคุณจะแปลงเลขฐาน 10 ไปเป็นเลขฐานใดๆ ก็จะใช้ Algorithm หลักๆเหมือนกันหมดเลย ... นี่แหละครับแบบฉบับช่าง (หัวมัน) ของผม ... เพราะผมไม่ได้อ้างอิงสูตร การยกกำลัง หรือใช้สมการใดๆเข้ามาเกี่ยวข้อง แต่แก้ปัญหาโจทย์ข้อนี้ได้ด้วยความรู้เรื่องการหารสั้น (ในระดับประถม) ทีนี้รู้หรือยังล่ะว่าเราเรียนพื้นฐานกันมาทำไม ... เรียนมาเพื่อประยุกต์ใช้ให้เป็นไงล่ะครับ ... ยังๆครับยังไม่หมด ยังมีอีก เอากันให้ชัดๆยิ่งกว่านี้ ว่าแนวคิดบ้านๆของช่างอิเล็กทรอนิกส์คนหนึ่ง จะแปลงเลขฐาน 2 ให้กลายเป็นเลขฐาน 16 ได้อย่างไร ...
ดาวน์โหลด
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
ข้อมูลเพิ่มเติม
วิธีการคิดกับตัวเลขจำนวนเต็ม
การแปลงเลขฐาน 16 เป็นเลขฐาน 2 และ เลขฐาน 10 - VB6
โค้ดและแนวคิดการแปลงเลขฐาน 10 เป็นฐาน 2 เรื่องหมูๆ ... ไม่บอกก็แทบจะไม่รู้กันเลย
เรื่องของโปรแกรมย่อย (อีกที) ... Sub Program, Routine, Procedure หรือ Function
ตรวจสอบการกดแป้นคีย์บอร์ดเพื่อให้รับค่าเฉพาะตัวเลข และ จุดทศนิยมเท่านั้น (VB6)
ตรวจสอบการกดแป้นคีย์บอร์ดเพื่อให้รับค่าเฉพาะตัวเลข (VB.Net)


Design Time


Run Time

จากตารางด้านบน ... ให้สังเกตน่ะครับว่า เลขฐาน 16 นั้น เราสามารถแทนที่มันด้วยเลข Binary (ฐาน 2) จำนวนขนาด 4 บิต
    ว่ากันง่ายๆ เลข Binary จำนวนขนาด 4 บิต สามารถแทนเลขฐาน 16 ได้ครบพอดีเลย ...
  • 1 x 23 + 1 x 22 + 1 x 21 + 1 x 20 ... นิพจน์อันนี้เห็นทีต้องไปหาขุดคุ้ยกันเอาเองน่ะครับ เพราะผมจะกล่าวถึงการนำเลข Binary 4 บิต มาแปลงเป็นฐาน 16
  • 0  0  0  0 = 0
  • 0  0  0  1 = 1
  • 0  0  1  0 = 2
  • 0  1  0  0 = 4
  • ไปเรื่อย ...
  • 1  1  1  0 = E (หรือ 14 ฐาน 10)
  • 1  1  1  1 = F (หรือ 15 ฐาน 10)

เมื่อคิดได้ดังนี้แล้ว ... ผมจะจัดกลุ่มเลข Binary (ฐาน 2) ออกเป็นชุดๆละ 4 บิต โดยให้ นับจากขวาไปซ้าย (วงรอบ For) ... แต่วิธีการ อ่านค่าตำแหน่งของบิตซ้ายมือสุด ของทุกๆชุด ผมจะใช้การ อ่านค่าตำแหน่งจากซ้ายไปขวาแทน (เงื่อนไข IF เป็นเท็จ หรือ Else นั่นแหละ)
    เช่น เลข 257 (ฐาน 10) จะกระจายเลข Binary ได้คือ 1 0 0 0 0 0 0 0 1
  • 1 0 0 0 0 0 0 0 1 ... การแบ่งชุดเลข Binary ชุดละ 4 บิต
  • 1 2 3 4 5 6 7 8 9 ... เวลาคำนวณหาตำแหน่งของบิตซ้ายมือสุด ในแต่ละชุด ผมจะพิจารณาหลัก 6 และ หลัก 2 (การอ่านตำแหน่งจากซ้ายไปขวา)
      ลองดูจากโค้ดด้านล่างประกอบ และใช้ค่า 257 (ฐาน 10) เป็นค่าทดสอบ
    • รอบที่ 1 คำสั่ง For Count = Len(BinaryBase) To 1 Step -4 ... ทำให้ Count มีค่าเท่ากับ 9 (ความยาวของจำนวนบิต หรือ Len(BinaryBase))
    • ทำให้ Bit = Mid$(BinaryBase, Count - 3, 4) หรือ Mid$("100000001", 9 - 3 = 6, 4) = 0001 (บิต 0 สีแดง คือตำแหน่งที่นับจากทางซ้ายมือมา 6 ตำแหน่ง ... จากนั้นให้นับต่อไปทางขวาอีก 4 บิต
    • รอบที่ 2 คำสั่ง For Count = Len(BinaryBase) To 1 Step -4 ... ทำให้ Count ลดค่าลง 4 (Step -4) จึงมีค่าเท่ากับ 9 - 4 = 5
    • ทำให้ Bit = Mid$(BinaryBase, Count - 3, 4) หรือ Mid$("100000000", 5 - 3 = 2, 4) = 0000 (บิต 0 สีแดง คือตำแหน่งที่นับจากทางซ้ายมือมา 2 ตำแหน่ง ... จากนั้นให้นับต่อไปทางขวาอีก 4 บิต
  • 1 ... กรณีของชุดสุดท้าย หากมีบิตไม่ครบ 4 บิต ... ใช้วิธีการเพิ่มบิต 0 เข้าไปให้ครบ (เงื่อนไข IF เป็นจริง)
      เช่น ...
    • ปรับขนาดบิตให้ครบ 4 บิต โดยเอาบิตมาเรียงกัน แล้วนับมาจากทางขวาคืนกลับมา 4 ตัว ...
    • "0000" & "1" ... ปกติก็ได้การเรียงบิต ดังนี้ "00001"
    • พอใช้ Right("0000" & "1", 4) ... เพื่อให้นับจากทางขวาไป 4 หลัก ... คำตอบ คือ "0001"
สิ่งต่างๆที่ได้เห็นทางด้านบน คือ การคิดออกแบบเอาไว้ แล้วลองทดสอบค่าลงในกระดาษ ผสมผสานกับการเขียนผังงานออกมาดู ... หากไม่ทำอย่างนี้ ก็ยากที่จะเขียนโปรแกรมออกมาเพื่อให้มีผลลัพธ์ที่ถูกต้องได้ ... ขอย้ำอีกครั้งสำหรับผู้ที่คิดจะเอาดีทางด้านนี้ ...

การแปลงเลขฐาน 2 ไปเป็นเลขฐาน 16 ... ด้วยวิธีการนับจำนวนบิต ครั้งละ 4 บิต

' ==============================================================
' แปลงเลขฐาน 2 เป็นเลขฐาน 16 ... โดยทำการคิดเลขฐาน 2 คราวละ 4 บิต
Function Binary2HexaDecimal(BinaryBase As String) As String
' ==============================================================

Dim Count As Integer    ' นับจำนวนบิตคราวละ 4 บิต
Dim Bit As String           ' นำไปแปลงเป็นเลขฐาน 16
Dim Hex As String         ' เก็บค่าที่แปลงเป็นเลขฐาน 16 เพื่อนำมาเวียนใช้งาน
    
    
    ' เลือกมาเป็นชุดๆละ 4 บิต ต้องนับจากทางขวามือมาน่ะครับ (LSB)
    ' ในฐาน 10 ก็เหมือนไล่จากหลักพัน หลักร้อย หลักสิบ หลักหน่วย (ตามปกติชีวิตที่คุ้นเคยกับตัวเลข)
    ' Count จะลดค่าลงทีละ 4 ครับ ... นับจำนวนความยาวของจำนวนบิต แล้วลดค่าลงทีละ 4 บิต
    For Count = Len(BinaryBase) To 1 Step -4
        
        ' กรณีบืตทางซ้ายมือมันมีขนาดไม่ครบ 4 บิต ... อาศัยการเติม 0 เข้าไปซืครับ
        ' เช่น 1 0000 0001 ...
        ' การวนรอบครั้งสุดท้าย จะทำให้ค่า 1 ซึ่งเป็นบิตที่อยู่ซ้ายมือสุด (MSB) เหลือตัวเดียวโดดๆ
        ' ในกรณีที่ไม่ได้ค่าจำนวนบิตเป็น 4, 8, 12, 16, 20,  ... ไปเรื่อยๆ (การหารด้วย 4 ลงตัวพอดี)
        If Count < 4 Then
            ' ===========================================================
            ' ปรับขนาดบิตให้ครบ 4 บิต โดยเอาบิตมาเรียงกัน แล้วนับมาจากทางขวาคืนกลับมา 4 ตัว ...
            ' "0000" & "1" ... ปกติก็ได้การเรียงบิต ดังนี้  "00001"
            ' พอใช้ Right("0000" & "1", 4) ... คำตอบ คือ "0001"
            Bit = Right$("0000" & Mid$(BinaryBase, 1, Count), 4)
            ' ===========================================================
        
        Else
            
            ' ===========================================================
            ' ค่อยๆไล่หาวิธีการคิดน่ะครับ ...
            ' สมมุติหาค่า 257 (ฐาน 10) หรือ  1 0 0 0 0 0 0 0 1 (ฐาน 2)
            ' ทำให้ได้ความยาวทั้งหมด 9 บิต (Count = 9) ... ให้ลบออกด้วย 3 เพราะ ...
            ' 1 2 3 4 5 6 7 8 9 (นับหลัก)
            ' 1 0 0 0 0 0 0 0 1
            ' -----------x------- ... ผมต้องการตัดบิตขวามือ 3 บิตออก จึงทำให้ลบแล้วได้ตำแหน่ง x พอดี
            ' ดังนั้นรอบแรกเริ่ม 9 - 3 = 6 ... ให้ลองนับดูครับว่าจะเริ่มอ่านจากหลักที่ 6 พอดี นับจากซ้ายมือน่ะครับ
            ' จุดนี้สำคัญมากครับ ... ขอให้ไล่การทำงานด้วยการกด F8 ทดสอบดู
            ' เมื่อใช้ Mid$(ข้อความ, เริ่มต้นจากหลักที่, นับไป 4 ตัว) ...
            ' มันจะมีจำนวนบิตเข้ามาเท่าไร ก็ไม่มีปัญหากับแนวคิดของอดีตช่าง (หัวมัน) แบบผม ...
            Bit = Mid$(BinaryBase, Count - 3, 4)
            ' ===========================================================
        
        End If
        
        ' ได้มาครบ 4 บิตแล้วก็ทำการเปรียบเทียบค่า
        Select Case Bit
            Case "0000"
                Hex = "0"
            Case "0001"
                Hex = "1"
            Case "0010"
                Hex = "2"
            Case "0011"
                Hex = "3"
            Case "0100"
                Hex = "4"
            Case "0101"
                Hex = "5"
            Case "0110"
                Hex = "6"
            Case "0111"
                Hex = "7"
            Case "1000"
                Hex = "8"
            Case "1001"
                Hex = "9"
            Case "1010"
                Hex = "A"
            Case "1011"
                Hex = "B"
            Case "1100"
                Hex = "C"
            Case "1101"
                Hex = "D"
            Case "1110"
                Hex = "E"
            Case "1111"
                Hex = "F"
        End Select
        
        ' จัดเรียงการแสดงผล และ ส่งค่าคืนกลับไป (แบบ String)
        Binary2HexaDecimal = Hex & Binary2HexaDecimal
        
    Next
    
End Function
    

วิธีการ Debug Program
Conclusion:
ผมยอมรับ ... โค้ดมันดูยาก ... โดยเฉพาะเงื่อนไข Bit = Mid$(BinaryBase, Count - 3, 4) ... ก็เพราะผมไม่ได้เขียน Flow Chart ออกมาให้ดู ซึ่งพี่น้องต้องฝึกคิดพิจารณาตามไปด้วยครับ มันมีวิธีการเขียนโค้ดออกมาได้หลายแบบ หลักๆก็หนีไปพ้นตัวอย่าง (ของจริง) ที่ทำไว้ให้ดูหรอกครับ เพียงแต่ผมรวบรัดคำสั่งให้ได้สาระสำคัญ โจทย์ประเภทนี้ผมมีเอาไว้สอนพวกระดับฝึกหัด (สอนในหลักสูตรแบบพื้นๆ เฉพาะแปลงเลขฐานไปมาเนี่ย เล่นกันเป็นเทอมยังได้เลย) ... ลองซิหากคุณไม่ออกแบบลงบนกระดาษมาซ่ะก่อน ก็ยากที่จะเขียนโค้ดออกมาได้ครับ ... ที่แน่ๆผมใช้แนวคิด และ เขียนขึ้นมาจากภาษา C มาก่อน นับได้ 10 กว่าปีแล้ว ก็ทำงานได้เช่นเดียวกัน เพราะ Algorithm นี้แทบไม่ได้เกี่ยวกับภาษาโปรแกรมที่ใช้เลยครับ ... พี่น้อง ... ประเด็นที่อยากชี้ให้เห็นอีกอย่างเลยว่า ผมไม่ได้นำหลักการคิดทางตัวเลขมาเกี่ยวข้องเลย ... อาศัยการใช้งานจริงล้วนๆครับ ... พี่น้อง

ร่วมแสดงความคิดเห็น

[ความเห็นที่:  1] จากคุณ : บู้ เมื่อ 23/11/2552 23:57:23  IP: 118.172.169.234

อาจารย์ทองก้อนจบช่าง! ผมอายตัวเองจริงๆ จบวิทย์คอมยังไม่ได้เสี้ยวของอาจารย์เลย

[ความเห็นที่:  2] จากคุณ : bigdaddy เมื่อ 24/11/2552 2:58:17  IP: 114.128.25.90

ขอบคุณครับ

[ความเห็นที่:  3] จากคุณ : ทองก้อน เมื่อ 24/11/2552 2:59:09

ทำไม ... ต้องมาอายผมล่ะครับ ... ทำไมไม่คิดที่จะทำแบบผมให้ได้ล่ะ คือต้อง ขยัน ทุ่มเท มานะ อดทน ... ที่สำคัญอย่างมาก ต้องคิดให้เป็น ...

ผมได้มา ไม่ใช่เพราะโชคช่วยเลยน่ะครับ ... แต่สิ่งที่คุณเห็นผมในทุกวันนี้ เรียกว่า "ประสบการณ์" แล้วครับผม ... จบอะไรมาก็วางเอาไว้เพื่อเป็นความภูมิใจก็พอ ... ต่อไปก็ต้องตะลุยเดินหน้าสุดใจขาดดิ้น ... เพื่อเมีย และ ผู้ช่วยเมีย 55555+

ไม่เชื่อถามนาย Dos Network ดูก็ได้ ... หากเขาไม่ฝึกฝน หรือ ย่อท้อ ที่จะใช้งาน Sharp Grid ให้ได้แล้วล่ะก็ ผมก็ไม่ยอมบอกเคล็ดลับของ Grid ตัวนี้ให้หรอกครับ ... ผมคิดหัวแทบแตกไม่น้อยกว่า 3 วัน กว่าจะแก้ปัญหาได้ ... แต่ถ่ายทอดให้ไปแค่ไม่ถึงนาที นาย Dos Network ก็ทำได้แล้ว ... 55555+ ... ผมเก่งหรือนายนี่เก่งหว่า ... เอิ๊กๆๆๆๆ

[ความเห็นที่:  4] จากคุณ : ctx-9000 เมื่อ 24/11/2552 10:44:27  IP: 124.121.11.204

ไม่ถ่ายให้ผมมั่งเลย "SG" ผมหละเกลียดวิชาเลข  กระทั้ง Digital ก็ยังสอบตก

[ความเห็นที่:  5] จากคุณ : ทองก้อน เมื่อ 24/11/2552 11:15:41

แหม ... ทำเป็นน้อยใจไปได้ Dos Network เขาศึกษาด้วยตัวเองเองน่ะ เรื่องของ Sharp Grid เนี่ย แต่ก็ถามผมมาบ้างประปราย ...  ครั้งนี้ผมให้โค้ดกลับไป 3 บรรทัด (แต่มันหัวใจหลักเลย) เขาก็ไปทำต่อเองได้ อันนี้ต้องขอชื่นชมกันเลย ...

สำหรับทั้ง ctx-9000 และ Dos Network ในฐานะที่ทำประโยชน์ให้กับสังคม ผมเตรียมโค้ดไว้ให้ (ตั้งนาน) แล้ว ... รับรองได้ว่าเขียนโค้ดไม่เหมือนผมแน่ๆ ...

วิชา Digital เกี่ยวข้องกับตรรกศาสตร์ และมันเป็นคณิตศาสตร์ ที่ไม่ใช่คณิตศาสตร์ ประมาณว่า Discreate ยังไงยังงั้นแหละครับ ... วิชานี้นับได้ว่าเป็นพื้นฐานที่สำคัญในการต่อยอดความรู้ทางด้านคอมพิวเตอร์ได้ดี ทั้งระบบ Hardware และ Software ...

[ความเห็นที่:  6] จากคุณ : บู้ เมื่อ 25/11/2552 0:44:47  IP: 118.172.162.46

ผมขาด ขยัน ทุ่มเท อดทน ที่สำคัญคิดไม่ค่อยเป็น นี้แหละครับ ได้ฟังชีวิตของอาจารย์แล้วอิจฉา
จะทำให้ได้แบบอาจารย์ แต่ต้องเริ่มที่ขยันเป็นอันดับแรกก่อนครับ

[ความเห็นที่:  7] จากคุณ : บู้ เมื่อ 25/11/2552 1:01:19  IP: 118.172.162.46

ผมด้อย db มากเลยครับ ถ้าแยกตารางกันเก็บนี้ก็พอได้ แต่เวลาเอาฟิลด์แต่ละตารางมารวมกันนี้เริ่มงง เช่น เรื่องหอพัก
ห้อง  เดือน        ปี        ค่าห้อง   ค่าน้ำ   ค่าไฟ      ค่าเน็ต   ....
101     9        2552       2500     50      900         250
101    10       2552       2500     50      650         250
102     9        2552       2500     50      875           0
102    10       2552       2500     50      492            0
103     9        2552       3000     50     1440         250
......

ประมาณนี้แหละครับ พอจะมีบทความให้ได้ศึกษาบ้างไหมครับ

ปล.อธิบายไม่ถูกและไม่รู้ว่าแนวคิดมันผิดไหมครับ

[ความเห็นที่:  8] จากคุณ : ทองก้อน เมื่อ 25/11/2552 13:26:20

โปรแกรมตัวนี้อยู่ในแผนการผลิตในปี 2553 ครับผม ...

==== ข้อแนะนำสำหรับคนที่ต้องการฉายเดี่ยว Freelance แบบผม ====
โปรแกรมตัวนี้ (และอีกหลายๆตัว) มีผู้คนว่าจ้าง ติดต่อให้ผมเขียนให้ 3 หมื่นบ้าง 5 หมื่นบ้าง ก็ว่ากันไป ... แต่ทั้งนี้ทั้งนั้น พวกนี้ล้วนแล้วแต่คิดแบบพ่อค้าเหมือนๆกัน คือ ให้ผมทำชุดติดตั้งให้ (Setup) พร้อมกับขอรหัสปลดล็อค (Key Gen) เพื่อเอาไปขายเอง ... ผมก็อยากถามจริงๆเหอะว่า โรงเรียนไหนสอนพวกคุณมา หรือเอาสมองต่อมไหนมาคิด ... คุณไม่คิดกันบ้างหรือว่า
- คุณเอาไปขาย 1 หมื่น ผมจะขายตัดราคาดื้อๆ 5,000 ... ใครเสียเปรียบ
- ผมทำตามที่คุณต้องการเป๊ะๆ บอกมา 20 ข้อ  ผมก็ทำตามนั้น แต่ที่เหลือผมกั๊ก เพราะโค้ดมันอยู่กับผมนี่นา ... ใครเสียเปรียบ
- ผมไม่ Upgrade หรือปรับปรุงแก้ไขให้ เพราะถือว่าขายขาดไปแล้ว ก็จบงานไป ... ใครเสียเปรียบ
- ฯลฯ

คิดกันสั่วๆแบบนี้ พวกคุณก็จ้างได้เฉพาะเด็กจบใหม่ เท่านั้นแหละ ... แล้วผลงานมันจะออกมายังไง

เอ้า ... บางรายติดต่อให้ผมผลิต แล้วบอกจะเอาไปขายให้ หรือ หาตลาดให้ ... แบบนี้ก็มั่วมาอีกแล้ว ในเมื่อผมลงทุนเอง ทำเอง ผลิตเอง เสี่ยงเอง แล้วทำไมผมให้ส่วนแบ่งกับคุณล่ะ จริงมั้ย ... แหม หน้าเว็บไซต์ผมก็ทำเองได้ เล่นกะ Serach Engine ของ GooGle ได้ (บอกแล้วว่าจับฉ่าย) ... ผมจะไปง้อกลุ่มนายทุนแบบพวกคุณไปทำไม ... 55555+

เอาแค่นี้ก่อนครับ ... เรื่องจริงๆล่ะมันยาว เอาไว้ว่างๆจะเขียนบทความเส้นทางชีวิตของ Freelance แบบผม ... เจอแต่พวกนายทุนแบบหัวเป็นลูกสนุ๊กเกอร์ คือ ลูกมันโค้งๆ กลมๆ หาเหลี่ยมไม่ค่อยเจอ แทงพลาดล่ะเป็นขาวลงรู เอ้ย หลุม ซิน่า ... 55555+ ... แต่นั่นต้องไม่ใช่ผมแน่ๆ ... เอิ๊กๆๆๆๆ

[ความเห็นที่:  9] จากคุณ : ทองก้อน เมื่อ 25/11/2552 13:46:05

เข้าประเด็น ... เรื่องที่น้องบู้ ถามผมมา ... หากไม่รีบร้อนนัก รอทำพร้อมกับผมในต้นปีหน้าครับ ...

การออกแบบไม่ยากหรอกครับ
พวกตารางหลัก 1 : 1
ตารางผู้เช่า ... Simple
ตารางห้อง ... Simple
ตารางอัตราค่าบริการ เช่น PK, PublicName, UnitRate  ซึ่งก็จะได้
    - PK = 1, ค่าน้ำ, หน่วยละ 10 บาท
    - PK = 2, ค่าไฟฟ้า, หน่วยละ 20 บาท
    - PK = 3, ค่าอินเทอร์เน็ต, หน่วยละ 100 บาท

ตารางแบบ 1 : M
ตารางหลักของการเก็บค่าใช้จ่าย (tblRentMain) ...  ประกอบด้วย RentPK, RoomFK (เชื่อมไปตารางห้อง), CustomerFK (เชื่อมไปตารางผู้เช่า), RoomCost (อัตราค่าเช่า เชื่อมไปยังข้อมูลตารางห้อง), RentDate (เก็บข้อมูลแต่ละเดือน)

ตารางย่อยของค่าใช้จ่าย (tblRentDetail) ... ประกอบด้วย PK (มีหรือไม่มีก็ได้หรอกอันนี้), RentFK (นี่แหละที่เชื่อมไปตารางหลักของการเก็บค่าใช้จ่าย - อันบน), หน่วยค่าน้ำ, หน่วยค่าไฟฟ้า, หน่วยค่าอินเทอร์เน็ตเน็ต (ทุกห้องใช้ 1 หน่วย) ... พวกหน่วยต่างๆที่ว่ามาต้องเชื่อมไปตารางคิดค่าบริการ เพื่อใช้ตอนคำนวณหาอัตราค่าบริการครับ ...

อธิบายแบบนี้อาจจะงงๆ ... แน่นอนต้องอยากให้ผมออกแบบตารางให้ แหง่มๆๆๆ ... ต้องลองออกแบบมาให้ผมดูก่อนครับ ... ผมจะได้ปรับแนวคิดให้ได้ ... สะดวกที่สุดก็ติดต่อผ่าน MSN ครับ ...

แต่ต้องบอกพี่น้องทุกท่านด้วยน่ะครับ ... จะให้ผมช่วย คุณต้องมีงานของคุณอยู่ในมือด้วย ไม่ใช่มาแต่ลม ... แบบนี้ทำให้ผมเสียเวลากินเหล้าครับ ... เอิ๊กๆๆๆๆ 

[ความเห็นที่:  10] จากคุณ : บู้ เมื่อ 27/11/2552 10:43:25  IP: 61.7.168.86

ขอขอบคุณมากครับ ตกใจหมดเลยอ่าน คห.8 คิดว่าถามอะไรที่ทำให้โกรธเสียอารมณ์อีกหรือเปล่า
เคยส่งเมลไปเหมือนกันครับ ก็พอดีกับเกิดช่วงที่ว่าจะงดบทความ ก็เลยเกรงใจ เข้าใจคนทำงานแล้วมีคนมาถามนั้นถามนี้
เยอะ ๆ 

[ความเห็นที่:  11] จากคุณ : bigdaddy เมื่อ 29/11/2552 3:59:01  IP: 114.128.201.212


Permutation...

ผมก็คิดไปคิดมาอยู่หลายรอบแล้ว 

[ความเห็นที่:  12] จากคุณ : แตงโม เมื่อ 8/2/2553 11:48:57  IP: 119.42.76.133

ไม่รู้เรื่องเลยจริงๆนะ

[ความเห็นที่:  13] จากคุณ : สุณิชา ภูยางดี เมื่อ 24/5/2553 11:41:04  IP: 192.168.1.53

ดีจังเลย

[ความเห็นที่:  14] จากคุณ : กุ้ง เมื่อ 27/5/2553 14:41:02  IP: 203.146.80.133

แปลงผิดอะค่ะ  บางตัว เช่น 3 11 ประมาณนี่อะค่ะ

[ความเห็นที่:  15] จากคุณ : ทองก้อน เมื่อ 27/5/2553 15:59:56

ป้อนตัวเลขฐาน 10 ค่าอะไรลงไปเหรอครับ ... ดูให้ดีด้วยน่ะขอรับ
เช่น หากป้อน 3 (ฐาน 10) คำตอบก็จะได้
เลขฐาน 2 = 11
เลขฐาน 16 = 3

[ความเห็นที่:  16] จากคุณ : กุ้ง เมื่อ 27/5/2553 16:11:54  IP: 203.146.80.133

ออ ดูแล้วอะ ผิดที่โปรแกรมเราเองอะ เขียน หาร เป็น / แบบนี่ไปอะ แต่ว่ามันต่างกันไหมอะ \ กะ / อะ

[ความเห็นที่:  17] จากคุณ : ทองก้อน เมื่อ 27/5/2553 16:43:31

เครื่องหมายหาร / แบบนี้ จะได้คำตอบเป็นเลขทศนิยม หรือ การหารทั่วไปนั่นเองครับ
เครื่องหมายหาร \  แบบนี้เป็นการหารตัดเศษ จะทำให้ได้ผลลัพธ์เป็นเลขจำนวนเต็มอย่างเดียว เช่น
9 / 2 = 4.5
9 \ 2 = 4

[ความเห็นที่:  18] จากคุณ : รัก เมื่อ 14/6/2553 10:44:45  IP: 118.172.215.157

อธิบายให้เข้าใจ

[ความเห็นที่:  19] จากคุณ : หนูดี เมื่อ 24/6/2553 18:52:58  IP: 113.53.58.215

ขอบคุณมากๆค่ะ

[ความเห็นที่:  20] จากคุณ : เมล่า เมื่อ 27/6/2553 16:12:50  IP: 118.172.233.214

(ขอโทษน่ะ)ดูไม่รู้เรื่องอ่ะ

[ความเห็นที่:  21] จากคุณ : ป้อ เมื่อ 7/7/2553 21:22:44  IP: 202.29.22.249

อ่านดูก้อรู้เรื่องบ้าง  ดีเหมือนกันนะ

[ความเห็นที่:  22] จากคุณ : เจบหัว เมื่อ 12/7/2553 1:32:32  IP: 110.164.165.122

อยากได้ ฐาน 10 ไปฐาน8 อะคับ

[ความเห็นที่:  23] จากคุณ : ทองก้อน เมื่อ 12/7/2553 9:16:06

หลักการแนวคิดไม่ได้เปลี่ยนไปเลยครับ ลองศึกษาจากการแปลงเลขฐาน 10 เป็นเลขฐาน 2
http://www.g2gnet.com/News/activenews_view.asp?articleID=129

เนื่องจากว่าเลขฐาน 8 จะประกอบไปด้วยตัวเลข 0,1,2,3,4,5,6 และ 7 
อย่างที่บอกไว้ครับ เอาเลขจำนวนเต็มในฐานใดๆมา MOD (หารเอาเศษ) คำตอบที่ได้ ค่าต่ำสุด คือ 0 และ ค่าสูงสุดจะได้เลขฐานนั้นๆลบออก 1 เสมอ ...
กรณีเลขฐาน 8 จึงได้ 8 - 1 = 7 (ค่าสูงสุด)
กรณีเลขฐาน 2 จึงได้ 2 - 1 = 1 (ค่าสูงสุด)
กรณีเลขฐาน 10 จึงได้ 10 - 1 = 9 (ค่าสูงสุด)
กรณีเลขฐาน 16 จึงได้ 16 - 1 = 15 หรือ F (ค่าสูงสุด)

ดังนั้นเลขฐาน 8 มันมีค่าไม่เป็นเลข 2 หลัก แบบฐาน 16 เราจึงสามารถนำหลักการแปลงเลขฐาน 10 เป็นเลขฐาน 2 มาใช้ได้เลยทันที ดังนี้
Dim Octal As String
Dim Dec As Long
Dec = 35
' DO WHILE ... เงื่อนไขเป็นจริงจะวนรอบ ... เท็จเมื่อไหร่ก็จะออกจากลูป
Do While (Dec > 0)
    ' หารเอาเศษเพื่อเป็นคำตอบ
    Octal = (Dec Mod 8) & Octal
    ' หารตัดเศษเพื่อสร้างเงื่อนไขวนไปเรื่อยๆ จนกว่าคำตอบสุดท้ายเป็น 0
    ' ผลหารที่ได้ก็นำกลับไปเก็บไว้ในตัวแปรเดิม (Dec) เพื่อทำซ้ำใหม่
    Dec = Dec \ 8
Loop

MsgBox Octal

*** ชัดเจนมั้ยครับว่าหลักการแปลงเลขฐานมันไม่ได้เปลี่ยนไปเลย ***

[ความเห็นที่:  24] จากคุณ : ตะไคร้ เมื่อ 2/8/2553 9:08:47  IP: 58.147.68.249

ขอบคุณนะค่ะที่หามาให้ศึกษา

[ความเห็นที่:  25] จากคุณ : love เมื่อ 30/8/2553 22:02:44  IP: 27.130.84.121

แล้วถ้าเปลี่ยนจากเลขฐาน16 เป็นฐาน12 ล่ะค่ะ

[ความเห็นที่:  26] จากคุณ : ไทย เมื่อ 30/8/2553 22:04:13  IP: 27.130.84.121

ขอบคุณค่ะ*-*

[ความเห็นที่:  27] จากคุณ : พอลล่า เมื่อ 30/8/2553 22:05:52  IP: 27.130.84.121

ดีมากค่ะ

[ความเห็นที่:  28] จากคุณ : ตระการ ธิมะดี เมื่อ 10/11/2553 20:48:55  IP: 110.49.205.62

วิธีการทำ 8ฐานสิบแปลงเป็นเลขฐานสิบหกทำอย่างไรครับผมไม่เข้าใจ

[ความเห็นที่:  29] จากคุณ : จิ๊บ เมื่อ 8/2/2554 19:58:58  IP: 27.55.94.179

ก็โอเค เข้าใจดี

[ความเห็นที่:  30] จากคุณ : ศิริรัตน์ เมื่อ 23/5/2554 14:08:01  IP: 182.93.224.10

การหาฐาน16เป็นเลข10

[ความเห็นที่:  31] จากคุณ : มังกรโหลิต เมื่อ 31/5/2554 20:29:07  IP: 101.109.84.165

คุนทองก้อน ช่วยสอนคับเขียนที่ดั้ยไหมคับ ปมยังม่ายเจ้าจัยเท่าไรเรย แต่พอเข้าจัยบ้าง 
ป.ล. ช่วยสอนหน่อยนะคับ ถ้าดั้ยช่วยโพต์ด้วยคับ

[ความเห็นที่:  32] จากคุณ : มังกรโลหิต เมื่อ 31/5/2554 20:30:09  IP: 101.109.84.165

บอกโปรแกรมที่ใช้ใการเขียนด้วยก้อดีคับ

[ความเห็นที่:  33] จากคุณ : ฉัตร เมื่อ 7/8/2554 12:42:54  IP: 110.49.251.185

ขอบคุณครับ

[ความเห็นที่:  34] จากคุณ : รสค่ะ เมื่อ 8/8/2554 13:02:59  IP: 58.9.70.135

ชอบสมองคุณจัง

[ความเห็นที่:  35] จากคุณ : ผมกาก เมื่อ 22/8/2554 12:46:57  IP: 118.175.31.98

ขอบคุณครับ

[ความเห็นที่:  36] จากคุณ : ผมกากมากครับพ่อทองก้อน เมื่อ 22/8/2554 13:00:22  IP: 118.175.31.98

ผมมาขอโทษคุณพ่อคับ

[ความเห็นที่:  37] จากคุณ : ชา เมื่อ 22/7/2555 16:59:59  IP: 182.52.63.66

ดีครับ

[ความเห็นที่:  38] จากคุณ : 123 เมื่อ 5/4/2556 14:17:55  IP: 58.97.76.80

กากว่ะ

[ความเห็นที่:  39] จากคุณ : mola เมื่อ 25/7/2557 9:22:30  IP: 110.168.132.246

ขอบคุณครับ

[ความเห็นที่:  40] จากคุณ : โบ๊ท เมื่อ 13/9/2557 14:50:04  IP: 49.230.159.207

ผมมีปัญหาในเรื่องออกแบบตารางฐานข้อมูลอะครับ
ยกตัวอย่าง ตารางครุภัณฑ์
รหัสครุภัณ    ชื่อครุภัณฑ์    รหัสยี่ห้อ   จำนวน   รหัสหน่วย  ราคาต่อหน่วย   รหัสประเภท  วันที่ลงทะเบียน   รหัสสถานะ
 
จากที่ผมอ่านการออกแบบของอาจารย์ผมก็ทำตารางหลักได้แบบข้างบนครับ(ตารางย่อยก็ทำละนะครับ)
อยากรุว่าที่ทำมาข้างบน พอถูกหลักไหมครับ        
คำถามอาจจะงงๆ เพราะผมก็งงๆ     ขอบคุณมากนะครับ


 



ก่อนการคลิ๊กโพสต์ข้อความ ขอความกรุณาใช้ถ้อยคำที่สุภาพด้วยครับ เว็บไซต์แห่งนี้เป็นแหล่งเผยแพร่ความรู้ ดังนั้นสำหรับท่านที่พยายามจะป่วนเว็บไซต์ หากท่านเป็น "คนไทย" เช่นเดียวกันกับผม ก็ขอความกรุณาได้โปรดเห็นใจ "คนไทย" อีกจำนวนไม่น้อย ที่เข้ามาขอความช่วยเหลือ จากเว็บไซต์ของผมด้วยน่ะครับ และหากท่านใดไม่เข้าใจในตรงจุดไหน ก็ขอให้ระบุสิ่งที่อยากจะถามออกมา บทความของผมแทบทั้งหมดต้องอาศัยทักษะการปฏิบัติเป็นหลัก ดังนั้นขอให้ดู และ ทดสอบจากโค้ดโปรแกรมประกอบตามไปด้วย
IP Address: 54.90.225.129
ชื่อของคุณ:

ข้อคิดเห็น:

3 + 1 = ?  (กรุณาป้อนคำตอบลงในช่องด้านล่างให้เป็น ภาษาไทย ตามผลบวกของตัวเลขให้ถูกต้องก่อนด้วยน่ะครับ เช่น ศูนย์)
  


จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
Copyright © 2005 g2gNet.Com All rights reserved.
Email: thongkorn@hotmail.com หรือ โทร. 08-6862-6560