ËÒ¡ÁÕ¤Ó¶ÒÁ ¢ÍãËéä»â¾Êµìŧ àÇ纺ÍÃì´¨Õ·Ù¨Õà¹çµ´Íµ¤ÍÁ µÑÇãËÁèá·¹¹èФÃѺ

ËÃ×͵ԴµèÍà¢éÒÁÒ·Ò§ 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 6 1 6 1 4 7

7 ¸Ñ¹ÇÒ¤Á ¾.È.2549
102 Users On-Line.
Visitors - Page views
 8 9 7 3 8 9 0
1 ¡ØÁÀҾѹ¸ì ¾.È.2551

Google   
àÇçº g2gnet.com
¢¹Ò´µÑÇÍÑ¡ÉÃ:  

â»Ãá¡ÃÁÊØèÁµÑÇàÅ¢¨Ó¹Ç¹àµçÁẺäÁèãËé«éӡѹàÅ - Random Number

Category »  VB 6/VB.Net
â´Â : Webmaster àÁ×èÍ 6/8/2550 23:59:00
(ÍèÒ¹ : 98542) 

Íѹ·Õè¨ÃÔ§ÍÑÅ¡ÍÃÔ·ÖÁµÑǹÕé à´ÔÁ¼Á¡Ð¨ÐÁÒ¹ÓàʹÍ㹡ÒÃ·Ó CAI (Computer Assisted Instruction) ´éÇÂâ»Ãá¡ÃÁ MS Visual Basic 6.0 â´Â·Ó ...

  1. Ẻ½Ö¡ËÑ´¡ÒÃÊØèÁµÑÇàÅ¢ÍÍ¡ÁÒ à¾×èÍãËéà´ç¡æä´é·Ó¡Òà + - * / (Íѹ¹ÕéÃͺ˹éÒ¤ÃѺ àµÃÕÂÁäÇéáÅéÇ áµèÂѧ¢Ò´¤Ó͸ԺÒÂä»)
  2. â»Ãá¡ÃÁ·Ó¡ÒÃÊØèÁ¢éÍÊͺ (¢Í§à´ÔÁ·Õè·ÓäÇéÊÁºÙóìẺÁѹà»ç¹ DAO)
«Öè§àÃ×èͧ¹ÕéÁÕ¹éͧæ·Õè¡ÓÅѧ·Óâ»Ãਤ¡Ò÷ӢéÍÊÍºáººÊØèÁ (ʧÊÑÂà»ç¹â»Ãਤ 1000 »ÕÁÑé§) ä´é¢Í¡Ñ¹à¢éÒÁҾʹÕé¾Í´Õ áÅÐ¾Í´Õ (ÍÕ¡¹Ñè¹áËÅÐ) ·Õè¹éͧæà¢Ò¡çà»ç¹¼ÙéË­Ô§·Ñé§¹Ñé¹´éÇ àÍéÒ »ÃÐà´ÕëÂǨÐËÒÇèÒ¼Áà¹ÕèÂ㨨״ ã¨´Ó äÁèʧÊÒÃà´ç¡æ¹éÍ§æ µÒ´Óæà¢Ò Áѹ¨ÐºÒ»¡ÃÃÁ«èÐà»ÅèÒ¹èÐ ... ÍÔÍÔÍÔ ... ÍÑÅ¡ÍÃÔ·ÖÁµÑǹÕé¹èФÃѺµé¹©ºÑºà»ç¹¢Í§ Professor ªÒǵèÒ§ªÒµÔ·èÒ¹¹Ö§ (¹èÒ¨Ðà»ç¹ UK ¹èÐËÒ¡¼Á¨ÓäÁè¼Ô´) «Öè§¼Áä´éÁҨҡ˹ѧÊ×Í Visual Basic 3.0 ¡ç¤Ô´´ÙáÅéǡѹÇèÒÁѹ¡Õè»ÕÁÒáÅéǤÃѺ ... ¾Õè¹éͧ ... ˹ѧÊ×ÍàÅèÁä˹¢Í§¼Á·ÕèÇèÒ´ÕæÁÑ¡¨Ð¶Ù¡ "¢ÍÅ×Á" ä»àÊÁÍáËÅФÃѺ ÃÇÁ¶Ö§àÅèÁ¹Õé´éÇ «Öè§ã¹àÇÅÒ¹Ñé¹¼Á¡ç¾Í·Õè¨ÐäÅèÍÑÅ¡ÍÃÔ·ÖÁµÑǹÕéä´é¾ÍÊÁ¤Çà à¾ÃÒÐÁÕ¢éÍÁÙÅ·Õèà»ç¹àÍ¡ÊÒûÃСͺ´éÇ áµèµÍ¹¹ÕéºÍ¡¡Ñ¹µÃ§æ ... äÁèÃÙéàÃ×èͧ¤ÃѺ ͸ԺÒÂäÁèä´é áµèÃÙéÇÔ¸Õ¡ÒùÓÁÒãªé§Ò¹ ...
àÍÒÊÓËÃѺà·èÒ·Õè¨Óä´éÇèÒ ËÅÑ¡¡ÒâͧÁѹ¡ç¤×Í¡Ó˹´¤èÒàÃÔèÁµé¹ (Initialize) ¢Í§Çѹ·Õè ¡Ñº àÇÅҢͧ Timer ËÃ×Í ¹ÒÌÔ¡ÒÃкº ã¹áµèÅÐÇѹÁÒ·Ó¡ÒÃÊØèÁ (Random) à¹Õè ·ÓÂÑ§ä§æ¡çäÁèÁÕ·Ò§«éӡѹä´éàÅ â´Âãªé¿Ñ§¤ìªÑè¹ RandShuffle(key$) µÑǹÕéáËÅФÃѺ¹ÓÃèͧÁÒ¡è͹ ¨Óä´éá¤è¹Õé¨ÃÔ§æ¤ÃѺ ... àËÍææææ

 

   ´ÒǹìâËÅ´ Source Code ÊÓËÃѺ MS Visual Basic 6.0 - Service Pack 6

¼ÅÅѾ¸ì¨Ò¡¡ÒÃÃѹâ»Ãá¡ÃÁ ÃѺÃͧ¤ÃѺäÁèÁÕ¾ÅÒ´
Åͧ¤Ô´´ÙàÍÒáÅéǡѹÇèÒËÒ¡ÊÅѺµÑÇàÅ¢ 1-100 ¨ÐÁÕ¤ÇÒÁà»ç¹ä»ä´é㹡ÒèѴàÃÕ§ÁÒ¡¹éÍÂá¤èä˹
µÑÇàÅ¢·ÕèÊØèÁ = Int((¤èÒÊÙ§ÊØ´ - ¤èÒµèÓÊØ´ + 1) * Rnd + ¤èÒµèÓÊØ´) áºº¹ÕéãªéäÁèä´éàŤÃѺ
㹤ÃÑé§¡ÃÐâ¹é¹¼ÁÅͧ·ÓÁÒËÅÒÂÇÔ¸Õ áµè·Ø¡¤ÃÑ駨оº¡Ñº¡Òà LOOP Ẻ Dead Lock àÊÁÍ

ÊÓËÃѺ¹éͧæ¤ÃѺ ¡Ò÷Óâ»Ãá¡ÃÁÊØèÁ¢éÍÊͺ¹Ñé¹ËÑÇã¨ÊӤѭ·ÕèÊØ´Áѹ¡ç¤×ÍàÃ×èͧ¹ÕéáËÅФÃѺ ÊèǹàÃ×èͧ¢Í§°Ò¹¢éÍÁÙŹÑé¹Áѹ¡ÅÒÂà»ç¹àÃ×èͧà´ç¡æä»àÅÂ

Êèǹ»ÃСÒÈäÇéã¹ Module


'Array of long integers for generating all random numbers
Dim r&(1 To 100)

Function Rand&()
    'Get pointers into table
    i% = r&(98)
    j% = r&(99)
    
    'Subtract the two table values
    t& = r&(i%) - r&(j%)
    
    'Adjust result if less than zero
    If t& < 0 Then
        t& = t& + 1000000000
    End If
    
    'Replace table entry with new random number
    r&(i%) = t&
    
    'Decrement first index, keeping in range 1 through 55
    If i% > 1 Then
        r&(98) = i% - 1
    Else
        r&(98) = 55
    End If
    
    'Decrement second index, keeping in range 1 through 55
    If j% > 1 Then
        r&(99) = j% - 1
    Else
        r&(99) = 55
    End If
    
    'Use last random number to index into shuffle table
    i% = r&(100) Mod 42 + 56
    
   'Grab random number from table as current random number
   r&(100) = r&(i%)
    
    'Put new calculated random number into table
    r&(i%) = t&
    
    'Return random number grabbed from table
    Rand& = r&(100)
End Function

Function RandInteger%(a%, b%)
    RandInteger% = a% + (Rand&() Mod (b% - a% + 1))
End Function

Sub RandShuffle(key$)
    'Form 97-character string, with key$ as part of it
    tmp$ = Left$("Abracadabra" + key$ + Space$(86), 97)
    
    'Use each character to seed table
    For i% = 1 To 97
        r&(i%) = Asc(Mid$(tmp$, i%, 1)) * 8171717 + i% * 997&
    Next i%
    
    'Preserve string space
    tmp$ = ""
    
    'Initialize pointers into table
    i% = 97
    j% = 12
    
    'Randomize table to get it warmed up
    For k% = 1 To 997
        
        'Subtract entries pointed to by i% and j%
        r&(i%) = r&(i%) - r&(j%)
        
        'Adjust result if less than zero
        If r&(i%) < 0 Then
            r&(i%) = r&(i%) + 1000000000
        End If
        
        'Decrement first index, keeping in range 1 through 97
        If i% > 1 Then
            i% = i% - 1
        Else
            i% = 97
        End If
        
        'Decrement second index, keeping in range 1 through 97
        If j% > 1 Then
            j% = j% - 1
        Else
            j% = 97
        End If
        
        Next k%
        
        'Initialize pointers for use by Rand& function
        r&(98) = 55
        r&(99) = 24
        
        'Initialize pointer for shuffle table lookup by Rand& function
        r&(100) = 77
End Sub

â¤é´µÑÇÍÂèÒ§ (¨ÃÔ§æ) 㹡ÒÃàÃÕ¡ãªé§Ò¹


Option Explicit

Dim MAXNUM As Integer   ' ¨Ó¹Ç¹µÑÇàÅ¢ÊÙ§ÊØ´
Dim Flag()
Dim TempRandom()          ' à¡çºäÇé·´ÊͺäÁèãËéÁÕ¤èÒ«éÓ
Dim TempRandomAll()     ' ÊØèÁµÑÇàÅ¢ÍÍ¡ÁÒ·Ñé§ËÁ´
Dim blnFlag As Boolean

Private Sub Form_Load()
    txtRandom.Text = ""
    txtMax = ""
End Sub

Private Sub cmdRandom_Click()
If Trim(txtMax.Text) = "" Or Len(Trim(txtMax.Text)) = 0 Then Exit Sub
    MAXNUM = txtMax.Text
    
    ' ÊØèÁ¤èÒàÃÔèÁµé¹¡è͹
    RandShuffle Date$ + Time$ + Str$(Timer)
    '
    Call RandomNew
    
    ' Íѹ¹ÕéäÁèÁÕÍÐääÃѺ àÅ×è͹µÓá˹觵ÒÁ¡ÒÃáÊ´§¼Å¢Í§ TextBox à·èÒ¹Ñé¹àͧ
    txtRandom.SetFocus
    SendKeys "^{End}"
End Sub

Private Sub Timer1_Timer()
Dim k As Variant
Dim n As Integer
Dim i As Integer, j As Integer
ReDim Flag(MAXNUM)
ReDim TempRandom(MAXNUM)
ReDim TempRandomAll(MAXNUM)

    ' µÃǨÊͺ·Ø¡¤ÃÑé§·ÕèÁÕ¡ÒÃÊØèÁ
    For i = 1 To MAXNUM
        ' Flag is True if already random and fix Vaule
        If Flag(i) = False Then
            'Generate unique number
            Do
                'Generate any number in range
                n = RandInteger(1, MAXNUM)
        
                'Previously grabbed?
                blnFlag = True
                For j = 1 To i
                    k = TempRandomAll(j)
                    If j < i And n = k Then
                        blnFlag = False
                        Exit For
                    End If
                Next
            
                'Grab only if number is unique
                If blnFlag = True Then
                    TempRandom(i) = n
                    TempRandomAll(i) = n
                End If
            Loop Until blnFlag = True
        End If
    Next
End Sub

Sub RandomNew()
Dim i As Integer
ReDim TempRandom(MAXNUM)
    ' Trig Timer
    Timer1_Timer
    
    ' Êèǹ¹ÕéáËÅФÃѺ·Õè¹Óä»ãªé§Ò¹ä´éàÅÂ
    For i = 1 To MAXNUM
        txtRandom.Text = txtRandom.Text & " " & TempRandomAll(i)
    Next i
    
    ' ¹Óä»áÊ´§¼Åã¹ TextBox
    txtRandom.Text = txtRandom.Text & vbCrLf
End Sub

Private Sub cmdExit_Click()
    End
End Sub

Private Sub txtRandom_KeyPress(KeyAscii As Integer)
    ' äÁèÃѺ¡Òá´¤ÕÂìã´æ
    KeyAscii = 0
End Sub

Private Sub txtMax_KeyPress(KeyAscii As Integer)
    KeyAscii = CheckDigitOnly(KeyAscii)
End Sub

' ¿Ñ§¤ìªÑè¹µÃǨ¡Òá´¤ÕÂìãËéÃѺ¤èÒ੾ÒеÑÇàÅ¢à·èÒ¹Ñé¹
Function CheckDigitOnly(Index As Integer) As Integer
    Select Case Index
        Case 48 To 57 ' 0 - 9
        Case 8            ' Back Space
        Case 13         ' Enter
        Case Else
            Index = 0
    End Select
    CheckDigitOnly = Index
End Function

¨Õ ·Ù ¨Õ à¹çµ ´Íµ ¤ÍÁ - g2gNet Dot Com
àÅ¢·ÐàºÕ¹¾Ò³ÔªÂìÍÔàÅç¡·Ã͹ԡÊì 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] ËÃ×Í â·Ã. 08-6862-6560