| 
 | 
 
  
 
  
 
การคำนวณหาค่า ห.ร.ม. หรือ GCD (Greatest Common Divisor)  
ห.ร.ม. หรือตัวหารร่วมมากของจำนวนเต็มสองจำนวน คือจำนวนเต็มมากที่สุดที่หารทั้งสองจำนวนนั้นได้โดยไม่เหลือเศษ สำหรับโค้ดชุดนี้ในการหาค่า ห.ร.ม. จะใช้วิธีการแบบยุคลิด (Euclidean Algorithm) โดยมีวิธีคิดคือ ให้นำเศษจากการหารในทุกๆครั้ง นำกลับมาเป็นตัวตั้งใหม่อีกรอบ จนกว่าเศษที่ได้จะมีค่าเป็น 0  
-     ' / ฟังก์ชัน GCD (Greatest Common Divisor) ใช้ในการหาตัวหารร่วมมากที่สุดของสองจำนวน a และ b 
 
 -     ' / โดยใช้วิธีการแบบยุคลิด (Euclidean Algorithm) โดยมีขั้นตอนการทำงานดังนี้:
 
 -     ' หาค่า GCD ของ a และ b (ด้วยการหารเอาเศษ หรือ Modulus)
 
 -     ' 1.        a = 48, b = 18
 
 -     ' 2.        b ≠ 0
 
 -     '                   temp = 18   (เก็บค่านี้ไว้เพื่อเป็นตัวตั้งในรอบถัดไป)
 
 -     '                   b = 48 Mod 18 (เหลือเศษ 12, b = 12)
 
 -     '                   a = 18 (a = temp)
 
 -     ' 3.        a = 18, b = 12
 
 -     ' 4.        b ≠ 0
 
 -     '                   temp = 12
 
 -     '                   b = 18 Mod 12 (เหลือเศษ 6, b = 6)
 
 -     '                   a = 12 (a = temp)
 
 -     ' 5.        a = 12, b = 6
 
 -     ' 6.        b ≠ 0
 
 -     '                   temp = 6
 
 -     '                   b = 12 Mod 6 (เหลือเศษ 0, b = 0)
 
 -     '                   a = 6 (a = temp)
 
 -     ' 7.        a = 6, b = 0
 
 -     ' 8.        คืนค่า a = 6 เป็น GCD
 
 -     ' / -------------------------------------------------------------------------------------------------
 
 -     '// หา หรม.
 
 -     Function GCD(a As Integer, b As Integer) As Integer
 
 -         While b <> 0    '// ใช้เงื่อนไขจริง ให้ทำซ้ำ ตราบใดที่ b มีค่าไม่ใช่ 0
 
 -             Dim temp As Integer = b
 
 -             b = a Mod b '// ใช้การหารเอาเศษ ผลลัพธ์ที่ได้เก็บไว้ใน b
 
 -             a = temp    '// นำค่าเดิมจาก b ไปเก็บไว้ที่ a เพื่อให้เป็นตัวตั้งต่อไป
 
 -         End While
 
 -         Return a
 
 -     End Function
 
  คัดลอกไปที่คลิปบอร์ด 
ค.ร.น. หรือ LCM (Least Common Multiple) ตัวคูณร่วมน้อย มีนิยามว่า คือจำนวนเต็มบวกที่น้อยที่สุดที่หารด้วยแต่ละจำนวนลงตัว โดยมีสูตรว่า 
LCM(a, b) = (a x b) \ GCD(a, b) 
ดังนั้นเมื่อเราหาค่า ห.ร.ม. ได้ก็จะหาค่า ค.ร.น. ได้อย่างไม่ยาก  
- '/ ฟังก์ชัน LCM (Least Common Multiple) ใช้ในการหาค่าตัวคูณร่วมน้อยที่สุดของสองจำนวน a และ b โดยใช้ผลลัพธ์จากฟังก์ชัน GCD ที่ได้
 
 -     '/ อธิบายการทำงาน
 
 -     '/ 1.        เริ่มต้น: รับค่า a และ b เข้ามาในฟังก์ชัน
 
 -     '/ 2.        คำนวณ LCM: ใช้สูตร LCM(a, b) = (a x b) \ GCD(a, b)
 
 -     '/                  คูณ a และ b เข้าด้วยกัน
 
 -     '/                  หารด้วยค่าที่ได้จากฟังก์ชัน GCD(a, b)
 
 -     '/ 3.        ผลลัพธ์: คืนค่าผลลัพธ์เป็นตัวคูณร่วมน้อยที่สุด (LCM)
 
  
-     '/ ตัวอย่าง
 
 -     '/ หาค่า LCM ของ 48 และ 18
 
 -     '/ 1.        หา GCD: จากตัวอย่างข้างต้น GCD(48, 18) = 6
 
 -     '/ 2.        คำนวณ LCM:
 
 -     '/                  LCM(48, 18) = 48 x 18 \ 6 = 144
 
 -     '/ 3.        คืนค่า LCM = 144
 
 -     ' / -------------------------------------------------------------------------------------------------
 
 -     '// หา ครน.
 
 -     Function LCM(a As Integer, b As Integer) As Integer
 
 -         Return (a * b) \ GCD(a, b)  '// ใช้การหารตัดเศษ เพราะต้องการคำตอบเป็นเลขจำนวนเต็ม
 
 -     End Function
 
  คัดลอกไปที่คลิปบอร์ด 
มาดูโค้ดฉบับเต็มกันเถอะ ...  
- Public Class frmGcdLcmNumber
 
  
-     Private Sub frmGcdLcmNumber_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
 
 -         Call btnGenerate_Click(sender, e)
 
 -     End Sub
 
  
-     ' / -------------------------------------------------------------------------------------------------
 
 -     ' / ฟังก์ชัน GCD (Greatest Common Divisor) ใช้ในการหาตัวหารร่วมมากที่สุดของสองจำนวน a และ b 
 
 -     ' / โดยใช้วิธีการแบบยุคลิด (Euclidean Algorithm) โดยมีขั้นตอนการทำงานดังนี้:
 
 -     ' หาค่า GCD ของ a และ b (ด้วยการหารเอาเศษ หรือ Modulus)
 
 -     ' 1.        a = 48, b = 18
 
 -     ' 2.        b ≠ 0
 
 -     '                   temp = 18   (เก็บค่านี้ไว้เพื่อเป็นตัวตั้งในรอบถัดไป)
 
 -     '                   b = 48 Mod 18 (เหลือเศษ 12, b = 12)
 
 -     '                   a = 18 (a = temp)
 
 -     ' 3.        a = 18, b = 12
 
 -     ' 4.        b ≠ 0
 
 -     '                   temp = 12
 
 -     '                   b = 18 Mod 12 (เหลือเศษ 6, b = 6)
 
 -     '                   a = 12 (a = temp)
 
 -     ' 5.        a = 12, b = 6
 
 -     ' 6.        b ≠ 0
 
 -     '                   temp = 6
 
 -     '                   b = 12 Mod 6 (เหลือเศษ 0, b = 0)
 
 -     '                   a = 6 (a = temp)
 
 -     ' 7.        a = 6, b = 0
 
 -     ' 8.        คืนค่า a = 6 เป็น GCD
 
 -     ' / -------------------------------------------------------------------------------------------------
 
 -     '// หา หรม.
 
 -     Function GCD(a As Integer, b As Integer) As Integer
 
 -         While b <> 0    '// ใช้เงื่อนไขจริง ให้ทำซ้ำ ตราบใดที่ b มีค่าไม่ใช่ 0
 
 -             Dim temp As Integer = b
 
 -             b = a Mod b '// ใช้การหารเอาเศษ ผลลัพธ์ที่ได้เก็บไว้ใน b
 
 -             a = temp    '// นำค่าเดิมจาก b ไปเก็บไว้ที่ a เพื่อให้เป็นตัวตั้งต่อไป
 
 -         End While
 
 -         Return a
 
 -     End Function
 
  
-     ' / -------------------------------------------------------------------------------------------------
 
 -     '/ ฟังก์ชัน LCM (Least Common Multiple) ใช้ในการหาค่าตัวคูณร่วมน้อยที่สุดของสองจำนวน a และ b โดยใช้ผลลัพธ์จากฟังก์ชัน GCD ที่ได้
 
 -     '/ อธิบายการทำงาน
 
 -     '/ 1.        เริ่มต้น: รับค่า a และ b เข้ามาในฟังก์ชัน
 
 -     '/ 2.        คำนวณ LCM: ใช้สูตร LCM(a, b) = (a x b) \ GCD(a, b)
 
 -     '/                  คูณ a และ b เข้าด้วยกัน
 
 -     '/                  หารด้วยค่าที่ได้จากฟังก์ชัน GCD(a, b)
 
 -     '/ 3.        ผลลัพธ์: คืนค่าผลลัพธ์เป็นตัวคูณร่วมน้อยที่สุด (LCM)
 
  
-     '/ ตัวอย่าง
 
 -     '/ หาค่า LCM ของ 48 และ 18
 
 -     '/ 1.        หา GCD: จากตัวอย่างข้างต้น GCD(48, 18) = 6
 
 -     '/ 2.        คำนวณ LCM:
 
 -     '/                  LCM(48, 18) = 48 x 18 \ 6 = 144
 
 -     '/ 3.        คืนค่า LCM = 144
 
 -     ' / -------------------------------------------------------------------------------------------------
 
 -     '// หา ครน.
 
 -     Function LCM(a As Integer, b As Integer) As Integer
 
 -         Return (a * b) \ GCD(a, b)  '// ใช้การหารตัดเศษ เพราะต้องการคำตอบเป็นเลขจำนวนเต็ม
 
 -     End Function
 
  
-     Private Sub btnProceed_Click(sender As System.Object, e As System.EventArgs) Handles btnProceed.Click
 
 -         '// Validate the input values.
 
 -         If txtNum1.Text = "" Or txtNum1.Text = "0" Or txtNum1.Text.Length = 0 Then txtNum1.Text = "1"
 
 -         If txtNum2.Text = "" Or txtNum2.Text = "0" Or txtNum2.Text.Length = 0 Then txtNum2.Text = "1"
 
 -         '// ส่งค่า a และ b ไป
 
 -         Dim gcdNum As Integer = GCD(Val(txtNum1.Text), Val(txtNum2.Text))
 
 -         Dim lcmNum As Integer = LCM(Val(txtNum1.Text), Val(txtNum2.Text))
 
 -         '//
 
 -         txtGCD.Text = gcdNum
 
 -         txtLCM.Text = lcmNum
 
 -         '//
 
 -         txtNum1.Focus()
 
 -         txtNum1.SelectAll() '// Highlight the text in txtNum1
 
 -     End Sub
 
  
-     Private Sub btnGenerate_Click(sender As System.Object, e As System.EventArgs) Handles btnGenerate.Click
 
 -         Dim rnd As New Random()
 
 -         Dim randomNumber1 As Integer = rnd.Next(1, 100)
 
 -         Dim randomNumber2 As Integer = RandomEvenNumber(rnd)    '// สุ่มตัวเลขให้เป็นเลขคู่เท่านั้น
 
 -         txtNum1.Text = randomNumber1
 
 -         txtNum2.Text = randomNumber2
 
 -     End Sub
 
  
-     ' / -------------------------------------------------------------------------------------------------
 
 -     ' / ต้องการสุ่มค่าออกมาให้เป็นเลขคู่เท่านั้น
 
 -     Private Function RandomEvenNumber(rnd As Random) As Integer
 
 -         Dim randomNumber As Integer = rnd.Next(1, 51) '// Generates a number between 1 and 50.
 
 -         Return randomNumber * 2 '// Multiply by 2 to get an even number between 2 and 100.
 
 -     End Function
 
  
-     Private Sub txtNum1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtNum1.KeyDown
 
 -         If e.KeyCode = Keys.Enter Then
 
 -             e.SuppressKeyPress = True '// Prevent the beep sound on Enter key press.
 
 -             txtNum2.Focus()
 
 -             txtNum2.SelectAll() '// Highlight the text in txtNum2.
 
 -         End If
 
 -     End Sub
 
  
-     Private Sub txtNum1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtNum1.KeyPress
 
 -         If Asc(e.KeyChar) = 13 Then
 
 -             e.Handled = True
 
 -             SendKeys.Send("{TAB}")
 
 -         Else
 
 -             e.Handled = CheckDigitOnly(Asc(e.KeyChar))
 
 -         End If
 
 -     End Sub
 
  
-     Private Sub txtNum2_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtNum2.KeyPress
 
 -         If Asc(e.KeyChar) = 13 Then
 
 -             e.Handled = True
 
 -             Call btnProceed_Click(sender, e)
 
 -         Else
 
 -             e.Handled = CheckDigitOnly(Asc(e.KeyChar))
 
 -         End If
 
 -     End Sub
 
  
-     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
 
 -         Me.Close()
 
 -     End Sub
 
  
-     Private Sub frmGcdLcmNumber_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
 
 -         Me.Dispose()
 
 -         GC.SuppressFinalize(Me)
 
 -         End
 
 -     End Sub
 
  
- #Region "FUNCTION"
 
 -     ' / --------------------------------------------------------------------------------
 
 -     ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขได้เท่านั้น
 
 -     Function CheckDigitOnly(ByVal index As Integer) As Boolean
 
 -         Select Case index
 
 -             Case 48 To 57 ' เลข 0 - 9
 
 -                 CheckDigitOnly = False
 
 -             Case 8, 13 ' Backspace = 8, Enter = 13
 
 -                 CheckDigitOnly = False
 
 -             Case Else
 
 -                 CheckDigitOnly = True
 
 -         End Select
 
 -     End Function
 
 - #End Region
 
 - End Class
 
  คัดลอกไปที่คลิปบอร์ด 
ดาวน์โหลดโค้ดต้นฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...  
 |   
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน  
 
x
 
 
 
 
 |